본문 바로가기

ML,DL

[ML] 다중 회귀 multiple regression

다중 회귀

여러 개의 특성을 사용한 선형 회귀

특성 공학 : 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업

데이터 변환 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