일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 코딩독학
- 나혼자코딩
- 코드잇 TIL
- sql연습문제
- 코드잇TIL
- 메소드
- 결정트리
- CSS
- 다항회귀
- 선형회귀
- 경사하강법
- 파이썬
- 코딩공부
- 로지스틱회귀
- SQL
- 코드잇
- pandas
- 코딩
- HTML
- 오늘도코드잇
- 머신러닝
- for반복문
- Seaborn
- 판다스
- numpy
- 데이터분석
- 서브쿼리
- 행렬
- matplotlib
- 윈도우함수
- Today
- Total
목록분류 전체보기 (179)
Coding Diary.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vvqGV/btstzlg0579/Yx46845r9ZGcxKSwhrQMuK/img.png)
링크는 보통 해당 주소의 페이지로 연결해 줍니다. '페이지 연결' 외에 다른 동작들도 가능합니다. https://나 http://대신에 다른 내용을 넣으면 되는데, 이런 약속들을 URI 스킴(URI Scheme)이라고 부릅니다. 1. 이메일 보내기 mailto: 라는 걸 사용하면 이메일을 보낼 수 있습니다. 이 링크를 클릭하면 이메일 프로그램이나 이메일 앱을 열 수 있고, 받는 사람 주소에 링크에 적힌 이메일 주소를 자동으로 입력해 줍니다. 메일 보내기 2. 전화 걸기 tel:를 사용하면 전화를 걸 수 있습니다. 데스크톱 컴퓨터에서는 전화 기능이 없을 수 있지만, 스마트폰에서 이 링크를 클릭하면 전화 앱으로 연결됩니다. 전화 걸기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VPMEc/btstr4A8Ag2/c7naDiR1DqrSxUM5giFXOk/img.png)
1. 입력 변수와 파라미터 표현 입력 변수를 표현하는 방법을 알아보겠습니다. 속성이 하나일 때는 모든 데이터를 하나의 벡터로 아래와 같이 표현했습니다. 다중 선형 회귀에서는 기본적으로 한 열에 하나의 데이터를 표현하는 건 똑같습니다. 오른쪽 위에 있는 숫자는 몇 번째 데이터 인지를, 그리고 오른쪽 아래에 있는 숫자는 몇 번째 속성인지를 나타냅니다. 1행에는 첫 번째 데이터가, 2행에는 두 번째 데이터가 이렇게 저장돼있습니다. 첫 번째 행에는 0번째 속성, 1이 저장됩니다. 보통 선형 회귀의 가설 함수를 아래와 같이 표현합니다. 0번째 속성이 없긴 하지만 행렬로 표현할 때는 표현을 좀 더 통일성 있게 하기 위해 가상의 0번째 속성 x_0을 만들고 값을 항상 1로 설정해줍니다. 즉, 그리고 두 번째 행에 첫..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RKfeN/btstsPRy38f/hrEificWJhRC6sWcRCYMQK/img.png)
1. 다중 선형 회귀 경사 하강법 다중 선형 회귀에서도 선형 회귀와 마찬가지로 손실 함수가 아래와 같이 생겼습니다. 다중 선형 회귀에서는 입력 변수가 여러 개라서 가설 함수가 살짝 달라지지만, 손실 함수는 완전히 똑같습니다. 손실을 줄이기 위해서는 경사 하강법을 해야 하는데, 입력 변수가 하나일때와 차이가 있습니다. 입력 변수가 하나일때는 theta_0과 theta_1만 업데이트 하면 됩니다. 입력 변수가 하나일때는 위와 같이 하면 되는데, 입력 변수가 여러 개면 세타 값도 여러개입니다. 그러면 업데이트 할 세타 값디 많아지는 것 뿐입니다. 입력 변수가 n개 있다고 하면 theta_0 부터 theta_n까지 쭉 업데이트를 해야 경사 하강을 한 번 했다고 할 수 있습니다. 이렇게 나열된 식을 하나로 표현하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dY3Cae/btstwEPqyGW/4fCd45ccg5vneyJkuUeMRK/img.png)
1. 다중 선형 회귀 가설 함수 다중 선형 회귀에서는 가설 함수가 아래와 같습니다. 다중 선형 회귀에서는 x_1, x_2, x_3 이런 식으로 입력 변수가 여러 개 있습니다. 입력 변수가 n개 있으면 x_1부터 x_n까지 있는 것이죠. 그리고 theta_0은 상수항이고 그 뒤에 theta_1부터 theta_n까지 있습니다. 이전 글의 집 데이터를 생각해보면 x_1은 집 크기, x_2는 방 수, x_3은 지하철까지의 거리, x_4는 건물 나이 이렇게 있습니다. theta_1은 집 크기가 집 가격에 미치는 영향, theta_2는 방 수가 가격에 미치는 영향, theta_3은 지하철까지의 거리가 가격에 미치는 영향, 마지막으로 theta_4는 건물 나이가 가격에 미치는 영향입니다. 그리고 여기 있는 항들을 다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cyehbW/btstvR9lMCQ/KAwUNt24KaQvd3fUCkNLp0/img.png)
1. 다중 선형 회귀 다중 선형 회귀는 선형 회귀를 하나의 입력 변수가 아니라 여러 개의 입력 변수를 사용해서 목표 변수를 예측하는 알고리즘입니다. 이러한 학습 데이터가 있다고 하면 집 크기, 방 수, 건물 나이, 지하철 거리 등 이런 정보를 선형 회귀를 이용해서 집 값을 예측하려고 하는 것입니다. 2. 입력 변수와 목표 변수 선형 회귀에서는 입력 변수가 하나 있었고, 목표 변수가 하나 있었습니다. 입력 변수는 x라는 문자로 나타냈고, 목표 변수는 y라는 문자로 나타냈습니다. 그런데 다중 선형 회귀에서는 입력 변수가 여러 개 있습니다. 위의 표에서 집 크기, 방 수, 건물 나이, 지하철 거리 이렇게 입력 변수가 4개 있습니다. 입력 변수를 다른 말로는 '속성(feature)'라고도 합니다. 첫 번째 입력..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HPcWG/btstxl2Vagn/YPLKkvQYeATKmXh27fEKqK/img.png)
가설 함수는 세상에 일어나는 상황을 수학적으로 표현한다는 의미에서 '모델'이라고 부릅니다. 1. 모델의 평가 선형 회귀 모델을 학습시켜서, 나름 최적선이라고 생각하는 아래와 같은 가설 함수가 나왔다고 가정해봅시다. 그런데 모델을 학습시키고 나서는 이 모델이 얼마나 좋은지 평가를 해야 합니다. 이 모델이 결과를 얼마나 정확히 예측하는지를 평가해야한다는 것입니다. 2. RMSE 이때 많이 쓰는 게 '평균 제곱근 오차' 영어로는 'root mean square error' 줄여서 'RMSE'라고 합니다. 평균 제곱 오차에 루트를 한 것입니다. 루트를 하는 이유는 만약 우리가 집 가격을 예측한다고 하면, 목표 변수의 단위는 '원'입니다. 그런데 오차 제곱을 하면 단위가 '원 제곱'이 됩니다. 따라서 마지막에 루..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lzPIE/btstsQQsc8g/J4vHTDkdXITHAk1gk8dL8K/img.png)
경사 하강법을 하기 위해서는 두 변수 theta_0, theta_1을 아래와 같이 계속 업데이트 하면 된다고 이전 글에서 설명하였습니다. 이때 학습률 알파a는 경사를 내려갈때마다 얼마나 많이 그 방향으로 갈 건지를 결정하는 변수입니다. 이번 글에서 학습률 알파를 잘 못 고를 때 생기는 문제점에 대해서 알아보겠습니다. 이해를 쉽게 하기 위해 손실함수 J가 하나의 변수, thata로만 이루어졌다고 가정해보겠습니다. 1. 학습률 a가 너무 큰 경우 알파가 크면 클수록 경사 하강을 한 번을 할 때마다 thata의 값이 많이 바뀝니다. 그럼 아래와 같이 왼쪽과 오른쪽으로 성큼성큼 왔다갔다 하면서 진행이 됩니다. 심지어 a가 너무 크면 경사 하강법을 진행할수록 손실 함수 J의 최소점에서 멀어질 수도 있습니다. 2...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbkLEk/btstHcQ8lWs/SmaejgBsLMyZpYhUiKygsk/img.png)
1. 선형 회귀 경사 하강법 앞에 글에서 손실함수 J의 최소점을 찾을 때까지 위 식을 반복하면 되었습니다. 이 식을 직접 구현하기 위해 error을 다음과 같이 정의하겠습니다. 벡터 x의 평균을 u_x로 나타내면 라고 표현할 수 있다고 이 전 글에서 설명하였습니다. 밑의 공식을 바탕으로 구현해보겠습니다. 2. gradient_descent 함수 함수 gradient_descent는 실제 경사 하강법을 구현하는 함수입니다. 파라미터로는 임의의 값을 갖는 파라미터들 theta_0, theta_1, 입력 변수 x, 목표 변수 y, 경사 하강법을 몇 번을 하는지를 나타내는 변수 iterations, 학습률 alpha를 갖습니다. 처음에 gradient_descent 함수에 넘겨주는 theta_0, theta_1..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bBWAer/btstx8hYWt3/e26rGKMwzVDnNMC6mBuYd1/img.png)
경사 하강법을 이용하여 업데이트 하는 방법에 대해 알아보겠습니다. 세타제로와 세타원을 업데이트 하는 방법은 다음과 같습니다. 1. 세타0 업데이트 편미분을 하는 부분을 살펴봅시다. 여기 손실 함수 J가 있는데, 선형 회귀에서 우리의 손실 함수 J는 아래와 같습니다. 편미분 식에 대입하면 아래와 같습니다. 여기에 가설 함수 h는 다음과 같습니다. 이것을 위식에 대입하면 이걸 이제 세타0에 대해 편미분하면 아래와 같습니다. 가설 함수 h로 다시 돌려줍니다. 결국 편미분은 아래와 같이 나오는데 이걸 세타0을 업데이트 하는 기존 공식에 대입하면 됩니다. 2. 세타1 업데이트 세타1을 업데이트 하는 공식을 살펴봅시다. 편미분 하는 부분을 집중적으로 알아봅시다. 편미분 식에 손실 함수 J를 대입하면 아래와 같습니다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cabGzv/btstwkQYJHn/YDhZwN9TWZP3cl4tzgdfzk/img.png)
1. 손실 함수 손실 함수는 어떤 가설 함수를 평가하기 위한 함수입니다. 손실 함수의 아웃풋이 작을수록 가설 함수의 손실이 적기 때문에 더 좋은 가설 함수라고 할 수 있고, 반대로 손실 함수의 아웃풋이 클수록 가설 함수의 손실이 크므로 더 나쁜 가설 함수라고 할 수 있습니다. 손실 함수는 보통 J라는 문자를 쓰고 선형 회귀의 경우는 평균 제곱 오차가 손실 함수의 아웃풋 입니다. 특정 가설 함수의 평균 제곱 오차가 크면 이 손실 함수의 아웃풋이 큰 것이고 손실이 크기 때문에 안 좋은 가설 함수라는 것입니다. 반대로 가설 함수의 평균 제곱 오차가 작으면 이 손실 함수의 아웃풋이 작다는 것이고 손실이 적기 때문에 좋은 가설 함수인 것입니다. 원래 이 부분이 m분의 1 이었는데 여기세 2가 붙어서 2m분의 1로..