
Penulis: Andrew D #datascience
Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.
Foto oleh vitamina poleznova di Unsplash
Dalam setiap proyek pembelajaran mesin, kita akan dihadapkan pada kebutuhan untuk memilih model untuk mulai meningkatkan apa dasar awal kita.
Faktanya, jika baseline memberi kita model awal yang berguna untuk memahami apa yang dapat kita harapkan dari solusi yang sangat sederhana, model yang dipilih melalui metodologi tertentu membantu kita bergerak dengan lancar ke fase optimasi proyek.
Dalam posting ini, saya akan membagikan kepada Anda kerangka kerja pribadi saya (dan basis kode) untuk melakukan pemilihan model secara terorganisir dan terstruktur.
Metode
Katakanlah kita memiliki masalah regresi untuk dipecahkan. Mari kita mulai dengan mengimpor perpustakaan yang diperlukan dan mengonfigurasi mekanisme logging
dari sklearn impor linear_model
dari ansambel impor sklearn
dari pohon impor sklearn
dari sklearn impor svm
dari tetangga impor sklearn
dari lightgbm impor LGBMRegressor
dari xgboost impor XGBRegressor
impor logging logging.basicConfig(level=logging.INFO)
Model mental yang saya ikuti adalah sebagai berikut:
kita akan membuat daftar kosong dan mengisinya dengan pasangan (nama_model, model) kita akan menentukan parameter untuk memisahkan data melalui validasi silang Scikit-Learn KFold kita akan membuat perulangan for di mana kita akan memvalidasi silang setiap model dan menyimpan kinerjanya, kita akan melihat kinerja setiap model untuk memilih salah satu yang berkinerja terbaik. Kami menentukan daftar dan menyisipkan model yang ingin kami uji.
Mari kita tentukan daftar dan masukkan model yang ingin kita uji.
model = []
model.append((‘Lasso’, linear_model.Lasso()))
model.append((‘Ridge’, linear_model.Ridge()))
model.append((‘EN’, linear_model.ElasticNet()))
model.append((‘RandomForest’, ensemble.RandomForestRegressor()))
model.append((‘KNR’, tetangga.KNeighborsRegressor()))
model.append((‘DT’, pohon.DecisionTreeRegressor()))
model.append((‘ET’, pohon.ExtraTreeRegressor()))
model.append((‘LGBM’, LGBMRegressor()))
model.append((‘XGB’, XGBRegressor()))
model.append((‘GBM’, ensemble.GradientBoostingRegressor()))
model.append((“SVR”, svm.LinearSVR()))
Untuk setiap model yang termasuk dalam daftar model, kami akan mengevaluasi kinerjanya melalui model_selection.KFold. Cara kerjanya cukup sederhana: dataset pelatihan kami (X_train, y_train) akan dibagi menjadi bagian yang sama (disebut fold), yang akan diuji satu per satu. Oleh karena itu, validasi silang KFold akan memberikan metrik kinerja rata-rata untuk setiap pemisahan daripada metrik tunggal berdasarkan seluruh kumpulan data pelatihan. Teknik ini sangat berguna karena memungkinkan Anda mengukur kinerja model dengan lebih akurat.
Karena ini adalah masalah regresi, kami akan menggunakan metrik mean squared error (MSE).
Mari kita tentukan parameter untuk validasi silang dan inisialisasi perulangan for.
n_folds = 5 # jumlah split
hasil = [] # simpan pertunjukan di daftar ini
nama = [] # daftar ini membantu kami menyimpan nama model untuk visualisasi
# kita memulai loop di mana kita akan menguji setiap model dalam daftar model
untuk nama, model dalam model:
kfold = model_selection.KFold(n_splits=n_folds)
logging.INFO(“Model pengujian:”, nama)
cv_results = model_selection.cross_val_score(
model, # model yang dipilih dari daftar
X_train, # set fitur kereta
y_train, # set kereta target
cv=kfold, # split saat ini
scoring=”neg_mean_squared_error”,
bertele-tele = 0,
n_jobs=-1) results.append(cv_results)
nama.append(nama) msg = “%s: %f (%f)” % (nama, cv_results.mean(), cv_results.std()) logging.INFO(msg+”n”)
Setiap model akan divalidasi silang, diuji, dan kinerjanya disimpan dalam hasil.
Visualisasinya sangat sederhana dan akan dilakukan melalui boxplot.
# Bandingkan model kami dalam plot kotak
gambar = plt.figure(ukuran gambar=(12,7))
fig.suptitle(‘Perbandingan Algoritma’)
kapak = fig.add_subplot(111)
plt.boxplot(hasil)
ax.set_xticklabels(nama)
plt.tampilkan()
Hasil akhir
Hasil akhirnya akan seperti ini:
Hasil akhir dari skrip pemilihan model kami
Dari sini, Anda dapat melihat bagaimana RandomForest dan GradientBoostingMachine adalah model dengan performa terbaik. Kami kemudian dapat mulai membuat eksperimen baru dan menguji lebih lanjut kedua model ini.
Menyatukan Semuanya
Inilah templat salin-tempel untuk pemilihan model, yang akan saya gunakan dengan mudah dalam skrip model_selection.py (saya berbicara tentang bagaimana menyusun proyek pembelajaran mesin di sini)
https://medium.com/media/5d72a992b6d523440d503f791cf65315/href
Kesimpulan
Senang Anda berhasil di sini. Mudah-mudahan, Anda akan menemukan artikel ini bermanfaat dan menerapkan cuplikannya di basis kode Anda.
Jika Anda ingin mendukung aktivitas pembuatan konten saya, silakan ikuti tautan referensi saya di bawah ini dan bergabunglah dengan program keanggotaan Medium. Saya akan menerima sebagian dari investasi Anda, dan Anda akan dapat mengakses sejumlah besar artikel Medium tentang ilmu data dan lebih banyak lagi dengan cara yang mulus.
Bergabunglah dengan Medium dengan tautan rujukan saya – Andrew D #datascience
Semoga hari mu menyenangkan. Tetap baik
Anda Harus Memeriksa Kerangka Kerja Efektif untuk Pemilihan Model ini awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI