Hồi quy có chuẩn hóa

Học có giám sát với scikit-learn

George Boorman

Core Curriculum Manager, DataCamp

Vì sao cần chuẩn hóa?

  • Nhắc lại: Hồi quy tuyến tính tối thiểu hóa hàm mất mát

  • Nó chọn hệ số a cho mỗi biến đặc trưng, cộng b

  • Hệ số lớn có thể gây overfitting

  • Chuẩn hóa: Phạt các hệ số lớn

Học có giám sát với scikit-learn

Hồi quy ridge

  • Hàm mất mát = OLS + $$ \alpha * \sum_{i=1}^{n} {a_i}^2$$

  • Ridge phạt hệ số dương hoặc âm lớn

  • $\alpha$: tham số cần lựa chọn

  • Chọn $\alpha$ giống chọn k trong KNN

  • Siêu tham số: biến dùng để tối ưu tham số mô hình

  • $\alpha$ điều khiển độ phức tạp mô hình

    • $\alpha$ = 0 = OLS (dễ overfit)

    • $\alpha$ rất lớn: dễ underfit

Học có giám sát với scikit-learn

Hồi quy ridge trong scikit-learn

from sklearn.linear_model import Ridge

scores = [] for alpha in [0.1, 1.0, 10.0, 100.0, 1000.0]:
ridge = Ridge(alpha=alpha)
ridge.fit(X_train, y_train) y_pred = ridge.predict(X_test)
scores.append(ridge.score(X_test, y_test))
print(scores)
[0.2828466623222221, 0.28320633574804777, 0.2853000732200006, 
 0.26423984812668133, 0.19292424694100963]
Học có giám sát với scikit-learn

Hồi quy lasso

  • Hàm mất mát = OLS + $$ \alpha * \sum_{i=1}^{n} |a_i|$$
Học có giám sát với scikit-learn

Hồi quy lasso trong scikit-learn

from sklearn.linear_model import Lasso

scores = [] for alpha in [0.01, 1.0, 10.0, 20.0, 50.0]: lasso = Lasso(alpha=alpha) lasso.fit(X_train, y_train) lasso_pred = lasso.predict(X_test) scores.append(lasso.score(X_test, y_test)) print(scores)
[0.99991649071123, 0.99961700284223, 0.93882227671069, 0.74855318676232, -0.05741034640016]
Học có giám sát với scikit-learn

Hồi quy lasso để chọn đặc trưng

  • Lasso có thể chọn các đặc trưng quan trọng

  • Co các hệ số của đặc trưng kém quan trọng về 0

  • Đặc trưng không bị co về 0 sẽ được lasso chọn

Học có giám sát với scikit-learn

Lasso để chọn đặc trưng trong scikit-learn

from sklearn.linear_model import Lasso

X = diabetes_df.drop("glucose", axis=1).values y = diabetes_df["glucose"].values names = diabetes_df.drop("glucose", axis=1).columns
lasso = Lasso(alpha=0.1)
lasso_coef = lasso.fit(X, y).coef_
plt.bar(names, lasso_coef) plt.xticks(rotation=45) plt.show()
Học có giám sát với scikit-learn

Lasso để chọn đặc trưng trong scikit-learn

biểu đồ cột hệ số cho từng đặc trưng; hầu hết quanh 0, riêng diabetes khoảng 25

Học có giám sát với scikit-learn

Ayo berlatih!

Học có giám sát với scikit-learn

Preparing Video For Download...