Saya mencoba menyelesaikan tugas regresi. Saya menemukan bahwa 3 model bekerja dengan baik untuk subset data yang berbeda: LassoLARS, SVR dan Gradient Tree Boosting. Saya perhatikan bahwa ketika saya membuat prediksi menggunakan ketiga model ini dan kemudian membuat tabel 'output nyata' dan output dari 3 model saya, saya melihat bahwa setiap kali setidaknya salah satu model benar-benar dekat dengan output yang sebenarnya, meskipun 2 lainnya bisa relatif jauh.
Ketika saya menghitung kesalahan seminimal mungkin (jika saya mengambil prediksi dari prediktor 'terbaik' untuk setiap contoh pengujian) saya mendapatkan kesalahan yang jauh lebih kecil daripada kesalahan dari model mana pun saja. Jadi saya berpikir untuk mencoba menggabungkan prediksi dari 3 model berbeda ini menjadi semacam ansambel. Pertanyaannya adalah, bagaimana cara melakukannya dengan benar? Ketiga model saya dibuat dan disetel menggunakan scikit-learn, apakah ia menyediakan semacam metode yang dapat digunakan untuk mengemas model ke dalam ansambel? Masalahnya di sini adalah bahwa saya tidak ingin hanya prediksi rata-rata dari ketiga model, saya ingin melakukan ini dengan pembobotan, di mana pembobotan harus ditentukan berdasarkan sifat-sifat contoh tertentu.
Bahkan jika scikit-belajar tidak menyediakan fungsionalitas seperti itu, akan lebih baik jika seseorang tahu bagaimana properti menangani tugas ini - mencari tahu bobot masing-masing model untuk setiap contoh dalam data. Saya pikir itu mungkin dilakukan oleh regressor terpisah yang dibangun di atas semua 3 model ini, yang akan mencoba menghasilkan bobot optimal untuk masing-masing dari 3 model, tetapi saya tidak yakin apakah ini adalah cara terbaik untuk melakukan ini.
sumber
model.named_steps['lin_regr'].coef_
) akan memberi Anda wawasan tentang seberapa banyak masing-masing model dalam sebuah ensemble berkontribusi pada solusi akhir.X, y = make_regression(n_features=10, n_targets=1)
itu memberikan kesalahan dimensi. adakah yang bisa menjelaskan apa yang harus dilakukan?Ok, setelah menghabiskan beberapa waktu di googling saya menemukan bagaimana saya bisa melakukan pembobotan dengan python bahkan dengan scikit-belajar. Pertimbangkan di bawah ini:
Saya melatih satu set model regresi saya (seperti yang disebutkan SVR, LassoLars dan GradientBoostingRegressor). Kemudian saya menjalankan semuanya pada data pelatihan (data yang sama yang digunakan untuk pelatihan masing-masing dari 3 regresi ini). Saya mendapatkan prediksi untuk contoh dengan masing-masing algoritme saya dan menyimpan 3 hasil ini ke dalam bingkai data panda dengan kolom 'predictSVR', 'predictLASSO' dan 'predictGBGB'. Dan saya menambahkan kolom terakhir ke dalam data data ini yang saya sebut 'diprediksi' yang merupakan nilai prediksi nyata.
Lalu saya hanya melatih regresi linier pada kerangka data baru ini:
Jadi ketika saya ingin membuat prediksi untuk contoh baru, saya hanya menjalankan masing-masing dari 3 regresi saya secara terpisah dan kemudian saya lakukan:
pada output dari 3 regressor saya. Dan dapatkan hasilnya.
Masalahnya di sini adalah bahwa saya menemukan bobot optimal untuk rata-rata regressor, bobotnya akan sama untuk setiap contoh yang akan saya coba prediksi.
Jika ada yang punya ide tentang bagaimana melakukan penumpukan (pembobotan) menggunakan fitur contoh saat ini akan lebih baik untuk mendengarnya.
sumber
LinearRegression()
bukanLogisticRegression()
model yang?Jika data Anda memiliki himpunan bagian yang jelas, Anda bisa menjalankan algoritma pengelompokan seperti k-means dan kemudian mengaitkan setiap classifier dengan cluster yang berkinerja baik. Ketika titik data baru tiba, maka tentukan cluster apa itu dan jalankan classifier terkait.
Anda juga bisa menggunakan jarak terbalik dari centroid untuk mendapatkan satu set bobot untuk setiap classifier dan memprediksi menggunakan kombinasi linear dari semua classifier.
sumber
Saya mencapai jenis pembobotan dengan melakukan hal berikut, setelah semua model Anda sepenuhnya terlatih dan berkinerja baik:
Anda dapat menyetel lebih lanjut ansambel Anda dengan mengukur persentase yang benar dalam beberapa waktu. Setelah Anda memiliki skor data baru yang sangat besar, Anda dapat merencanakan ambang pada langkah-langkah 0,1, misalnya, terhadap persen yang benar jika menggunakan ambang tersebut untuk mencetak skor, untuk mendapatkan gambaran tentang ambang yang akan memberi Anda, katakanlah, 95% benar untuk kelas 1, dan seterusnya. Anda dapat terus memperbarui set tes dan skor f1 saat data baru masuk dan melacak drift, membangun kembali model ketika ambang atau akurasi jatuh.
sumber