개발 환경
---------------------------------
OS : Mac
개발 툴 : colab
개발 언어 : python
---------------------------------
https://jpointofviewntoe.tistory.com/146
https://jpointofviewntoe.tistory.com/147
<이전 소스>
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
df = pd.read_csv('https://bit.ly/perch_csv_data')
perch_full = df.to_numpy()
fish_weight = np.array([5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0, 110.0,
115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0, 130.0,
150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0, 197.0,
218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0, 514.0,
556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0, 820.0,
850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0, 1000.0,
1000.0])
train_input, test_input, train_target, test_target = train_test_split(perch_full, fish_weight, random_state=42)
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(include_bias=False)
poly.fit(train_input)
train_poly = poly.transform(train_input)
test_poly = poly.transform(test_input)
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_poly)
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)
---------------------------------------------------------------------------
규제가 필요한 경우
특성의 개수를 크게 늘리면 선형 모델은 아주 강력해집니다.
어떠한 이유로 모델을 학습할 때 특성을 많이 추가하게 될 경우 훈련 세트에 너무 과대적합되므로 테스트 세트에서 형편없는 점수를 만듭니다.
[예시]
PolinomialFeatures 클래스의 degree 매개변수를 사용하여 5제곱 특성을 만들겠습니다.
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree = 5, include_bias=False)
poly.fit(train_input)
train_poly = poly.transform(train_input)
test_poly = poly.transform(test_input)
선형회귀 모델 객체를 생성하여 다시 훈련시키겠습니다.
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(train_poly, train_target)
print(lr.score(train_poly, train_target))
print(lr.score(test_poly, test_target))
[출력결과]
훈련세트에는 완벽한 점수를 내지만 테스트 세트는 음수입니다.
훈련세트에 과대적합된 모델이라 볼 수 있습니다.
선형 회귀 모델에 규제를 추가한 모델을 릿지와 라쏘라고 부릅니다.
두 모델은 규제를 가하는 방법이 다릅니다. 릿지는 제곱한 값을 기준으로 규제를 적용하고,
라쏘는 계수의 절댓값을 기준으로 규제를 적용합니다.
릿지 회귀(ridge)와 라쏘(Lasso) 회귀
릿지 회귀(ridge)
이전 포스팅에서 준비한 train_scaled 데이터로 릿지 모델을 훈련하겠습니다.
from sklearn.linear_model import Ridge
ridge = Ridge()
ridge.fit(train_scaled, train_target)
모델에 훈련세트와 테스트 세트를 넣고 평가
print(ridge.score(train_scaled, train_target))
print(ridge.score(test_scaled, test_target))
[출력 결과]
테스트 점수가 정상적이고 많은 특성을 사용했음에도 불구하고 훈련세트에 과대적합되지 않은 것으로 보입니다.
라쏘 회귀(Lasso)
from sklearn.linear_model import Lasso
lasso = Lasso()
lasso.fit(train_scaled, train_target)
print(lasso.score(train_scaled, train_target))
print(lasso.score(test_scaled, test_target))
[출력 결과]
릿지 모델만큼이나 좋은 성능을 냅니다.
'개발노트 > 머신러닝' 카테고리의 다른 글
Anaconda 설치하기 (0) | 2023.06.06 |
---|---|
[머신러닝] 특성공학과 규제 #4 적절한 alpha 값 찾기 (0) | 2023.03.23 |
[머신러닝] 특성공학과 규제 #2 (0) | 2023.03.22 |
[머신러닝] 특성공학과 규제 #1 (0) | 2023.03.21 |
[머신러닝] 사이킷 런 변환기, PolynomialFeatures (0) | 2023.03.21 |
댓글