Menu
CoddyTech

정규화

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 34번째.

과적합된 선형 모델은 잡음이 있는 모든 행에 맞추기 위해 큰 가중치에 의존합니다. Ridge 회귀는 큰 가중치에 페널티를 부과하며, alpha가 그 페널티의 크기를 설정합니다.

중고 기타 20대와 가격을 예측하는 스케일링된 특성 6개가 있습니다:

기타 특성별 가중치 하나씩을 나타내는 6개의 선과 0.01부터 1000까지의 알파. 상태는 116에서, 브랜드는 104에서, 연식은 마이너스 83에서 시작하며, 알파가 커질수록 모두 0에 가까워집니다

가중치가 [-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.]

알파가 클수록 가중치는 작아지고 과적합은 줄어듭니다. 알파가 너무 크면 모델이 과소적합됩니다.

challenge icon

챌린지

중급

휴가용 숙소 사이트는 16개의 코티지만 사용해 8개의 특성으로 1박당 코티지 가격을 예측합니다. 프로그램은 alpha를 읽고, 시작 코드는 데이터를 분할하고 스케일링합니다.

  1. LinearRegression과 해당 alpha를 사용하는 Ridge를 각각 학습시킵니다.
  2. 각 모델의 전체 가중치 크기를 출력합니다. 가중치의 절댓값을 모두 더한 뒤 반올림한 값입니다.
  3. 각 모델의 테스트 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)

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러