Menu
CoddyTech

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:

Akurasi pelatihan dan validasi pohon berdasarkan kedalaman: akurasi pelatihan meningkat hingga mendekati 1.0, akurasi validasi mencapai puncak pada kedalaman 3 lalu menurun. Garis putus-putus menandai kedalaman yang dipilih, bintang merah menandai satu skor pengujiannya, 0.82

Perangkapnya: 15 tanaman basil, disiram dengan cara berbeda, lalu tiga kurva dicocokkan dengan hasil panennya:

Hasil panen daun dari 15 tanaman pelatihan sebagai titik abu-abu dan 5 tanaman pengujian sebagai kotak hitam, dibandingkan dengan jumlah air harian. Garis biru lurus tidak mengikuti tonjolan, kurva hijau berderajat 3 mengikutinya, kurva merah berderajat 12 berayun liar di antara titik-titik

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 173

Tanda overfitting: error pelatihan kecil, error pengujian besar.

challenge icon

Tantangan

Sedang

Sebuah ladang angin memodelkan daya satu turbin berdasarkan kecepatan angin. Kode awal membagi 24 pembacaan dan membaca max_degree.

  1. Untuk setiap derajat dari 1 hingga max_degree, cocokkan kurva pada baris data pelatihan; cetak RMSE pelatihan dan pengujian dalam kW bilangan bulat.
  2. Cetak derajat pertama yang galat pengujiannya lebih dari dua kali galat pelatihannya, atau No overfitting up to degree dan max_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 7

Coba 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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Terawasi

Latihan sendiri: Compiler Python online