다중 회귀
여러 개의 특성을 사용한 선형 회귀
특성 공학 : 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업
데이터 변환 PolynomialFeatures
# 특성 추가
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
poly.fit([[2,3]]) # 적용
poly.transform([[2,3]]) # 데이터 변환

2개의 특성을 가진 샘플 [2,3]이 6개의 특성을 가진 샘플 [1., 2., 3., 4., 6., 9.] 로 변환됨
기본적으로 각 특성을 제곱한 항을 추가하고 특성끼리 서로 곱한 항을 추가함
include_bias = False
사이킷런의 선형 모델은 자동으로 절편을 추가함
절편을 위한 항을 제거할 수 있음
다중 회귀 모델 훈련하기
다중 회귀 모델을 훈련하는 것은 여러 개의 특성을 사용하여 선형 회귀를 수행하는 것
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.transform(X_test)
lr = LinearRegression()
lr.fit(X_train_poly, y_train)
lr.score(X_train_poly,y_train), lr.score(X_test_poly,y_test)
# 1. 더 많은 특성 사용하기 --> 성능을 높이기 위한 방법이고 선형을 비선형으로 변경
# 2. 데이터 분할(학습용, 테스트용)
# 3. 모델 선택하고 학습하기
# 4. 결정계수(score 함수 이용) 출력, MAE 출력
# 시각화는 x축에 해당하는 값이 현재 3개이므로 그중에 한개를 선택해서 2차원 평면에 그린다
def show_result(degree=2):
poly = PolynomialFeatures(degree=degree)
perch_full_poly = poly.fit_transform(perch_full)
X_train,X_test,y_train,y_test = train_test_split(perch_full_poly,perch_weight)
lr = LinearRegression()
lr.fit(X_train,y_train)
print(f'학습용 결정계수 : {lr.score(X_train,y_train)}')
print(f'평가용 결정계수 : {lr.score(X_test,y_test)}')
X_train_predict = lr.predict(X_train)
X_test_predict = lr.predict(X_test)
print(f'학습용 절대값오차(MAE) : {mean_absolute_error(y_train, X_train_predict)}')
print(f'평가용 절대값오차(MAE) : {mean_absolute_error(y_test, X_test_predict)}')
# 시각화
X_train_predict = lr.predict(X_train)
sortindex = np.argsort(X_train[:,1])
plt.scatter(X_train[:,1],y_train,label='train')
plt.plot(X_train[:,1][sortindex],X_train_predict[sortindex],color='green', label='predict')
plt.scatter(X_test[:,1],y_test,label='test')
plt.legend()
plt.show()

'ML,DL' 카테고리의 다른 글
[ML] 확률적 경사 하강법 (0) | 2024.04.08 |
---|---|
[ML] 로지스틱 회귀 Logistic Regression (0) | 2024.04.08 |
[ML] Ridge, Lasso Regression (0) | 2024.04.08 |
[ML] 선형 회귀 Linear Regression (0) | 2024.04.05 |
[ML] K-최근접 이웃 회귀 (0) | 2024.04.05 |