Saya tidak tahu bagaimana sklearn.pipeline.Pipeline
tepatnya bekerja.
Ada sedikit penjelasan di dok . Misalnya apa yang mereka maksud dengan:
Pipa transformasi dengan penduga akhir.
Untuk memperjelas pertanyaan saya, apa itu steps
? Bagaimana mereka bekerja?
Sunting
Berkat jawabannya, saya dapat membuat pertanyaan saya lebih jelas:
Ketika saya memanggil pipeline and pass, sebagai langkah, dua transformator dan satu estimator, misalnya:
pipln = Pipeline([("trsfm1",transformer_1),
("trsfm2",transformer_2),
("estmtr",estimator)])
Apa yang terjadi jika saya menyebut ini?
pipln.fit()
OR
pipln.fit_transform()
Saya tidak tahu bagaimana estimator bisa menjadi trafo dan bagaimana trafo bisa dipasang.
python
machine-learning
scikit-learn
neuraxle
farhawa
sumber
sumber
Jawaban:
Transformer dalam scikit-learn - beberapa kelas yang memiliki metode fit and transform, atau metode fit_transform.
Predictor - beberapa kelas yang memiliki metode fit and predict, atau metode fit_predict.
Pipeline hanyalah gagasan abstrak, ini bukan algoritme ml yang ada. Seringkali dalam tugas ML Anda perlu melakukan urutan transformasi yang berbeda (menemukan sekumpulan fitur, menghasilkan fitur baru, memilih hanya beberapa fitur bagus) dari set data mentah sebelum menerapkan penaksir akhir.
Berikut adalah contoh penggunaan Pipeline yang bagus. Pipeline memberi Anda satu antarmuka untuk semua 3 langkah transformasi dan estimator yang dihasilkan. Ini merangkum transformer dan prediktor di dalamnya, dan sekarang Anda dapat melakukan sesuatu seperti:
Dengan hanya:
Dengan pipeline Anda dapat dengan mudah melakukan pencarian grid atas sekumpulan parameter untuk setiap langkah meta-estimator ini. Seperti yang dijelaskan pada tautan di atas. Semua langkah kecuali yang terakhir harus diubah, langkah terakhir dapat berupa transformator atau prediktor. Jawaban untuk mengedit : Ketika Anda menelepon
pipln.fit()
- setiap trafo di dalam pipa akan dipasang pada output dari trafo sebelumnya (Trafo pertama dipelajari pada dataset mentah). Estimator terakhir dapat berupa trafo atau prediktor, Anda dapat memanggil fit_transform () pada pipeline hanya jika estimator terakhir Anda adalah trafo (yang mengimplementasikan fit_transform, atau mengubah dan menyesuaikan metode secara terpisah), Anda dapat memanggil fit_predict () atau predict () pada pipeline hanya jika penaksir terakhir Anda adalah penaksir. Jadi Anda tidak bisa memanggil fit_transform atau transform on pipeline, langkah terakhirnya adalah predictor.sumber
predicted = pipeline.fit(Xtrain).predict(Xtrain)
?Saya pikir M0rkHaV memiliki ide yang tepat. Scikit-belajar ini kelas pipa adalah alat yang berguna untuk encapsulating beberapa transformer yang berbeda bersama estimator menjadi satu objek, sehingga Anda hanya perlu memanggil metode penting Anda sekali (
fit()
,predict()
, dll). Mari kita uraikan dua komponen utama:Transformer adalah kelas yang mengimplementasikan
fit()
dantransform()
. Anda mungkin akrab dengan beberapa alat praproses sklearn, sepertiTfidfVectorizer
danBinarizer
. Jika Anda melihat dokumen untuk alat praproses ini, Anda akan melihat bahwa mereka menerapkan kedua metode ini. Yang menurut saya cukup keren adalah bahwa beberapa penduga juga dapat digunakan sebagai langkah transformasi, misalnyaLinearSVC
!Estimator adalah kelas yang mengimplementasikan
fit()
danpredict()
. Anda akan menemukan bahwa banyak pengklasifikasi dan model regresi menerapkan kedua metode ini, dan dengan demikian Anda dapat dengan mudah menguji banyak model yang berbeda. Dimungkinkan untuk menggunakan transformator lain sebagai penduga akhir (yaitu, tidak harus diimplementasikanpredict()
, tetapi pasti mengimplementasikanfit()
). Artinya, Anda tidak dapat meneleponpredict()
.Untuk hasil edit Anda: mari kita lihat contoh berbasis teks. Menggunakan LabelBinarizer, kami ingin mengubah daftar label menjadi daftar nilai biner.
Sekarang, ketika binarizer dipasang pada beberapa data, ia akan memiliki struktur yang disebut
classes_
yang berisi kelas-kelas unik yang 'diketahui' oleh transformator. Tanpa memanggilfit()
binarizer tidak tahu seperti apa datanya, jadi memanggiltransform()
tidak akan masuk akal. Ini benar jika Anda mencetak daftar kelas sebelum mencoba menyesuaikan data.Saya mendapatkan kesalahan berikut saat mencoba ini:
Tetapi jika Anda memasang binarizer di file
vec
daftar:dan coba lagi
Saya mendapatkan yang berikut:
Dan sekarang, setelah memanggil transform pada
vec
objek, kita mendapatkan yang berikut:Adapun estimator yang digunakan sebagai transformer, mari kita gunakan
DecisionTree
classifier sebagai contoh ekstraktor fitur. Decision Trees bagus untuk banyak alasan, tetapi untuk tujuan kita, yang penting adalah mereka memiliki kemampuan untuk menentukan peringkat fitur yang menurut pohon berguna untuk memprediksi. Saat Anda memanggiltransform()
Pohon Keputusan, ia akan mengambil data masukan Anda dan menemukan fitur apa yang menurutnya paling penting. Jadi Anda bisa membayangkannya mengubah matriks data Anda (n baris kali m kolom) menjadi matriks yang lebih kecil (n baris kali k kolom), di mana k kolom adalah k fitur terpenting yang ditemukan Decision Tree.sumber
fit()
dantransform()
is the Transformers? , bagaimana penduga dapat digunakan sebagai transformator?fit()
adalah metode yang Anda panggil untuk menyesuaikan atau 'melatih' transformator Anda, seperti yang Anda lakukan pada model pengklasifikasi atau regresi. Adapuntransform()
, itu adalah metode yang Anda panggil untuk benar-benar mengubah data masukan menjadi data keluaran. Misalnya, meneleponBinarizer.transform([8,2,2])
(setelah pemasangan!) Dapat mengakibatkan[[1,0],[0,1],[0,1]]
. Adapun menggunakan estimator sebagai transformator, saya akan mengedit contoh singkat menjadi jawaban saya.Apa itu pipeline ML dan bagaimana cara kerjanya?
Pipeline adalah serangkaian langkah di mana data diubah. Itu berasal dari pola desain "pipa dan filter" lama (misalnya, Anda dapat memikirkan perintah unix bash dengan pipa "|" atau mengarahkan operator ">"). Namun, pipeline adalah objek dalam kode. Jadi, Anda mungkin memiliki kelas untuk setiap filter (alias setiap langkah pipeline), lalu kelas lain untuk menggabungkan langkah-langkah tersebut ke pipeline akhir. Beberapa pipeline mungkin menggabungkan pipeline lain secara seri atau paralel, memiliki banyak input atau output, dan seterusnya. Kami ingin melihat pipeline Machine Learning sebagai:
Metode Pipeline Scikit-Learn
Pipelines (atau anak tangga dalam pipeline) harus memiliki dua metode berikut :
Juga dimungkinkan untuk memanggil metode ini untuk merangkai keduanya:
Masalah kelas sklearn.pipeline.Pipeline
Scikit-Learn dirilis pertama kali pada tahun 2007, yang merupakan era pra pembelajaran mendalam . Namun, ini adalah salah satu pustaka pembelajaran mesin yang paling dikenal dan diadopsi, dan masih terus berkembang. Di atas semua itu, ia menggunakan pola desain Pipa dan Filter sebagai gaya arsitektur perangkat lunak - itulah yang membuat Scikit-Learn begitu menakjubkan, ditambah fakta ia menyediakan algoritme yang siap digunakan. Namun, ada masalah besar dalam hal melakukan hal berikut, yang seharusnya sudah bisa kita lakukan pada tahun 2020:
Solusi yang Kami Temukan untuk Masalah Scikit-Learn Itu
Yang pasti, Scikit-Learn sangat nyaman dan dibuat dengan baik. Namun, perlu penyegaran. Berikut adalah solusi kami dengan Neuraxle untuk membuat Scikit-Learn segar dan dapat digunakan dalam proyek komputasi modern!
Metode pipeline tambahan dan fitur yang ditawarkan melalui Neuraxle
Catatan: jika suatu langkah pipeline tidak perlu memiliki salah satu metode fit atau transform, langkah tersebut dapat mewarisi dari NonFittableMixin atau NonTransformableMixin untuk diberikan implementasi default dari salah satu metode tersebut untuk tidak melakukan apa pun.
Sebagai permulaan, ada kemungkinan pipeline atau langkahnya juga secara opsional menentukan metode tersebut :
Metode berikut disediakan secara default untuk memungkinkan pengelolaan hyperparameter:
RandInt(1, 3)
yang berarti 1 hingga 3 lapisan. Anda bisa menelepon.rvs()
dikt ini untuk mengambil nilai secara acak dan mengirimkannya ke "set_hyperparams" untuk mencoba melatihnya.Untuk info lebih lanjut tentang solusi yang kami sarankan, baca entri dalam daftar besar dengan tautan di atas.
sumber