Open danbi5228 opened 2 years ago
라쏘 회귀는 덜 중요한 특성의 가중치를 완전히 제거하려고 함 (즉 가중치가 0이 됨)
즉, 자동으로 특성 선택이 되고 희소 모델을 만들게 됨 (0이 아닌 특성의 가중치가 적음)
노란색 점선은 비용 함수에 대한 배치 경사 하강법의 경로
라쏘(l1 패널티)의 경우 θ1 = 0에 먼저 도달하고 전역최솟값 θ2 = 0에 도달할 때까지 좁은 경로 따라 이동
LASSO 클래스를 이용한 예제
from sklearn.linear_model import Lasso
lasso_reg = Lasso(alpha = 0.1) lasso_reg.fit(X,y) lasso_reg.predict([[1.5]])
from sklearn.base import clone
poly_scaler = Pipeline([ ("poly_features", PolynomialFeatures(degree=90, inclue_bias=False)), ("std_scaler", StandardScaler()) ]) X_train_poly_scaled = poly_scaler.fit_transform(X_train) X_val_poly_scaled = poly_scaler.transform(X_val)
sgd_reg = SGDRegressor(max_iter=1, tol=-np.infty, warm_start=True, penalty=None, learning_rate="constant", eta0=0.0005)
minimum_val_error = float("inf") best_epoch = None best_model = None for epoch in range(1000): sgd_reg.fit(X_train_poly_scaled, y_train) # 훈련을 이어서 진행 y_val_predict = sgd_reg.predict(X_val_poly_scaled) val_error = mean_squared_error(y_val, y_val_predict) if val_error < minimum_val_error: minimum_val_error = val_error best_epoch = epoch best_model = clone(sgd_reg)
엘라스틱넷 elastic net: 릿지회귀와 라쏘 회귀를 절충한 모델
구제항은 릿지와 회귀의 규제항을 단순히 더해서 사용하고, 혼합 정도는 혼합비율 r을 사용해 조절
엘라스틱넷 비용함수:
r=0: 릿지회귀와 동일 / r=1이면 라쏘회귀와 동일
선형회귀(규제가 없는 모델), 릿지, 라쏘, 엘라스틱넷을 사용하는 경우
사이킷런 ElasticNet 예제
from sklearn.linear_model import ElasticNet
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)
elastic_net.fit(X, y)
elastic_net.predict([[1.5]]) # array([1.54333232])