일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩
- 윈도우함수
- 판다스
- 파이썬
- 선형회귀
- 로지스틱회귀
- Seaborn
- 코드잇TIL
- matplotlib
- 런던
- HTML
- numpy
- 코딩공부
- 다항회귀
- 머신러닝
- 영국석사
- for반복문
- 결정트리
- CSS
- 코드잇 TIL
- SQL
- sql연습문제
- 오늘도코드잇
- 데이터분석
- 코드잇
- 코딩독학
- 유학생
- 경사하강법
- 나혼자코딩
- 행렬
- Today
- Total
목록전체 글 (184)
영국 척척석사 유학생 일기장👩🏻🎓

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..

경사 하강법을 이용하여 업데이트 하는 방법에 대해 알아보겠습니다. 세타제로와 세타원을 업데이트 하는 방법은 다음과 같습니다. 1. 세타0 업데이트 편미분을 하는 부분을 살펴봅시다. 여기 손실 함수 J가 있는데, 선형 회귀에서 우리의 손실 함수 J는 아래와 같습니다. 편미분 식에 대입하면 아래와 같습니다. 여기에 가설 함수 h는 다음과 같습니다. 이것을 위식에 대입하면 이걸 이제 세타0에 대해 편미분하면 아래와 같습니다. 가설 함수 h로 다시 돌려줍니다. 결국 편미분은 아래와 같이 나오는데 이걸 세타0을 업데이트 하는 기존 공식에 대입하면 됩니다. 2. 세타1 업데이트 세타1을 업데이트 하는 공식을 살펴봅시다. 편미분 하는 부분을 집중적으로 알아봅시다. 편미분 식에 손실 함수 J를 대입하면 아래와 같습니다..

1. 손실 함수 손실 함수는 어떤 가설 함수를 평가하기 위한 함수입니다. 손실 함수의 아웃풋이 작을수록 가설 함수의 손실이 적기 때문에 더 좋은 가설 함수라고 할 수 있고, 반대로 손실 함수의 아웃풋이 클수록 가설 함수의 손실이 크므로 더 나쁜 가설 함수라고 할 수 있습니다. 손실 함수는 보통 J라는 문자를 쓰고 선형 회귀의 경우는 평균 제곱 오차가 손실 함수의 아웃풋 입니다. 특정 가설 함수의 평균 제곱 오차가 크면 이 손실 함수의 아웃풋이 큰 것이고 손실이 크기 때문에 안 좋은 가설 함수라는 것입니다. 반대로 가설 함수의 평균 제곱 오차가 작으면 이 손실 함수의 아웃풋이 작다는 것이고 손실이 적기 때문에 좋은 가설 함수인 것입니다. 원래 이 부분이 m분의 1 이었는데 여기세 2가 붙어서 2m분의 1로..

1. 좋은 가설 함수 찾기 가설 함수는 아래와 같은 형태로 생겼습니다. 최대한 단순하게 예시를 들기 위해 입력 변수가 딱 하나 있다고 가정해 봅시다. 집 크기를 가지고 집 값을 예측하려고 하면, 입력 변수 x가 집 크기입니다. 아래와 같은 데이터들이 주어졌다고 가정해봅시다. 여기에 딱 맞는 가설 함수를 찾아봅시다. 이렇게 세 개의 가설 함수가 있는데, 어떤 함수가 이 데이터셋에 가장 적합할까요? 눈으로 보면 주황색과 보라색 보다는 분홍색이 제일 잘 맞는 것 같은데 어떤 기준을 두고 비교하는게 좋을까요? 2. 평균 제곱 오차 선형 회귀에서 가장 많이 쓰는 가설 함수가 얼마나 좋은지 평가하는 방법은 평균 제곱 오차(mean squared error) 입니다. 앞 글자만 따서 MSE라고도 합니다. 이 평균 제..

1. 가설 함수 우리가 선형 회귀에서 하려는 것은 데이터가 있을 때, 이 데이터들에 가장 잘 맞는 최적선을 찾아내는 것입니다. 우리는 이 최적선을 이용해서 새로운 입력 변수에 대한 목표 변수를 예측할 수 있습니다 . 우리는 최적선을 찾아내기 위해 다양한 함수를 시도해봐야 합니다. 우리가 시도하는 이 함수 하나하나를 '가설 함수(hypothesis function)'이라고 부릅니다. 일단 우리가 찾으려는 선은 어떤 곡선이 아니라 직선입니다. 직선이라는 것은 일차 함수라는 것이고 y=ax+b의 형태로 나타나게 됩니다. 결국 선형 회귀의 임무는 계수 a랑 상수 b를 찾아내는 것입니다. 2. 가설 함수 표현법 문제를 단순화하기 위해서 입력 변수가 하나라고 가정을 합니다. 하지만 집 가격을 예측하는데 집의 크기 ..

1. 선형 회귀 (Linear Regresison) 선형 회귀는 데이터를 가장 잘 대변해 주는 선을 찾아내는 것 입니다. 이 데이터에 가장 잘 맞는 가장 적절한 하나의 선을 찾아내는 것입니다. 통계학에서는 이 선을 최적선 (line of best fit) 이라고 합니다. 데이터에 잘 맞는 최적선을 찾았다고 가정해봅시다. 만약, 우리가 50평인 집의 가격을 알고 싶으면 이 선에서 찾으면 됩니다. 이 선에 의하면, 50평인 집은 약 20억원이라고 할 수 있습니다. 그리고 30평인 집은 약 10억 5천만원이라고 할 수 있는 것입니다. 2. 변수 선형 회귀에서 우리는 어떤 정보(집 크기)를 갖고, 어떤 답(집 가격)을 예측하려고 하는 것입니다. 우리가 맞추려고 하는 값을 '목표 변수(target variable..

1. 편미분 위의 함수에서는 인풋 변수가 x 하나만 있는 게 아니라, x랑 y 이렇게 두 개가 있습니다. 이럴 때 '편미분' 이라는 것을 사용합니다. 편미분이란, 두 인풋 변수 x랑 y에 대해서 모두 미분을 하는 게 아니라, 변수 하나에 대해서만 미분을 하는 것입니다. 그러면 위의 식에서는 변수 x에 대해서 편미분을 할 수도 있고, 변수 y에 대해서 편미분을 할 수도 있습니다. 2. x에 대해서 편미분 x에 대해서 미분으로 하면 d/dx로 쓰는데, x에 대해서 편미분을 하면 기호로 ∂/∂x 를 씁니다. 구부러진 d라고 생각하고 델(델타) 이라고 읽습니다. x에 대해서 편미분을 하면 x를 제외한 나머지 변수들은 마치 상수인 것처럼 취급을 하면 됩니다. 즉 위의 식에서 x가 아닌 문자 즉, y는 상수라고 생..

1. 극소점(Local Minimum) 위의 그림과 같이 극소점은 그래프에서 아래로 볼록 튀어나오는 경우입니다. 이 지점에서 왼쪽으로는 기울기가 음수고, 오른쪽으로는 기울기가 양수입니다. 기울기가 음수에서 양수로 전환할 때 한 번 0을 찍고 가는 거라고 생각하면 됩니다. 위의 그림에서는 아래로 볼록 튀어나오는 경우가 여러 번 있습니다. 즉, 극소점이 여러개인데, 이 중에서 가장 작은 값은 최소점, 영어로는 global minimum이라고 합니다. 2. 극대점 (Local Maximum) 극소점이랑 반대되는 개념으로는 극대점이 있습니다. 극대점은 그래프에서 위로 볼록 튀어나오는 경우입니다. 극대점의 왼쪽으로는 기울기가 양수고, 오른쪽으로는 기울기가 음수입니다. 기울기가 양수에서 음수로 전환할 때 0을 찍고..

1. 전치행렬 먼저, 행렬 A를 정의해 줍니다. A를 구해보면 아래와 같습니다. A의 전치행렬(transpose)를 구해보겠습니다. 더 간단한 방법은 .T를 쓰는 것입니다. 2. 단위행렬 단위행렬은 identity로 나타냅니다. 괄호 안에는 몇행몇열을 만들고 싶은지 쓰면 됩니다. 단위행렬의 특징은 어떠한 행렬과 곱하더라도 자기자신이 나온다는 것입니다. 3. 역행렬 역행렬은 Inverse로 나타냅니다. inv앞에 p를 붙이면 역행렬이 없더라도 가장 비슷한 값을 찾아줍니다. 이렇게 찾은 행렬이 실제 역행렬이 맞는지 확인하려면 역행렬의 성질을 이용해서 두 행렬을 곱했을 때 단위행렬이 나오면 됩니다. 확인해보니 100% 값이 맞아떨어지지는 않습니다.

1. 전치 행렬 A라는 행렬이 위와 같다고 가정해 봅시다. 이 A라는 행렬의 열과 행을 바꿔 봅시다. 이렇게 바꾼게 '전치 행렬' 이라는 것입니다. A의 전치, 즉 A의 transpose라는 의미에서 A위에 작은 T를 써서 표기합니다. 기존에 첫 번째 행이였던 게 첫 번째 열이 되고, 두 번째 행이였던 게 두 번째 열이 되었습니다. 마찬가지로 첫 번째 열이였던 게 첫 번째 행이 되고 두 번째 열은 두 번째 행이 되고, 세 번째 열은 세 번째 행이 되었습니다. 전치 행렬을 사용하는 이유는 무엇일까요? 행렬과 행렬을 곱할 때, 왼쪽 행렬의 열 수와 오른쪽 행렬의 행 수가 맞아떨어져야 합니다. 이런 식으로 행렬을 계산할 때 모양을 맞춰야 할 때가 있는데, 기존 행렬에서 모양이 맞지 않으면 전치 행렬을 이용해서..

1. numpy로 행렬 연산하기 먼저, numpy를 불러옵니다. 행렬 A는 직접 정해주고, 행렬 B는 랜덤한 수를 불러옵시다. 위와 같이 해주면 나오는 행렬은 아래와 같습니다. 두 행렬을 더해봅시다. A행렬의 스칼라곱을 구해봅시다. 두 행렬의 곱을 나타내는 방법은 두가지가 있습니다. 위와 같이 나타낼 수도 있고, 아래와 같이 @ 표시로 나타낼 수도 있습니다. 여러 연산을 섞으면 실수의 연산법칙과 마찬가지로, 괄호 안에 있는 것이 먼저 계산되고, 곱하기가 먼저 계산됩니다.

1. 요소별 곱하기 행렬을 곱하는 방법은 외적곱과 내적곱 두가지가 있습니다. 하지만 머신 러닝에서 내적곱과 함께 유용하게 쓰이는 곱셈 연산이 하나 더 있스빈다. 요소별 곱하기 (Element-wise Multiplication)이라고 하는 연산입니다. 행렬 덧셈 연산과 거의 똑같은 성질을 가집니다. 위의 두 행렬의 요소별 곱하기를 해봅시다. 표기는 동그라미를 써서 나타냅니다. 요소별 곱하기는 이름 그대로 같은 행과 열에 있는 요소들끼리 곱해서 새로운 행렬을 만드는 연산입니다. 실제로 계산을 하면 아래와 같습니다. 물론 같은 차원을 갖는 행렬 사이에만 연산이 가능합니다. 2. numpy로 요소별 곱하기 하기 두 행렬 사이에 * 연산자를 쓰면 요소별 곱하기가 됩니다. 결과를 확인하면 아래와 같습니다.