Ulasan: Scikit-learning bersinar untuk pembelajaran mesin yang lebih sederhana

Scikits adalah kotak alat saintifik berasaskan Python yang dibina di sekitar SciPy, perpustakaan Python untuk pengkomputeran saintifik. Scikit-learn adalah projek sumber terbuka yang difokuskan pada pembelajaran mesin: klasifikasi, regresi, pengelompokan, pengurangan dimensi, pemilihan model, dan praprosesan. Ini adalah projek yang cukup konservatif yang cukup berhati-hati untuk mengelakkan jangkauan skop dan melompat pada algoritma yang belum terbukti, kerana alasan pemeliharaan dan sumber pemaju yang terhad. Sebaliknya, ia mempunyai pilihan algoritma padat yang cukup bagus, dan ia menggunakan Cython (penyusun Python-to-C) untuk fungsi yang perlu cepat, seperti gelung dalam.

Antara kawasan Scikit-belajar tidak tidak meliputi adalah pembelajaran mendalam, pengukuhan pembelajaran, model grafik, dan urutan ramalan. Ia didefinisikan sebagai masuk dan untuk Python, jadi ia tidak mempunyai API untuk bahasa lain. Scikit-learn tidak menyokong PyPy, penyesuaian pelaksanaan Python yang tepat pada masanya kerana pergantungannya NumPy dan SciPy tidak menyokong sepenuhnya PyPy.

Scikit-learn tidak menyokong percepatan GPU kerana pelbagai sebab yang berkaitan dengan kerumitan dan ketergantungan mesin yang akan diperkenalkannya. Sekali lagi, selain rangkaian neural, Scikit-learning tidak memerlukan percepatan GPU.

Ciri-ciri belajar sedikit

Seperti yang saya sebutkan, Scikit-learn memiliki pilihan algoritma yang baik untuk klasifikasi, regresi, pengelompokan, pengurangan dimensi, pemilihan model, dan praprosesan. Di kawasan klasifikasi, iaitu mengenai mengenal pasti kategori yang menjadi objek, dan disebut pembelajaran diawasi, ia menerapkan mesin vektor sokongan (SVM), tetangga terdekat, regresi logistik, hutan rawak, pohon keputusan, dan sebagainya, hingga rangkaian neural perceptron bertingkat (MLP).

Namun, pelaksanaan MLP Scikit-learn secara jelas tidak dimaksudkan untuk aplikasi berskala besar. Untuk pelaksanaan berasaskan GPU berskala besar dan untuk pembelajaran mendalam, lihat banyak projek berkaitan Scikit-learning, yang merangkumi kerangka rangkaian neural dalam yang mesra Python seperti Keras dan Theano.

Untuk regresi, iaitu tentang meramalkan atribut bernilai berterusan yang berkaitan dengan objek (seperti harga saham), Scikit-learn mempunyai regresi vektor sokongan (SVR), regresi rabung, Lasso, Elastic Net, regresi sudut paling sedikit (LARS ), Regresi Bayesian, pelbagai jenis regresi yang kuat, dan sebagainya. Itu sebenarnya pilihan algoritma regresi yang lebih besar daripada yang mungkin diinginkan oleh kebanyakan penganalisis, tetapi ada kes penggunaan yang baik untuk setiap yang disertakan.

Untuk pengelompokan, teknik pembelajaran tanpa pengawasan di mana objek serupa secara automatik dikelompokkan ke dalam set, Scikit-learning mempunyai k-berarti, pengelompokan spektrum, pergeseran rata-rata, pengelompokan hierarki, DBSCAN, dan beberapa algoritma lain. Sekali lagi, gameplay algoritma konservatif telah dimasukkan.

Pengurangan dimensi adalah mengenai penurunan bilangan pemboleh ubah rawak yang perlu dipertimbangkan, menggunakan teknik penguraian seperti analisis komponen utama (PCA) dan pemfaktoran matriks bukan negatif (NMF), atau teknik pemilihan ciri. Pemilihan model adalah mengenai membandingkan, mengesahkan, dan memilih parameter dan model, dan ia menggunakan algoritma seperti carian grid, validasi silang, dan fungsi metrik. Untuk kedua-dua bidang, Scikit-learning merangkumi semua algoritma dan kaedah yang terbukti dengan baik, dalam API yang mudah diakses.

Pra-proses, yang melibatkan pengekstrakan dan penormalan ciri, adalah salah satu bahagian pertama dan paling penting dalam proses pembelajaran mesin. Normalisasi mengubah ciri menjadi pemboleh ubah baru, selalunya dengan min sifar dan varians unit, tetapi kadang-kadang terletak di antara nilai minimum dan maksimum yang diberikan, sering 0 dan 1. Pengekstrakan ciri mengubah teks atau gambar menjadi angka yang dapat digunakan untuk pembelajaran mesin. Di sini sekali lagi, Scikit-learn menyajikan semua hidangan klasik lazat yang anda harapkan di smorgasbord ini. Anda bebas mengumpulkan mana yang menarik bagi anda.

Perhatikan bahawa pengekstrakan ciri sangat berbeza dengan pemilihan ciri , yang disebutkan sebelumnya di bawah pengurangan dimensi. Pemilihan ciri adalah cara meningkatkan pembelajaran dengan membuang ciri-ciri yang tidak berubah, kovarian, atau yang tidak penting secara statistik.

Ringkasnya, Scikit-learn merangkumi sekumpulan algoritma dan kaedah lengkap untuk pengurangan dimensi, pemilihan model, pengekstrakan fitur, dan normalisasi, walaupun tidak memiliki alur kerja terpandu untuk menyelesaikannya selain daripada koleksi contoh dan dokumentasi yang baik.

Memasang dan menjalankan Scikit-belajar

Pemasangan Scikit-learning mungkin merupakan pemasangan kerangka pembelajaran mesin termudah saya. Oleh kerana saya sudah memasang semua prasyarat dan cukup terkini (Python, Numpy, dan Scipy), diperlukan satu arahan:

 $ sudo pip install -U scikit-learn

OK, saya memerlukan dua arahan, kerana pertama kali saya terlupa sudo.

Itu membuat saya Scikit-belajar 0.18.1. Untuk langkah yang baik, saya juga memeriksa repositori GitHub, memasang rangka ujian hidung, dan membina versi pengembangan Scikit-learn from source, yang semudah menukar ke akar repositori dan menaip make. Perlu sedikit masa untuk menyusun Python, menjana dan menyusun semua fail C, menghubungkan pemasangan, dan menjalankan semua ujian, tetapi tidak memerlukan campur tangan.

Menjalankan contoh Scikit-learning pertama saya juga sangat mudah. Dari halaman contoh umum, saya mengklik contoh untuk merancang ramalan yang disahkan silang, membaca buku nota, memuat turun kod sumber Python dan buku nota Jupyter, dan menjalankannya. Sumber Python bergerak selama beberapa saat, menghasilkan beberapa mesej amaran, dan memunculkan grafik. Notebook Jupyter pada dasarnya melakukan perkara yang sama ketika saya menjalankannya secara interaktif, seperti yang anda lihat dalam gambar di bawah.

Scikit-learn memperoleh markah tertinggi untuk kemudahan pengembangan di antara semua kerangka pembelajaran mesin yang saya uji, kebanyakannya kerana algoritma berfungsi seperti yang diiklankan dan didokumentasikan, API konsisten dan dirancang dengan baik, dan terdapat beberapa "ketidakcocokan impedansi" antara struktur data. Senang bekerjasama dengan perpustakaan di mana ciri-ciri telah diselesaikan secara menyeluruh dan pepijat dibuang.

Belajar Scikit-belajar

Dokumentasi Scikit-learning bagus, dan contohnya banyak - kira-kira 200 keseluruhan. Sebilangan besar contoh merangkumi sekurang-kurangnya satu graf yang dihasilkan dari data yang dianalisis menggunakan Matplotlib. Semua ini menyumbang kepada kemudahan pengembangan dan kemudahan pembelajaran perpustakaan.

Terdapat satu tutorial panjang, "Tutorial pembelajaran statistik untuk pemprosesan data saintifik," yang mempunyai lima bahagian dan lampiran mengenai mencari bantuan. Tutorialnya cukup bagus, baik untuk merangkumi konsep asas dan menunjukkan contoh menggunakan data, kod, dan grafik sebenar. Ini juga memanggil contoh-contoh yang berkaitan dengan teks - misalnya, perbandingan empat pengklasifikasi SVM yang berbeza ditunjukkan pada gambar di bawah.

Contoh-contoh yang saya jalankan semuanya cukup jelas di laman web mereka. Dalam banyak kes, ketika saya memuat turun dan menjalankan contohnya, mereka akan memberikan amaran yang tidak ditunjukkan di laman web, tetapi akan selalu menghasilkan hasil yang sama. Gambar pertama di atas, menunjukkan output notebook Jupyter saya untuk merancang ramalan silang yang disahkan, adalah contoh yang baik.

Saya mengaitkan sebahagian besar peringatan dengan kecacatan dalam kerangka dan evolusi Apple vecLib di perpustakaan Python. Sebilangannya kelihatan sebagai peringatan dalam Python 2.7.10 yang tidak ada dalam versi apa pun yang digunakan untuk laman web. Gambar di bawah mempunyai amaran seperti itu; laman web yang sesuai tidak.

Sebagai perpustakaan Python untuk pembelajaran mesin, dengan skop yang sengaja terhad, Scikit-learning sangat bagus. Ini mempunyai pelbagai algoritma yang mapan, dengan grafik bersepadu. Pemasangan, pembelajaran, dan penggunaannya agak mudah, dan ia mempunyai contoh dan tutorial yang baik.

Sebaliknya, Scikit-learning tidak merangkumi pembelajaran mendalam atau pembelajaran pengukuhan, yang meninggalkan masalah sukar tetapi penting semasa, seperti klasifikasi gambar yang tepat dan penghuraian dan terjemahan bahasa masa nyata yang boleh dipercayai. Selain itu, tidak termasuk model grafik atau ramalan urutan, ia tidak boleh digunakan dari bahasa selain Python, dan tidak menyokong PyPy atau GPU.

Pada cengkaman yang mencengkam, prestasi Scikit-learn yang dicapai untuk pembelajaran mesin selain daripada rangkaian neural cukup bagus, walaupun tanpa pecutan PyPy atau GPU. Python sering kali lebih rapi daripada yang dijangkakan orang daripada jurubahasa, dan penggunaan Cython untuk menghasilkan kod C untuk gelung dalam menghilangkan sebahagian besar masalah di Scikit-learn.

Jelas, jika anda berminat untuk belajar dalam, anda mesti mencari di tempat lain. Walaupun begitu, terdapat banyak masalah - mulai dari membangun fungsi ramalan yang menghubungkan pemerhatian yang berlainan hingga mengklasifikasikan pemerhatian hingga mempelajari struktur dalam set data yang tidak berlabel - yang memungkinkan pembelajaran pembelajaran mesin lama tanpa memerlukan puluhan lapisan neuron, dan untuk kawasan -pelajar sangat bagus.

Sekiranya anda peminat Python, Scikit-learn mungkin merupakan pilihan terbaik di antara perpustakaan pembelajaran mesin biasa. Sekiranya anda lebih suka Scala, maka Spark ML mungkin merupakan pilihan yang lebih baik. Dan jika anda suka merancang saluran pembelajaran anda dengan melukis gambar rajah dan menulis coretan Python atau R sekali-sekala, maka Microsoft Cortana Analytics Suite - khususnya Azure Machine Learning Studio - mungkin sesuai dengan pilihan anda.

---

Kos: Sumber terbuka percuma. Platform: Memerlukan Python, NumPy, SciPy, dan Matplotlib. Keluaran tersedia untuk MacOS, Linux, dan Windows.

Kad Markah Model dan algoritma (25%) Kemudahan pembangunan (25%) Dokumentasi (20%) Prestasi (20%) Kemudahan penggunaan (10%) Skor Keseluruhan (100%)
Scikit-belajar 0.18.1 9 9 9 8 9 8.8