전체 글(113)
-
2-2. 학습 곡선(Learning Curve)
분석하고자 하는 대상을 모델을 통해 분석할 경우, 올바르게 훈련시켰는지 아닌지 판단이 안 설 수 있다. 훈련 세트에만 과도하게 정확한 예측 모델을 만들었을 경우를 '과대 적합'이라하고, 과대 적합을 피하려하다보니 모델이 약하게 훈련될 경우를 '과소 적합'이라고 한다. 예측 모델이 과대 적합되었을 경우 일반화가 잘 이루어지지 않아서 테스트 세트에서는 예측이 안 맞을 수도 있고, 과소 적합되었을 경우, 정확한 예측 모델이라고 하기 힘들다. 과대 적합, 과소 적합을 판단하기 위한 몇 가지 방법이 존재하는데, 이 중 하나가 학습 곡선(Learning Curve)이다. 학습 곡선은 예측 모델을 통해 만들어진 훈련 세트와 검증 세트의 모델 성능 간의 차이를 나타내는 그래프이다. X축은 반복(iteration)으로,..
2021.04.27 -
2-1. 다항 회귀(Polynomial Regression)
1장에서는 선형 데이터를 추정하는 방법을 살펴보았다. 다항 회귀는 비선형 데이터를 선형 모델을 통해 추정하는 기법이다. 먼저 각 특성의 거듭제곱을 (기존 특성과 함께) 새로운 특성으로 추가하고, 이를 선형 모델로 훈련시키는 원리이다. 먼저 샘플을 생성한다. m = 100 X = 6*np.random.rand(m,1) - 3 y = 0.5*X**2 + X + 2 + np.random.rand(m,1) from sklearn.preprocessing import PolynomialFeatures poly_feather = PolynomialFeatures(degree=2, include_bias=False) X_poly = poly_feather.fit_transform(X) 사이킷런의 PolynomialF..
2021.04.26 -
1-3. 경사 하강법(Gradient descent) - 확률적 경사 하강법(SGD), 미니배치 경사 하강법
확률적 경사 하강법(SGD) 경사 하강법의 두번째 방법은 확률적 경사 하강법(SGD)이다. 배치 경사 하강법의 단점은, 추정한 파라미터를 전체 샘플에 적용하고, 그에 대한 비용함수와 그레디언트를 계산할 때도 전제 샘플을 사용한다는 것이다. 이는 훈련 샘플 크기가 매우 커질 경우, 시간적 비용이 크게 들게 된다. 확률정 경사 하강법(SGD)는 파라미터를 업데이트 매 스텝마다, 하나의 샘플을 무작위로 선택하여 그 하나의 샘플에 대한 비용함수 그레디언트를 계산하고, 파라미터를 업데이트한다. def SGD_gradient_cost_fun(x_b, y, y_hat): random_idx = np.random.randint(len(x_b)) x_i = x_b[random_idx:random_idx+1] y_i = ..
2021.04.26 -
1-2. 경사 하강법(Gradient Descent) - 배치 경사 하강법
선형 회귀를 훈련시킬 수 있는 대표적인 방법 중 하나가 경사 하강법(Gradient Descent)이다. 경사 하강법은 비용 함수를 최소화하는 방향으로 가중치와 편향을 업데이트한다. 이렇게 비용함수를 최소화하는 모델 파라미터의 조합을 찾는 과정을 '모델의 파라미터 공간에서 찾는다'라고 한다. 출처 : arahna.de/gradient-descent/ 미적분의 기본적인 개념으로, 주어진 구간 안에서 f(x)를 미분하여 f'(x) = 0 이 되는 지점의 x에서의 f(x)이 최대값, 최소값이 된다. 경사 하강법도 이와 같은 원리를 동일하게 적용한다. 경사 하강법에는 크게 배치 경사 하강법, 확률적 경사 하강법으로 나뉘어진다. 배치 경사 하강법 내가 추정하고자 하는 선형 모델이 위와 같다면, 찾고자 하는 파라미..
2021.04.26 -
1-1. 선형 회귀(Linear regression)
우리는 일상 속에서 '선형 모델'을 쉽게 찾아볼 수 있다. 나이에 따른 성인병 발병확률이나, 소득과 비만율과의 상관지수 등이 그 예가 될 수 있다. 선형 회귀(Linear regression)는 이러한 선형 모델을 분석하기 위한 방법으로, 여러 샘플 입력(X)와 그에 대한 결과값(y)가 주어졌을 때 이 데이터셋(dataset)을 분석하여 해당 데이터가 어떤 양상을 띠는지 선(line)으로서 추정하는 모델이다. X = 2*np.random.randn(50,1) y = 4 + 3*X + np.random.randn(50,1) plt.scatter(X,y) plt.xlabel('X') plt.ylabel('y') plt.show() 1의 mean 값을 가지는 50개의 Gaussian Distribution 난..
2021.04.26