1. 다중회귀
- 다중회귀 : 여러개의 특성을 사용한 선형회귀
- 특성공학 : 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업
Ex) 특성이 a,b,c 인경우 특성공학을 이용하면 a^2, ab, abc 등의 특성을 만들 수 있다.
<변환기>
- 사이킷런에서 특성을 만들거나 전처리 하기 위한 다양한 클래스
- 변환기 클래스에서는 모두 fit(), transform()을 제공한다.
Ex) PolynomialFeatures 클래스로 만들어본 특성을 가진 샘플들
from sklearn.processing import Polynomial Features
poly = PolynomialFeatures()
poly.fit([[2,3]])
print(poly.transform([[2,3]]))
>> [[1. 2. 3. 4. 6. 9.]]
- PolynomialFeatures 클래스는 기본적으로 각 특성을 제곱한 항(위에선 4,9)을 추가하고 특성끼리 서로 곱한항(위에선 6)을 추가한다.
- 1이 추가된 이유는 선형방정식의 절편 때문이다. 선형 방정식의 절편은 항상 값이 1인 특성과 곱해지는 계수이기 때문에 특성에 1이 추가되었다.
- 하지만 사이킷런의 선형 모델은 자동으로 절편을 추가하므로, 굳이 특성을 이렇게 만들 필요가 없다. 이를 해결하기 위해선 include_bias = False를 지정하면 된다.
poly = PolynomialFeatures(include_bias=False)
poly.fit([[2,3]])
print(poly.transform([[2,3]]))
>> [[2. 3. 4. 6. 9.]]
2. 규제
- 규제 : 머신러닝 모델이 훈련세트를 너무 과도하게 학습하지 못하도록 훼방하는 것.
- 선형 회귀 모델의 경우에는 특성에 곱해지는 계수의 크기를 작게 만드는 일을 말함.
- 일반적으로 선형 회귀 모델에 규제를 적용할때 계수 값의 크기가 많이 다르면 공정하게 제어 되지 않음 => 규제를 적용하기 전에 먼저 정규화를 실행해야 함.(사이킷런에서 제공하는 StandardScaler클래스 활용)
from sklearn.preprocessing import StandardScaler
# StandardSclaer 클래스의 객체 ss 초기화
ss = StandardScaler()
# train_poly로 객체 훈련(반드시 훈련 세트로 학습한 변환기를 사용해 테스트 세트까지 변환해야함)
ss.fit(train_poly)
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)
- 선형 회귀 모델에 규제를 추가한 모델을 릿지(ridge)와 라쏘(lasso)라고 부름.
- 릿지와 라쏘 모두 sklearn.linear_model 패키지 안에 존재함.
<릿지회귀>
- 계수를 제곱한 값을 기준으로 규제를 적용함.
from sklearn.linear_model import Ridge
ridge = Ridge()
ridge.fit(train_scaled,train_target)
print(ridge.score(train_scaled, train_target)
>> 0.9896XX..
<라쏘회귀>
- 계수의 절댓값을 기준으로 규제를 적용함.
from sklearn.linear_model import Lasso
lasso = Lasso()
lasso.fit(train_scaled,train_target)
print(lasso.score(train_scaled, train_target)
>> 0.9800XX..
- 라쏘 모델은 계수 값을 아예 0으로 만들 수 있다. 따라서 라쏘모델의 계수가 0인 값을 종합해서 유용한 특성을 골라내는 용도로 사용할 수 있다.
print(np.sum(lasso.coef_==0))
<하이퍼 파라미터>
- 머신러닝 모델이 학습할 수 없고 사람이 알려줘야 하는 파라미터
- 릿지와 라쏘모델을 사용할때 규제의 양을 alpha를 사용해 임의로 조절할 수 있는데, 여기서 alpha가 하이퍼 파라미터에 해당된다.
(참고) 혼자 공부하는 머신러닝에서는 함수와 클래스의 파라미터는 매개변수, 모델과 관련된 파라미터는 파라미터라고 표현했다고 한다.
#alpha값에 따른 릿지와 라쏘 score 변화 그래프
import matplotlib.pyplot as plt
ridge_train_score = []
ridge_test_score = []
lasso_train_score = []
lasso_test_score = []
alpha_list = [0.001,0.01,0.1,1,10,100]
#릿지 모델 테스트
for alpha in alpha_list:
ridge = Ridge(alpha=alpha)
ridge.fit(train_scaled,train_target)
ridge_train_score.append(ridge.score(train_scaled,train_target)
ridge_test_score.append(ridge.score(test_scaled,test_target)
plt.plot(np.log10(alpha_list),ridge_train_score)
plt.plot(np.log10(alpha_list),ridge_test_score)
#라쏘 모델 테스트
for alpha in alpha_list:
lasso = Lasso(alpha=alpha)
lasso.fit(train_scaled,train_target)
lasso_train_score.append(lasso.score(train_scaled,train_target)
lasso_train_score.append(lasso.score(test_scaled,test_target)
plt.plot(np.log10(alpha_list),lasso_train_score)
plt.plot(np.log10(alpha_list),lasso_test_score)
<전체 소스 코드>
링크 : https://bit.ly/hg-03-3
'혼공단 > 혼공단 5기' 카테고리의 다른 글
혼자 공부하는 머신러닝 + 딥러닝 4장 - 로지스틱 회귀 (0) | 2021.02.11 |
---|---|
[혼공단 5기] 혼자 공부하는 머신러닝 + 딥러닝 2주차 후기 및 미션 인증 (0) | 2021.02.04 |
혼자 공부하는 머신러닝 + 딥러닝 3장 - 선형 회귀 (0) | 2021.02.02 |
혼자 공부하는 머신러닝 + 딥러닝 3장 - k-최근접 이웃 회귀 (0) | 2021.02.01 |
[혼공단 5기] 혼자 공부하는 머신러닝 + 딥러닝 1주차 후기 및 미션 인증 (0) | 2021.01.29 |