[머신러닝] K - 최근접 이웃 회귀 (K-NN Regression) 01과 이어집니다.
01 때는 그래프가 산포도로만 나타나 있었습니다. 이번에는 산포도 위에 그 값에 해당하는 직선과 곡선을 그려보겠습니다.
선형회귀 (linear regression)
널리 사용되는 대표적인 회귀 알고리즘입니다 이 알고리즘을 활용하여 데이터의 a(기울기)와 b(절편)을 찾을 수 있습니다.
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)
lr.predict([[50]])
KNeighborsRegressor 모델(1033)을 썻을 때와 결과가 다르게 나왔습니다.
이제 이를 표현한 그래프를 그려보겠습니다.
직선
우선 직선의 방정식은 일차함수와 모양이 같습니다. 기울기(a)와 x값을 곱하고 절편(b)을 곱하면 됩니다. 즉 y = ax + b
그렇다면 회귀 데이터에서 값의 기울기와 절편을 구해보겠습니다.
.coef_ .intercept_
모델.coef_는 기울기를 구해주고, 모델.intercept는 절편을 구해줍니다.
a = lr.coef_ # 기울기
b = lr.intercept_ # 절편
# 선 그래프는 .plot
# 시작, 끝 # 시작 , # 끝
plt.plot([15, 50], [15 * a + b, 50 * a + b])
distnces, indexes= knr.kneighbors([[50]])
plt.scatter(X_train[indexes], y_train[indexes])
plt.scatter(50, 1242, marker='D', c = 'r')
plt.scatter(X_train, y_train)
사실상 시본의 sns.regplot(x, y) 함수를 사용하면 더 쉽게 직선을 그릴 수 있다
곡선
값의 분포 모양을 보면 직선이 아니라 상승곡선에 가깝습니다.
곡선은 이차방정식, y = ax² + bx + c 형태입니다. 그렇다면 이차방정식을 쓰기 위해
X값은 [ X ** 2, X ] 의 값을 가져야할 필요가 있습니다.
poly_input = np.column_stack((X_train ** 2, X_train))
numpy의 column_stack 함수를 사용하여 각 인덱스와 맞게, 두개의 값이 들어가도록 poly_input 배열을 생성했습니다.
이제 새로운 X 데이터로 다시 학습을 시켜보겠습니다.
lr.fit(poly_input, y_train)
lr.predict([[50**2, 50]])
모델이 새로운 학습을 진행했으므로 기울기(coef_)와 절편(intercept_)을 다시 구해야 합니다.
a = lr.coef_[0]
b = lr.coef_[1]
c = lr.intercept_
X 제곱은 기울기가 1.01 / X는 기울기가 -21.6 / y 절편은 116 이 나왔습니다.
이제 이차방정식의 계수와 절편 a,b,c를 알게 됐습니다. 이를 그래프로 표현해보겠습니다.
x = np.arange(15, 51)
plt.plot(x, ( a * x**2) + (b * x) + c)
plt.scatter(X_train[indexex], y_train[indexex)
plt.scatter(50, lr.predict([[50**2, 50]]), marker='D', c = 'r')
plt.scatter(X_train, y_train)
곡선을 표현할 때는 x값의 시작과 끝 위치가 아닌, 각각의 위치가 필요하므로 arange를 사용해 15부터 50까지 범위를 잡았습니다.
'인공지능 > 머신러닝' 카테고리의 다른 글
[머신러닝] 결정트리 (Decision tree) (0) | 2023.09.22 |
---|---|
[머신러닝] 앙상블 학습 (Ensemble Learning) (2) | 2023.08.29 |
[머신러닝] 전처리 (pre-processing) (1) | 2023.04.11 |
[머신러닝] K - 최근접 이웃 회귀 (K-NN Regression) 01 (0) | 2023.04.08 |
[머신러닝] K - 최근접 이웃 분류(K-NN Clssification) (0) | 2023.04.04 |