해당 글은 코드잇 강의를 참고하여 작성되었습니다.
- 편향과 분산
- 편향이 높은 모델은 너무 간단해서 복잡한 곡선 관계를 학습 할 수 없다. 하지만 편향인 낮다고 해도 무조건 편향이 높은 모델보다 좋은 모델인 것은 아니다. test 데이터에서의 성능이 더 낮게 나타날 수도 있기 때문이다
- 분산 : 데이터 셋 별로 모델이 얼마나 일관된 성능을 보여주는지를 의미한다.
- 즉 편향이 낮다고 해도 분산이 클 수 있다.
- 편향-분산 트레이드오프 : 일반적으로 편향이 높으면 분산이 낮다.
- scikit-learn으로 과적합 문제 직접 보기
- 정규화 : 모델을 학습시킬 때 값들이 너무 커지는 것을 방지한다. (손실함수+정규화 항)
- L1(Lasso), L2(Ridge) 정규화
예시)
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import PolynomialFeatures
from math import sqrt
import numpy as np
import pandas as pd
INSURANCE_FILE_PATH = './datasets/insurance.csv'
insurance_df = pd.read_csv(INSURANCE_FILE_PATH)
insurance_df = pd.get_dummies(data=insurance_df, columns=['sex', 'smoker', 'region'])
# 기존 데이터에서 입력 변수 데이터를 따로 저장한다
X = insurance_df.drop(['charges'], axis=1)
polynomial_transformer = PolynomialFeatures(4) # 4 차항 변형기를 정의한다
polynomial_features = polynomial_transformer.fit_transform(X.values) # 데이터 6차 항 변수로 바꿔준다
features = polynomial_transformer.get_feature_names(X.columns) # 변수 이름들도 바꿔준다
# 새롭게 만든 다항 입력 변수를 dataframe으로 만들어 준다
X = pd.DataFrame(polynomial_features, columns=features)
y = insurance_df[['charges']]
x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=5)
model=Ridge(alpha=0.01, max_iter=2000, normalize=True)
model.fit(x_train, y_train)
y_train_predict=model.predict(x_train)
y_test_predict=model.predict(x_test)
# 체점용 코드
mse = mean_squared_error(y_train, y_train_predict)
print("training set에서 성능")
print("-----------------------")
print(f'오차: {sqrt(mse)}')
mse = mean_squared_error(y_test, y_test_predict)
print("testing set에서 성능")
print("-----------------------")
print(f'오차: {sqrt(mse)}')
**L1 정규화를 하면 절댓값을 사용하여 θ가 0이 되는 경우가 발생하기 때문에 속성을 줄이고 싶을 때 사용한다.
'데이터 > 머신러닝' 카테고리의 다른 글
4.1 결정 트리(Decision Tree) (0) | 2021.07.25 |
---|---|
3.3 모델 평가와 하이퍼파라미터 고르기 (0) | 2021.07.24 |
3.1 데이터 전처리 (0) | 2021.07.23 |
2.4 로지스틱 회귀(Logistic Regression) (0) | 2021.07.22 |
2.3 다항 회귀(Polynomial Regression) (0) | 2021.07.22 |