Machine Learning › Deep learning เบื้องต้น
ชุดฝึกท้าย module: Deep learning เบื้องต้น
โจทย์คละหัวข้อทั้ง module โดยไม่บอกว่าต้องใช้เทคนิคไหน ให้เลือกวิธีเองเหมือนตอนทำงานจริง
neuron หนึ่งตัวมีน้ำหนัก w = [0.4, −0.6], bias b = 0.2 และรับ x = [2.0, 1.0]: คำนวณ z, ผลผ่าน ReLU และผลผ่าน sigmoid (ปัด 4 ตำแหน่ง) เก็บไว้ในตัวแปร z, relu_out, sigmoid_out
จำนวนพารามิเตอร์ (น้ำหนัก + bias) ของ MLP ที่มี input 21 → hidden 32 → output 1 (n_params_32) และ 21 → 16 → 8 → 1 (n_params_16_8) เก็บไว้ในตัวแปรตามชื่อ
MLPClassifier(hidden_layer_sizes=(8,), max_iter=200, random_state=42) บน Z_train: accuracy บนชุดทดสอบ ปัด 4 ตำแหน่ง เก็บไว้ในตัวแปร test_acc
โมเดล ŷ = w·x + b ที่ w = 1, b = 0 บนข้อมูลตัวอย่าง (x, y ที่ให้ไว้): MSE loss เก็บไว้ในตัวแปร mse
gradient ของ MSE ที่ w = 1, b = 0 (ข้อมูลเดิม): grad_w = 2·mean((ŷ − y)·x), grad_b = 2·mean(ŷ − y) เก็บไว้ในตัวแปร grad_w, grad_b
เริ่มที่ w = b = 0 ทำ gradient descent 10 ก้าวด้วย lr = 0.05 (ข้อมูล x, y ที่ให้ไว้) เก็บ w และ b ที่ได้ (ปัด 4 ตำแหน่ง) ไว้ในตัวแปร w10, b10
ด้วย lr = 0.1 เริ่ม w = b = 0 ต้องใช้กี่ก้าวจึงทำให้ MSE ต่ำกว่า 0.001 เป็นครั้งแรก (นับก้าวที่หนึ่งเป็น 1) เก็บไว้ในตัวแปร steps_needed
MLP (16,) (max_iter=200, random_state=42) ที่ alpha = 3.0: accuracy บน train และ test (ปัด 4 ตำแหน่ง) และจำนวน iteration ที่ใช้ เก็บไว้ในตัวแปร train_acc, test_acc, iters
MLP (4,) (max_iter=200, random_state=42): จำนวนพารามิเตอร์ทั้งหมด และ ROC-AUC บนชุดทดสอบ (ปัด 4 ตำแหน่ง) เก็บไว้ในตัวแปร n_params, mlp_auc
MLP (16,) ที่เปิด early_stopping=True และ n_iter_no_change=5 (max_iter=200, random_state=42): หยุดที่กี่รอบ และ accuracy บนชุดทดสอบ (ปัด 4 ตำแหน่ง) เก็บไว้ในตัวแปร stopped_at, test_acc
fit MLP (8,) (max_iter=200, random_state=42) แล้ว forward pass ด้วยมือสำหรับแถวแรกของชุดทดสอบ (ReLU ที่ hidden, sigmoid ที่ output): เก็บความน่าจะเป็นที่คำนวณเอง (ปัด 4 ตำแหน่ง) ไว้ใน manual_proba และคลาสที่ทำนาย (1 ถ้า proba ≥ 0.5 ไม่งั้น 0, เป็น int) ไว้ใน manual_class
เทรน MLP (16,) (early_stopping=True, max_iter=200) ด้วย random_state = 0..4 แล้ววัด ROC-AUC บนชุดทดสอบของแต่ละ seed: ค่าเฉลี่ยและ std (np.std) ปัด 4 ตำแหน่ง เก็บไว้ในตัวแปร auc_mean, auc_std
MLP (16,) (max_iter=200, random_state=42): loss_curve_ ที่รอบที่ 1, 50, 100 และ 200 (ปัด 4 ตำแหน่ง; รอบที่ k อยู่ที่ index k−1) เก็บไว้ในตัวแปร loss_1, loss_50, loss_100, loss_200
ผลของขนาดข้อมูลเทรน: fit MLP (8,) ที่เปิด early_stopping=True (max_iter=200, random_state=42) บน 500 แถวแรกของ Z_train, 1,000 แถวแรก และทั้งหมด แล้ววัด accuracy บน Z_test (ปัด 4 ตำแหน่ง) เก็บไว้ในตัวแปร acc_500, acc_1000, acc_all
CV 5-fold (StratifiedKFold shuffle=True, random_state=42) บน X, y ทั้งชุด วัด ROC-AUC เฉลี่ยของ pipeline StandardScaler + MLPClassifier((8,), early_stopping=True, max_iter=200, random_state=42) และ StandardScaler + LogisticRegression(max_iter=2000) ปัด 4 ตำแหน่ง เก็บไว้ในตัวแปร mlp_cv_auc, logreg_cv_auc
ด้วยข้อมูล x, y ที่ให้ไว้ ทำ gradient descent 100 ก้าวจาก w = b = 0 ที่ lr = 0.2: เก็บ MSE สุดท้าย (float) ไว้ใน loss_02 และ True/False ว่า MSE < 1e-6 ไว้ใน converged