반응형
개발 환경
---------------------------------
OS : Mac
개발 툴 : colab
개발 언어 : python
---------------------------------
<이전 소스>
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(degree = 5, 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)
규제의 양 조절하기
릿지와 라쏘 모델을 사용할 때 규제의 양을 임의로 조절할 수 있습니다.
모댈 객체를 만들 때 alpha 매개변수로 규제의 강도를 조절합니다.
alpha 값이 크면 규제 강도가 세지므로 계수 값을 더 줄이고 조금 더 과소적합되도록 유도합니다.
alpha 값이 작으면 계수를 줄이는 역할이 줄어들고 선형 회귀모델과 유사해지므로 과대적합일 가능성이 큽니다.
alpha 값은 모델이 학습하는 값이 아닌 사전에 우리가 설정해줘야 하는 값입니다.
이렇게 머신러닝이 학습할 수 없고 사람이 알려줘야하는 값을 하이퍼파라미터 라고 합니다.
적절한 alpha 값 찾기
alpha 값에 대한 R제곱 값의 크래프를 그려보겠습니다.
- alpha 값을 0.001부터 10배씩 늘려서 0.001, 0.01, 0.1, 1, 10, 100 원소가 들어있는 alpha_list 생성
from sklearn.linear_model import Lasso
import matplotlib.pyplot as plt
train_score = []
test_score = []
alpha_list = [0.001, 0.01, 0.1, 1, 10, 100]
for alpha in alpha_list:
lasso = Lasso(alpha=alpha, max_iter=10000)
lasso.fit(train_scaled, train_target)
train_score.append(lasso.score(train_scaled, train_target))
test_score.append(lasso.score(test_scaled, test_target))
plt.plot(np.log10(alpha_list), train_score)
plt.plot(np.log10(alpha_list), test_score)
plt.xlabel('alpha')
plt.ylabel('R^2')
plt.show()
[출력 결과]
- 적절한 alpha 값은 두 그래프가 가장 가깝고 테스트 세트의 점수가 가장 높은 값입니다.
- 1이 되겠군요
- 아까 np.log10으로 변환해줬으니 10 ^ 1 = 10 이 되겠습니다.
반응형
'개발노트 > 머신러닝' 카테고리의 다른 글
Anaconda 설치하기 (0) | 2023.06.06 |
---|---|
[머신러닝] 특성공학과 규제 #3 규제가 필요한 이유, 릿지 라쏘 회귀 (0) | 2023.03.22 |
[머신러닝] 특성공학과 규제 #2 (0) | 2023.03.22 |
[머신러닝] 특성공학과 규제 #1 (0) | 2023.03.21 |
[머신러닝] 사이킷 런 변환기, PolynomialFeatures (0) | 2023.03.21 |
댓글