머신러닝 12일차

ParkJinYoung·2022년 11월 2일
0

모델 정규화

L1규제 : Lasso
-w의 모든원소에 똑같은 힘으로 규제, 특정계수들은 0이 됨, 특성선택이 자동으로 이루어진다.
-사용되는 특성과 사용되지않는 특성이 나뉨 => 특성선택있음

L2규제 : Ridge
-w의 모든 원소에 골고루 규제를 적용하여 0에 가깝게 만든다
-모든 w에 똑같은 퍼센트의 규제를 가함
-모든특성 사용 => 특성선택없음

모델의 선택

스케일러

## 규제항을 사용한 모델들을 사용

# L1 규제 Lasso : 일정 수치만큼 규제
# L2 규제 Ridge : 일정 퍼센트만큼 규제
from sklearn.linear_model import Ridge, Lasso

lasso = Lasso(alpha=1.0 # 얼만큼 규제를 가할건지 정해주는 매개변수
                        # alpha 값이 크면 규제많음
                        # 작으면 규제적음
             )
lasso.fit(X_train,y_train)

print(lasso.score(X_train,y_train))
print(lasso.score(X_test,y_test))

lasso.coef_ !=0

import numpy as np

print("사용한 특성의 수 : ",np.sum(lasso.coef_ !=0))

# False = 0
# True = 1
False+True

def lasso_alpha(alpha1):
    lasso = Lasso(alpha=alpha1)
    lasso.fit(X_train,y_train)
    print(lasso.score(X_train,y_train))
    print(lasso.score(X_test,y_test))
    print("사용한 특성의 수 : ",np.sum(lasso.coef_ !=0))

# 규제를 매우 낮추게 되면 모든 특성을 사용
# 규제를 높히게 되면 사용 한 특성의 갯수가 줄어들게됨
# 규제가 낮을때 결과가 가장좋다 => 대다수의 특성이 유용한 특성
# 0.4 정도의 규제가 최적의 규제인것으로 판단
# 0.4 미만 > 과대적함
# 0.4 초과 > 과소적합
lasso_alpha(1)

# esc => F누르고 Find and Replace
def ridge_alpha(alpha1):
    ridge = Ridge(alpha=alpha1)
    ridge.fit(X_train,y_train)
    print(ridge.score(X_train,y_train))
    print(ridge.score(X_test,y_test))


# 규제를 늘릴수록 score가 감소
# 규제를 거의 가하지않았을때 점수가 가장높다 => Linear Regression만으로도 잘 동작함
# 
ridge_alpha(0.01)

# 일반적으로 Ridge가 잘 동작
# 소수의 데이터가 매우 중요한 경우는 별로 없기 때문
# 소수의 데이터가 매우 중요하다 => Lasso

# LinearRegression
# SGDRegression
# Lasso
# Ridge

# standard 스케일러 사용하기
from sklearn.preprocessing import StandardScaler,MinMaxScaler,RobustScaler,Normalizer

sd_scaler = StandardScaler()
sd_scaler.fit(X_train) # 특성마다 재조정할 값의 범위
X_train_scale = sd_scaler.transform(X_train)
X_test_scale = sd_scaler.transform(X_test)

lasso.fit(X_train_scale,y_train)
print(lasso.score(X_train_scale,y_train))
print(lasso.score(X_test_scale,y_test))
profile
꾸준히

0개의 댓글