UOMOP

Linear Regression(선형 회귀) 본문

Ai/ML

Linear Regression(선형 회귀)

Happy PinGu 2022. 1. 25. 13:55
from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(train_input, train_target)
lr.predict([[50]])
array([1241.83860323])
선형 회귀 모델을 호출하고, 이 모델을 통해 훈련을 시켜 50cm의 농어의 무게를 예측해본 결과, 1241.84g가 출력되었다. k-최근접 이웃 회귀 모델보다는 더 이상적인 결과가 나왔음을 확인할 수 있다.

print("기울기 : {}\ny절편 : {}".format(lr.coef_, lr.intercept_))
기울기 : [39.01714496]
y절편 : -709.0186449535477
선형 회귀 모델에서는 lr.coef_에 기울기가 반환되고, lr.intercept_에 y절편이 반환된다.

plt.scatter(train_input, train_target)
plt.plot([15, 50], [15 * lr.coef_ + lr.intercept_, 50 * lr.coef_ + lr.intercept_], color = "y")
plt.scatter(50, lr.predict([[50]]), color = "r")
plt.scatter(50, knr.predict([[50]]), color = "m")
plt.xlabel("length")
plt.ylabel("weight")
plt.show()
노란선은 선형 회귀 모델을 통해 생성한 선형 방정식
빨간점은 선형 회귀 모델을 통해 예측한 50cm 농어의 무게
보라점은 k-최근접 이웃 회귀 모델을 통해 예측한 50cm 농어의 무게

훈련 셋을 통해서 최소 직선해를 구하고, 이 해들의 집합으로 방정식을 구해 값을 예측 할 수 있었다.

print("훈련 셋의 score() : {}".format(lr.score(train_input, train_target)))
print("검증 셋의 score() : {}".format(lr.score(test_input, test_target)))
훈련 셋의 score() : 0.939846333997604
검증 셋의 score() : 0.8247503123313558
훈련 셋과 검증 셋의 결정 계수를 확인해본 결과, 만족스럽지 못했다.
위 상황은 과적합 모두 발생한 것으로 보인다.
우선, 훈련 셋의 결정 계수가 너무 낮은 것으로 보아, 과소 적합 된 것을 알 수 있고
       검증 셋의 결정 계수가 훈련 셋의 결정 계수에 비해 너무 낮은 것으로 보아 과대 적합이 된 것이다.

다음과 같이 선형 회귀 모델의 경우 과적합 문제가 발생할 수 있으며, target 값이 음수가 나오는 상황이 발생할 수 있다.

 

Comments