Membandingkan Model secara Adil
Termasuk bagian Pembelajaran Terawasi dalam perjalanan Machine Learning di Coddy. Pelajaran 38 dari 58.
Membandingkan model dengan satu pembagian seperti melempar koin: salah satunya mungkin mendapat set pengujian yang menguntungkan. Berikan lima fold yang sama kepada setiap model. Untuk 150 uang kertas, asli atau palsu:
k-NN dan logistic imbang dalam rentang fluktuasinya, dan k-NN lebih stabil. Model pohon tertinggal.
Pembagi KFold mengacak baris satu kali dan memberikan lipatan yang sama kepada setiap model:
from sklearn.model_selection import KFold
folds = KFold(n_splits=5, shuffle=True, random_state=0)
for model in [knn, logistic, tree]:
scores = cross_val_score(model, X, y, cv=folds)
print(f"{scores.mean():.3f} {scores.std():.3f}")Ini mencetak angka-angka pada bagan:
0.867 0.042
0.873 0.074
0.807 0.077Pilih rata-rata tertinggi; jika rata-ratanya berdekatan, pilih simpangan baku yang lebih kecil.
Tantangan
SedangSitus memasak memprediksi pengunjung mana yang memasak resep yang mereka buka. Kode awal memberi skor pada tiga model dengan satu pemisahan, dan tree menang. Uji dengan adil; program membaca jumlah fold.
- Buat
KFolddengan jumlah pemisahan tersebut,shuffle=Truedanrandom_state=0. - Lakukan validasi silang pada setiap model dengan fold tersebut; cetak mean dan std-nya dengan 3 angka desimal.
- Cetak model dengan mean tertinggi.
Untuk pengunjung lain dan 5:
One split picks: k-NN
k-NN: mean 0.833, std 0.045
logistic: mean 0.860, std 0.044
tree: mean 0.787, std 0.029
Cross-validation picks: logisticCoba sendiri
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
n_folds = int(input())
# Jangan ubah baris di bawah ini: 300 pengunjung, 6 kebiasaan menjelajah; label 1 berarti mereka memasak resepnya
X, y = make_classification(n_samples=300, n_features=6, n_informative=4, n_redundant=0,
flip_y=0.06, class_sep=0.8, random_state=0)
names = ["k-NN", "logistic", "tree"]
models = [KNeighborsClassifier(), LogisticRegression(max_iter=1000),
DecisionTreeClassifier(max_depth=4, random_state=0)]
# Satu pembagian menentukan pemenangnya
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
single = []
for model in models:
model.fit(X_train, y_train)
single.append(model.score(X_test, y_test))
print(f"One split picks: {names[np.argmax(single)]}")
# 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 Spam2Tetangga Terdekat
Cara k-NN MenentukanMemilih kBatas KeputusanPenskalaan untuk TetanggaRingkasan: Tetangga Wine5Mengukur Model Klasifikasi
Matriks KonfusiPresisi dan RecallSkor F1Kelas Tidak SeimbangKurva ROCRangkuman: Tes Skrining8Validasi Silang
Validasi K-FoldMembandingkan Model secara AdilPencarian GridRekap: Perbaikan SkateboardLatihan sendiri: Compiler Python online