<회귀> 라쏘 모델 (Lasso)
Data Analyticsㅤ/ㅤMachine Learningㅤ

<회귀> 라쏘 모델 (Lasso)

라쏘(Lasso) 모델

- L1 규제를 활용한 선형 회귀 모델이다

- $Error=MSE+\alpha |w|$

 

Steps

학습

from sklearn.linear_model import Lasso

# 알파값이 커질 수록 큰 규제
alphas = [100, 10, 1, 0.1, 0.01, 0.001, 0.0001]

# 알파별로 학습시키기
for alpha in alphas:
    lasso = Lasso(alpha=alpha)
    lasso.fit(x_train, y_train)
    pred = lasso.predict(x_test)
    # mse_eval 함수는 자체적으로 만듦
    mse_eval('Lasso(alpha={})'.format(alpha), pred, y_test)

- 라쏘에서는 규제를 거의 안줄 때가 가장 좋고(0.001), 릿지에서는 0.1정도가 좋았다

 

coefficients 시각화

def plot_coef(columns, coef):
    coef_df = pd.DataFrame(list(zip(columns, coef)))
    coef_df.columns=['feature', 'coef']
    coef_df = coef_df.sort_values('coef', ascending=False).reset_index(drop=True)
    
    fig, ax = plt.subplots(figsize=(9, 7))
    ax.barh(np.arange(len(coef_df)), coef_df['coef'])
    idx = np.arange(len(coef_df))
    ax.set_yticks(idx)
    ax.set_yticklabels(coef_df['feature'])
    fig.tight_layout()
    plt.show()

 

- alpha가 100일 때

lasso_100 = Lasso(alpha=100)
lasso_100.fit(x_train, y_train)
lasso_pred_100 = lasso_100.predict(x_test)

plot_coef(x_train.columns, lasso_100.coef_)
lasso_100.coef_

$\quad\rightarrow$ 거의 모든 피처가 모델 학습에 영향을 끼치지 않음. 따라서 퍼포먼스가 떨어지는 것

 

- alpha가 0.001일 때

lasso_001 = Lasso(alpha=0.001)
lasso_001.fit(x_train, y_train)
lasso_pred_001 = lasso_001.predict(x_test)

plot_coef(x_train.columns, lasso_001.coef_)
lasso_001.coef_

$\quad\rightarrow$ 알파값 100 보다 훨씬 좋아졌다

 

- 학습 데이터셋이 적을수록, 한계가 많을수록 강한 규제를 주는게 좋다. 가지고 있는 데이터셋에 과하게 적합할수록 예측력이 떨어지는 위험이 더 크기 때문이다