DeseoDeSeo
[Machine Learning] 선형 모델(회귀) 평가 지표 및 데이터 스케일링 본문
⛧ 선형모델(회귀) 평가 지표
: 여러 머신러닝 모델들을 사용했을 때 성능지표를 보고 모델을 비교하고 판단함.
( 정량적인 지표가 중요 )
MSE(Mean Squared Error) : 0 ~ 무한대
➜ 예측 값과 실제 값의 차이에 대한 제곱을 평균한 값.
< MSE를 기준으로 R2 score를 사용 ➜ score >
R2 score : 결정계수, 회귀 모델이 데이터에 얼마나 잘 맞는지 평가하는데 사용됨.
➜ 모델의 독립변수에 의해 설명되는 종속변수의 분산 비율
( 1에 가까울 수록 완벽하게 맞는 것. )
-1 : 모델이 설명을 잘 못하는 경우
1 : 모델이 잘 설명한 경우, 모델이 좋다고 판단됨.
규제(Regularization) 선형 모델
: 선형모델의 과적합을 방지하기 위한 방법
과적합된 모델 ➜ 너무 복잡하게 적용되어 일어남. 따라서 현재 특성을 줄이거나 특성들의 영향력을
최소화하는 방법 필요.
규제를 적용시킨 모델
○ LinearRegression 모델이 가지고 있는 단점 : 모델이 잘 못 되었을 경우 , 수정 안 됨 ➜ 규제를 가해서 단점해소
⛧ 규제 : 선형모델에서 가중치(w)에 영향을 주는 것 ( ➜ 모델에 개입을 한다. )
☑ 과적합된 모델 : 특성⬆ 분산 ⬆ 편향 ↓
☑ 과소적합된 모델 : 분산 ↓ 편향⬆
따라서, 분산 정도를 줄여주기 위해 특성치들은 규제하여 사용한다.
➤ 규제는 정규화 !
규제 선형모델에는 대표적으로 Ridge, Lasso가 있음.
Ridge : L2를 규제. ( LinearRegression(손실함수) + L2 Norm )이 최소가 되도록 함.
- L2 Norm값 앞에 alpha값을 부여해 조절하여 사용. alpha값은 사람이 직접 조절.
- 모든 원소에 골고루 규제를 적용해 0에 가깝도록 만듬.
Lasso : L1을 규제. ( 손실함수 + L1 Norm) 이 최소가 되도록 함.
- L1Norm값 앞에 alpha 값을 부여해 조절하여 사용. " "
- 가중치의 모든 원소에 똑같은 힘으로 규제하기 때문에 특정 계수는 0이 될 수 있다.
( ➜ 특성 선택이 이루어짐)
alpha: alpha값이 너무 작으면 ➜ 과대적합(복잡도가 너무 큼)
alpha값이 너무 크면 ➜ 과소적합( 복잡도가 너무 작음)
✔ L1 규제 : 벡터의 모든 성분의 절대값을 더한 것
✔ L1 규제 : 도착점까지의 직선거리 유클리드 계산법으로 계산.
from sklearn.linear_model import Lasso,Ridge
# 하이퍼파라미터(alpha) 튜닝
def ridge_alpha(alpha):
# ridge 모델 생성
ridge = Ridge(alpha=alpha) # alpha 기본값: 1.0 -무한대(마이너스 무한대) ~ 무한대
# 일반적으로 사용하는 값의 범위: 0.001 ~ 1000
# 학습
ridge.fit(X_train, y_train)
# 결과 확인 - 훈련용 데이터와 검증용 데이터
print('train_score: ', ridge.score(X_train,y_train))
print('test_score: ', ridge.score(x_test, y_test))
# alpha 값을 증가시키겠다➜ 규제를 늘리겠다. = > 모델이 복잡해지는 것을 막겠다.( 과대적합일 때 사용)
ridge_alpha(1)
# alpha 값을 감소 => 규제를 줄이겠다 = 모델이 단순해지는 것을 막겠다.( 과소적합일 때 사용)
ridge_alpha(0.1)
○ 규제를 줄이니까 ( alpha 값 감소) test_score 상승
○ 과대 적합보다는 과속적합 or 일반화에 가까운 상황
○ 모든 가중치(w)에 특정한 %(비율)만큼의 규제를 가함 ➜ 0에 가깝게는 되지만 0이 되지 않음.
○ 규제를 많이 가하더라도 전체 가중치를 사용
○ 전체 데이터가 골고루 중요할 때 사용하는 주제.
Lasso 활용
import numpy as np
def lasso_alpha(alpha):
# lasso 모델 생성
lasso = Lasso(alpha=alpha) # alpha 기본값: 1.0 -무한대(마이너스 무한대) ~ 무한대
# 일반적으로 사용하는 값의 범위: 0.001 ~ 1000
# 학습
lasso.fit(X_train, y_train)
# 결과 확인 - 훈련용 데이터와 검증용 데이터
print('train_score: ',lasso.score(X_train,y_train))
print('test_score: ', lasso.score(x_test, y_test))
# 사용한 특성의 수 확인
print('사용한 특성의 수: ', np.sum(lasso.coef_ !=0))
lasso_alpha(0.001)
lasso_alpha(0.1)
lasso_alpha(0.01)
○ 현재 전체 특성의 수: 104
○ 규제항을 변경할 때 마다 사용되는 특성의 수도 확인
○ 규제(증가)를 적용할 수록 test score값이 낮아짐.
○ 규제를 적용할 수록 사용하는 특성의 수도 감소.
○ 모든 w에 특정 값만큼의 규제를 가함(상수)
○ 가중치가 0이 되서 사용하지 않는 특성이 생김 ➜ 특성 선택에 활용됨.
➜ 가중치가 -(마이너스, 음수)가 되면 0으로 처리함.
○ 특정 데이터가 중요할 때 사용.
데이터 스케일링
: 데이터전처리 마지막에 사용( 결측치가 없는 상태에서 사용! 이상치는 있어도 됨! )
< 종류>
- StandardScaler
- 변수의 평균, 분산을 이용해 정규분포 형태로 변환(평균0, 분산1)
- MinMaxScaler
- 변수의 최대값 1로, 최소값을 0으로 하여 변환(0~1 사이 값으로 변환)
- 데이터가 비정규분포인 경우에 사용
- 이상치(outlier)에 크게 영향 -> 이상치가 있는 경우 사용 못함.
- RobustScaler
- 사분위 수를 활용 - 변수의 25%지점을 0으로 75%지점을 1로 하여 변환
- 이상치가 있는 경우 사용
- Normalizer
- 특성 벡터의 유클리디안 길이가 1이 되도록 조정(지름이 1인 원에 투영)
- 특성 벡터의 길이는 상관없고 데이터의 방향(각도)만 중요할 때 사용.
from sklearn.preprocessing import StandardScaler
standard = StandardScaler()
x.head() # 문제(x)가 가지고 있는 범위 확인
standard.fit(x)
# 문제(x)의 기준으로 변환
x_trans = standard.transform(x)
x_trans # 변환된 스케일링을 적용하여 훈련과 평가데이터 다시 분리하기.
'Python' 카테고리의 다른 글
[Machine Learning] 정리 part.1 (0) | 2023.09.13 |
---|---|
[ Machine learning ] ex10 선형분류(Logistic Regression) 손글씨 숫자 데이터 분류 실습 (0) | 2023.09.13 |
[Machine Learning ] ex09_보스턴 집값 예측 실습 (0) | 2023.09.07 |
[Machine Learning] 회귀, 선형 회귀 모델 (0) | 2023.09.07 |
[Machine Learning] 하이퍼 파라미터 튜닝(유방암 분류 실습) (1) | 2023.09.06 |