혼공머_3_2 사이킷런으로 선형회귀모델 만들어보기
Jun 29, 2021
»
writing
혼자공부하는머신러닝+딥러닝 수업을 참고하여 작성하였습니다
3_2_사이킷런으로 선형회귀모델 만들어보기
사이킷런으로 선형회귀모델 만들어보기
1. 50cm 농어의 이웃
# 50cm 농어의 이웃
distances, indexes = knr.kneighbors([[50]])
# 훈련 세트의 산점도
plt.scatter(train_input, train_target)
# 훈련 세트 중 이웃샘플만 다시 그리기
plt.scatter(train_input[indexes], train_target[indexes], marker = 'D')
# 50cm 농어 데이터
plt.scatter(50,600, marker = '^')
plt.show()
2. 선형 회귀 (Linear regression) - 농어무게 = a*농어길이 + b - 특성과 타깃 사이의 관계를 가장 잘 나타내는 선형 방정식 - 선형 회귀가 찾은 특성, 타깃 사이의 관계는 선형 방정식의 계수 또는 가중치에 저장 (가중치는 방정식의 기울기나 절편 모두 의미) - 모델 파라미터 : 선형 회귀가 찾은 가중치처럼 모델이 특성에서 학습한 파라미터 - 다항 회귀 : 다항식을 사용하여 특성과 타깃 사이 관계 나타내기 (비선형이지만, 선형 회귀 표현 가능) - LinearRegression : scikit-learn 의 선형 회귀 클래스 (coef_ : 특성에 대한 계수 포함 배열) (배열 크기 = 특성 개수) (intercept_ : 절편 저장)
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(train_input, train_target)
print(lr.predict([[50]]))
# [531.14082146]
print(lr.coef_, lr.intercept_)
# [10.81181894] -9.45012573344502
3. 학습한 직선 그리기
plt.scatter(train_input, train_target)
# 25에서 50까지 1차 방정식 그래프
plt.plot([25,50], [25*lr.coef_ + lr.intercept_, 50*lr.coef_+ lr.intercept_])
plt.scatter(50, 600, marker = '^')
plt.show()
lr.score(train_input, train_target)
# 0.9598078862949299
lr.score(test_input, test_target)
# 0.9479458788393867
4. 다항회귀 - 무게 = a*길이^2 + b*길이 + c
train_poly = np.column_stack((train_input **2, train_input))
test_poly = np.column_stack((test_input **2, test_input))
lr = LinearRegression()
lr.fit(train_poly, train_target)
print(lr.predict([[50**2, 50]]))
print(lr.coef_, lr.intercept_)
# [570.00860719]
# [ 0.17435726 -0.76386654] 172.30877283539687
# 무게 = 0.17 * 길이^2 - 0.76 * 길이 + 172.3
5. 다항회귀 학습한 직선 그리기 - 무게 = 0.17 * 길이^2 - 0.76 * 길이 + 172.3
point = np.arange(25, 50)
plt.scatter(train_input, train_target)
plt.plot(point, 0.17*point**2 - 0.76*point + 172.3)
plt.scatter([50],[600], marker = '^')
plt.show()
lr.score(train_poly, train_target)
lr.score(test_poly, test_target)
# 0.9705596444561151
# 0.8943198401128738