#!/usr/bin/env python3

LinearRegression


Linear Regression은 아래 식을 이용하여 추정합니다.

ŷ = w[i]*x + b 
w[i]는 기울기, b는 y절편에 해당하고 특성이 많아지면 w[i]는 각 특성에 해당하는 기울기를 모두 가집니다.

이해를 돕기위해 인위적 데이터셋으로 동작환경을 살펴보겠습니다.
import mglearn
import matplotlib.pyplot as plt

mglearn.plots.plot_linear_regression_wave()
plt.show()

wave 데이터셋에 대한 선형 모델의 예측

회귀를 위한 선형 모델은 특성이 하나일 땐 직선이고
특성이 두개일 땐 평면
더 높은 차원에서는 hyperpane초평면이 됩니다.


특성이 많은 데이터셋이라면 linear model은 매우 훌룡한 성능을 낼 수 있습니다.
보통 OLS(ordinary least squares)최소제곱법을 많이 사용합니다.
linear regression은 parameter가 없는 것이 장점이지만
model의 복잡도를 제어할 방법이 없는 것이 단점입니다.


linear regression을 이용하여 인위적 데이터를 학습해보겠습니다.
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from mglearn.datasets import make_wave

x, y = make_wave(n_samples=60)
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)

lr = LinearRegression()
lr.fit(x_train, y_train)

train_score = lr.score(x_train, y_train)
test_score = lr.score(x_test, y_test)
print('{:.3f}'.format(train_score))
# 0.659
print('{:.3f}'.format(test_score))
# 0.693
train set와 test set의 점수가 매우 비슷한 것으로 보아 overfitting된 것을 알 수 있습니다.


linear regression의 속성을 보는 코드는 다음과 같습니다.
coef_는 기울기를 나타내며, intercept_는 절편을 나타냅니다. 또한 '_'는 머신러닝에서 유도된 결과를 나타내는 기호입니다.
print('{s[0]:.3f}'.format(s=lr.coef_)) # lr.coef_는 리스트이므로 소숫점 3자리로 표현하기 위해서는 리스트 안에 원소를 이용합니다.
# 0.442
print('{:.3f}'.format(lr.intercept_))
# -0.017



참고 자료: 

[1]Introduction to Machine Learning with Python, Sarah Guido


'python 머신러닝 -- 지도학습 > Regression' 카테고리의 다른 글

Decision Tree Regressor  (0) 2018.03.14
Lasso  (0) 2018.03.13
Ridge  (0) 2018.03.12
k_NN(k-최근접 이웃) Regression  (1) 2018.03.12

+ Recent posts