정규화
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 34번째.
과적합된 선형 모델은 잡음이 있는 모든 행에 맞추기 위해 큰 가중치에 의존합니다. Ridge 회귀는 큰 가중치에 페널티를 부과하며, alpha가 그 페널티의 크기를 설정합니다.
중고 기타 20대와 가격을 예측하는 스케일링된 특성 6개가 있습니다:
가중치가 [-83. 116. 104. 27. 17. 15.]인 LinearRegression에서 한 번만 교체하면 됩니다:
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=100)
ridge.fit(X_train, y_train)
print(np.round(ridge.coef_))다음과 같이 출력됩니다:
[-14. 18. 16. 10. 5. 8.]알파가 클수록 가중치는 작아지고 과적합은 줄어듭니다. 알파가 너무 크면 모델이 과소적합됩니다.
챌린지
중급휴가용 숙소 사이트는 16개의 코티지만 사용해 8개의 특성으로 1박당 코티지 가격을 예측합니다. 프로그램은 alpha를 읽고, 시작 코드는 데이터를 분할하고 스케일링합니다.
LinearRegression과 해당alpha를 사용하는Ridge를 각각 학습시킵니다.- 각 모델의 전체 가중치 크기를 출력합니다. 가중치의 절댓값을 모두 더한 뒤 반올림한 값입니다.
- 각 모델의 테스트 R 제곱값(소수점 이하 3자리)과 더 나은 모델을 아래와 같이 출력합니다.
다른 지역에서 5를 사용하면:
Total weight size: plain 90, ridge 53
Test R squared: plain -0.471, ridge 0.642
Better on new cottages: ridge직접 해보기
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import r2_score
alpha = float(input())
# 아래 줄은 변경하지 마세요: 휴가용 별장 28채, 특성 8개, 유로 단위의 1박 요금
cottages = pd.read_csv("cottages.csv")
features = ["size_m2", "bedrooms", "lake_m", "age_years", "town_km", "sauna", "road_noise_db", "forest_m"]
X = cottages[features]
y = cottages["price"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러