[혼자 공부하는 머신러닝+딥러닝] 8강. 특성 공학과 규제 알아보기 - 다중회귀
https://www.youtube.com/watch?v=PLECEclz0p4&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=8
- 단순, 다항, 다중 회귀 분석 정리
- 단순회귀분석 - 직선, 1개 특성
- 다항회귀분석 - 곡선, 1개 특성
- 다중회귀분석 - 직선, 여러개 특성
- 다중 회귀 (multiple regression)
- 특성이 하나이면 2차원 평면 그래프로 표현할 수 있다.
- 특성이 두개이면 3차원 공간 그래프로 표현할 수 있다.
- 타깃은 회귀문제일 경우, 하나의 축에 자리를 잡고 있어야 한다.
- 특성이 두개일 경우 선형회귀가 학습하는 것은 평면의 방정식이 된다.
- 새로운 특성을 추가, 변경, 조합 하는 것을 특성공학이라 하며 feature engineering라 한다.
- 넘파이 튜토리얼
- https://ml-ko.kr/homl2/tools_numpy.html
- 판다스 튜토리얼
- https://ml-ko.kr/homl2/tools_pandas.html
- 다항 특성 만들기
- fit() 메서드는 새롭게 만들 특성 조합을 찾고 transform() 메서드는 실제로 데이터를 변환한다.
- degree 변수는 제곱항을 만들어 준다. 2로 설정하면 2제곱, 3으로 설정하면 3제곱을 만든다.
from sklearn.preprocessing import PolynomialFeatures
# degree = 2
poly = PolynomialFeatures()
poly.fit([[2,3]])
print(poly.transform([[2,3]]))
# 1(bias), 2,3,2**2, 2*3, 3**2
print(poly.transform([[2,3]]))
[[1. 2. 3. 4. 6. 9.]]
- 결과로 다음과 같은 방법으로 만든 배열을 확인할 수 있다.
- 1(bias), 2,3,2**2, 2*3, 3**2
- 1은 절편을 위한 가상의 특성으로 자동으로 생성된다.
- y = ax+b 의 식에서 [a,b]*[x,1]로 식을 변형할 수 있다. 이때 x의 절편으로 1이 필요하기 때문에 자동 생성된다.
- 선형회귀에서는 1이라는 특성 값을 무시한다.
- include_bias=False를 사용하면 1을 제외하고 생성한다.
- 선형회귀, 분류 방법들을 추정기(Estimator)라 부르고 PolynomialFeatures는 변환기(Transform)라 부른다
- 추정기(Estimator) 클래스에는 fit, predict, score 함수가 있다
- 변환기(Transform) 클래스에는 fit, transform, fit_transform 함수가 있다
- get_feature_names() 메서드를 호출하면 자동으로 생성된 배열의 특성이 각각 어떤 입력의 조합으로 만들어 졌는지 알려준다.
- 훈련세트 갯수가 44개, 특성이 55개로 설정하면, 맞춰야 할 대상보다 사용해야 할 도구가 더 많은 경우가 발생한다. 특성하나마다 샘플하나씩 대응해도 42개를 완벽하게 맞출 수 있기 때문에 과대적합이 될 수밖에 없다. 이런 경우 test 세트의 결과가 매우 나쁘게 나온다.
- 과대적합을 줄일 수 있는 방법으로 규제가 있다. 가중치(기울기) 값을 줄이는 방법이다.
- 대표적으로 다음 두가지 방법이 있다.
- Ridge regression(릿지 회귀)
- Lasso regression(라쏘 회귀)
- reference :
- 규제 전에 표준화
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_poly)
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)
- Ridge regression(릿지 회귀)
- (가중치)^2을 벌칙으로 사용한다. L2 규제라고도 부른다.
- 가중치 값을 '모델파라미터'라 부른다.
- 매개변수 : alpha = 1 -> 크게 하면 강도가 세지고 낮게 하면 강도가 약해진다.
- 사용자가 직접 정해줘야 하는 값들을 '하이퍼파라미터'라 부른다.
from sklearn.linear_model import Ridge
ridge = Ridge()
ridge.fit(train_scaled, train_target)
print(ridge.score(train_scaled, train_target))
0.98961016...
print(ridge.score(test_scaled, test_target))
0.979069...
- Lasso regression(라쏘 회귀)
- |가중치| 를 벌칙으로 사용한다. L1 규제라고도 부른다.
- 라쏘는 특정 가중치를 0으로 만들어 버릴 수 있다.
- print(np.sum(lasso.coef_ == 0)) 를 사용하면 현재 사용하지 않는 특성 수를 확인할 수 있다.
from sklearn.linear_model import Lasso
lasso = Lasso()
lasso.fit(train_scaled, train_target)
--------------------------------------
lasso = Lasso(alpha=10)
lasso.fit(train_scaled, train_target)
print(np.sum(lasso.coef_ == 0))
- 라쏘보다 릿지를 더 많이 선호한다.
- reference :
https://speedanddirection.tistory.com/74
https://herjh0405.tistory.com/70
https://dodonam.tistory.com/236
https://m.blog.naver.com/shoutjoy/221956655869
'데이터분석-머신러닝-AI > 강의 정리' 카테고리의 다른 글
[혼자 공부하는 머신러닝+딥러닝] 10강. 확률적 경사 하강법 알아보기 - 점진적 학습, 온라인 학습 (0) | 2023.11.11 |
---|---|
[혼자 공부하는 머신러닝+딥러닝] 9강. 로지스틱 회귀 알아보기 - 분류모델 (2) | 2023.11.09 |
[혼자 공부하는 머신러닝+딥러닝] 7강. 사이킷런으로 선형 회귀 모델 만들어 보기 - 선형 회귀, 다항회귀 (0) | 2023.10.24 |
[혼자 공부하는 머신러닝+딥러닝] 6강. 회귀 문제를 이해하고 k-최근접 이웃 알고리즘으로 풀어 보기 - reshape, 과대적합, 과소적합 (1) | 2023.10.24 |
[혼자 공부하는 머신러닝+딥러닝] 5강. 정교한 결과 도출을 위한 데이터 전처리 알아보기 - 표준화 정리 (0) | 2023.10.20 |
댓글