Underfitting dan Overfitting
Termasuk bagian Pembelajaran Terawasi dalam perjalanan Machine Learning di Coddy. Pelajaran 32 dari 58.
Kamu telah menemui jebakan terbesar dalam machine learning: k = 1 dan pohon yang dalam menghafal data. Bab ini menyebut jebakan itu dan diakhiri dengan grafik seperti ini:
Perangkapnya: 15 tanaman basil, disiram dengan cara berbeda, lalu tiga kurva dicocokkan dengan hasil panennya:
Derajat 1 terlalu sederhana: underfitting. Derajat 12 melewati setiap titik data pelatihan dan berayun di antaranya: overfitting, menghafal, bukan belajar.
np.polyval(coefs, x) memberikan ketinggian kurva. RMSE pelatihan dan pengujian, dalam gram:
for degree in [1, 3, 12]:
coefs = np.polyfit(water_train, grams_train, degree)
train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
print(degree, round(train_err), round(test_err))Hasilnya:
1 156 138
3 15 19
12 9 173Tanda overfitting: error pelatihan kecil, error pengujian besar.
Tantangan
SedangSebuah ladang angin memodelkan daya satu turbin berdasarkan kecepatan angin. Kode awal membagi 24 pembacaan dan membaca max_degree.
- Untuk setiap derajat dari 1 hingga
max_degree, cocokkan kurva pada baris data pelatihan; cetak RMSE pelatihan dan pengujian dalam kW bilangan bulat. - Cetak derajat pertama yang galat pengujiannya lebih dari dua kali galat pelatihannya, atau
No overfitting up to degreedanmax_degree.
Untuk turbin lain dan 7:
Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7Coba sendiri
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
max_degree = int(input())
# Jangan ubah baris di bawah ini: kecepatan angin (m/s) dan daya (kW) dari satu turbin angin
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
speed, power, test_size=0.25, random_state=0)
# Tulis kodemu di bawah ini
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pembelajaran Terawasi
1Model Pertamamu
Belajar dari ContohData Latih dan Data UjiMelatih dan MemprediksiMenilai ModelRangkuman: Penyortir Benih4Regresi Logistik
Prediksi Ya atau TidakAmbang KeputusanBobot sebagai BuktiBeberapa KelasRangkuman: Filter Spam7Overfitting
Underfitting dan OverfittingKurva PembelajaranRegularisasiSet ValidasiRingkasan: Menyetel Pohon2Tetangga Terdekat
Cara k-NN MenentukanMemilih kBatas KeputusanPenskalaan untuk TetanggaRingkasan: Tetangga Wine5Mengukur Model Klasifikasi
Matriks KonfusiPresisi dan RecallSkor F1Kelas Tidak SeimbangKurva ROCRangkuman: Tes SkriningLatihan sendiri: Compiler Python online