Bagaimana cara menyimpan classifier Naive Bayes yang terlatih ke disk dan menggunakannya untuk memprediksi data?
Saya memiliki program sampel berikut dari situs scikit-learn:
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print "Number of mislabeled points : %d" % (iris.target != y_pred).sum()
Anda juga dapat menggunakan joblib.dump dan joblib.load yang jauh lebih efisien dalam menangani array numerik daripada python pickler default.
Joblib termasuk dalam scikit-learn:
Sunting: dengan Python 3.8+ sekarang dimungkinkan untuk menggunakan acar untuk pengawetan objek yang efisien dengan array numerik yang besar sebagai atribut jika Anda menggunakan protokol acar 5 (yang bukan default).
sumber
fit
metode jika ini yang Anda cari. Yang sedang berkata,joblib.load
seharusnya tidak menimbulkan pengecualian setelah berhasiljoblib.dump
jika Anda memanggilnya dari Python dengan versi yang sama dari perpustakaan scikit-learn.--pylab
bendera baris perintah atau%pylab
sihir karena overload namespace implisit diketahui dapat memecah proses pengawetan. Gunakan impor eksplisit dan%matplotlib inline
sihir sebagai gantinya.Apa yang Anda cari disebut Model kegigihan dalam kata-kata sklearn dan didokumentasikan dalam pengantar dan di bagian kegigihan model .
Jadi Anda telah menginisialisasi classifier Anda dan melatihnya untuk waktu yang lama bersama
Setelah ini, Anda memiliki dua opsi:
1) Menggunakan Acar
2) Menggunakan Joblib
Sekali lagi, sangat membantu untuk membaca tautan yang disebutkan di atas
sumber
Dalam banyak kasus, terutama dengan klasifikasi teks, tidak cukup hanya menyimpan classifier tetapi Anda juga harus menyimpan vectorizer sehingga Anda dapat membuat vektor input Anda di masa depan.
kasus penggunaan di masa depan:
Sebelum membuang vektorizer, seseorang dapat menghapus properti stop_words_ vektorizer dengan:
untuk membuat pembuangan lebih efisien. Juga jika parameter classifier Anda jarang (seperti pada kebanyakan contoh klasifikasi teks) Anda dapat mengkonversi parameter dari padat menjadi jarang yang akan membuat perbedaan besar dalam hal konsumsi memori, memuat dan membuang. Sebar model dengan:
Yang secara otomatis akan bekerja untuk SGDClassifier tetapi jika Anda tahu model Anda jarang (banyak nol di clf.coef_) maka Anda dapat secara manual mengkonversi clf.coef_ menjadi matriks jarang csr scipy sparse dengan:
dan kemudian Anda dapat menyimpannya dengan lebih efisien.
sumber
sklearn
estimator menerapkan metode untuk memudahkan Anda menyimpan properti terlatih yang relevan dari estimator. Beberapa estimator mengimplementasikan__getstate__
metode sendiri, tetapi yang lain, sepertiGMM
hanya menggunakan implementasi basis yang hanya menyimpan objek kamus batin:Metode yang disarankan untuk menyimpan model Anda ke disk adalah dengan menggunakan
pickle
modul:Namun, Anda harus menyimpan data tambahan sehingga Anda dapat melatih kembali model Anda di masa depan, atau menderita konsekuensi yang mengerikan (seperti dikunci ke dalam versi lama sklearn) .
Dari dokumentasi :
Hal ini terutama berlaku untuk penaksir Ensemble yang bergantung pada
tree.pyx
modul yang ditulis dalam Cython (sepertiIsolationForest
), karena ia membuat sambungan ke implementasi, yang tidak dijamin stabil di antara versi sklearn. Telah melihat perubahan yang tidak kompatibel di masa lalu.Jika model Anda menjadi sangat besar dan memuat menjadi gangguan, Anda juga dapat menggunakan yang lebih efisien
joblib
. Dari dokumentasi:sumber
but can only pickle to the disk and not to a string
Tapi Anda bisa memilih ini ke dalam StringIO dari joblib. Inilah yang saya lakukan sepanjang waktu.The training data, e.g. a reference to a immutable snapshot
sini? TIA!sklearn.externals.joblib
telah ditinggalkan sejak0.21
dan akan dihapus div0.23
:Karena itu, Anda perlu menginstal
joblib
:dan akhirnya menulis model ke disk:
Sekarang untuk membaca file yang dibuang, yang perlu Anda jalankan adalah:
sumber