Supervised Learning ด้วย scikit-learn
George Boorman
Core Curriculum Manager, DataCamp
ทบทวน: Linear regression ลดค่า loss function
เลือกค่าสัมประสิทธิ์ $a$ สำหรับแต่ละฟีเจอร์ รวมถึง $b$
ค่าสัมประสิทธิ์ที่มากเกินไปอาจทำให้เกิด overfitting
Regularization: ลงโทษค่าสัมประสิทธิ์ที่มากเกินไป
Loss function = OLS loss function + $$ \alpha * \sum_{i=1}^{n} {a_i}^2$$
Ridge ลงโทษค่าสัมประสิทธิ์ที่มากทั้งบวกและลบ
$\alpha$: พารามิเตอร์ที่ต้องเลือก
การเลือก $\alpha$ คล้ายกับการเลือก k ใน KNN
Hyperparameter: ตัวแปรที่ใช้ปรับพารามิเตอร์ของโมเดล
$\alpha$ ควบคุมความซับซ้อนของโมเดล
$\alpha$ = 0 = OLS (อาจเกิด overfitting)
$\alpha$ สูงมาก: อาจเกิด underfitting
from sklearn.linear_model import Ridgescores = [] 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]
from sklearn.linear_model import Lassoscores = [] 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]
Lasso ช่วยคัดเลือกฟีเจอร์สำคัญของชุดข้อมูลได้
ลดค่าสัมประสิทธิ์ของฟีเจอร์ที่ไม่สำคัญให้เป็นศูนย์
ฟีเจอร์ที่ไม่ถูกลดเป็นศูนย์จะถูก lasso เลือกไว้
from sklearn.linear_model import LassoX = diabetes_df.drop("glucose", axis=1).values y = diabetes_df["glucose"].values names = diabetes_df.drop("glucose", axis=1).columnslasso = Lasso(alpha=0.1)lasso_coef = lasso.fit(X, y).coef_plt.bar(names, lasso_coef) plt.xticks(rotation=45) plt.show()

Supervised Learning ด้วย scikit-learn