Ulasan: Scikit-learn sangat bagus untuk pembelajaran mesin yang lebih sederhana

Scikits adalah kotak alat ilmiah berbasis Python yang dibangun di sekitar SciPy, pustaka Python untuk komputasi ilmiah. Scikit-learn adalah proyek open source yang berfokus pada pembelajaran mesin: klasifikasi, regresi, pengelompokan, pengurangan dimensi, pemilihan model, dan preprocessing. Ini adalah proyek yang cukup konservatif yang cukup berhati-hati dalam menghindari creep lingkup dan melompat pada algoritme yang tidak terbukti, karena alasan pemeliharaan dan sumber daya pengembang yang terbatas. Di sisi lain, ia memiliki pilihan algoritme solid yang cukup bagus, dan menggunakan Cython (kompiler Python-to-C) untuk fungsi yang harus cepat, seperti loop dalam.

Di antara daerah Scikit-belajar tidak tidak menutupi yang belajar dalam, pembelajaran penguatan, model grafis, dan urutan prediksi. Ini didefinisikan sebagai dalam dan untuk Python, jadi tidak memiliki API untuk bahasa lain. Scikit-learn tidak mendukung PyPy, implementasi Python kompilasi just-in-time yang cepat karena dependensinya NumPy dan SciPy tidak sepenuhnya mendukung PyPy.

Scikit-learn tidak mendukung akselerasi GPU karena berbagai alasan yang berkaitan dengan kompleksitas dan dependensi mesin yang akan diperkenalkannya. Kemudian lagi, selain dari jaringan neural, Scikit-learn memiliki sedikit kebutuhan untuk akselerasi GPU.

Fitur Scikit-learn

Seperti yang saya sebutkan, Scikit-learn memiliki pilihan algoritma yang baik untuk klasifikasi, regresi, pengelompokan, pengurangan dimensi, pemilihan model, dan pemrosesan awal. Pada area klasifikasi, yaitu tentang mengidentifikasi kategori suatu objek, dan disebut supervised learning, ini mengimplementasikan support vector machine (SVM), tetangga terdekat, regresi logistik, random forest, decision tree, dan sebagainya, hingga jaringan saraf multilevel perceptron (MLP).

Namun, implementasi MLP Scikit-learn secara tegas tidak ditujukan untuk aplikasi skala besar. Untuk skala besar, implementasi berbasis GPU dan untuk pembelajaran mendalam, lihat banyak proyek terkait Scikit-learn, yang mencakup kerangka kerja jaringan neural dalam yang ramah Python seperti Keras dan Theano.

Untuk regresi, yaitu tentang memprediksi atribut bernilai kontinu yang terkait dengan suatu objek (seperti harga saham), Scikit-learn memiliki dukungan regresi vektor (SVR), regresi ridge, Lasso, Elastic Net, regresi sudut terkecil (LARS). ), Regresi bayesian, berbagai macam regresi robust, dan sebagainya. Itu sebenarnya adalah pilihan algoritme regresi yang lebih besar daripada yang diinginkan sebagian besar analis, tetapi ada kasus penggunaan yang baik untuk setiap algoritme yang telah disertakan.

Untuk pengelompokan, teknik pembelajaran tanpa pengawasan di mana objek yang serupa secara otomatis dikelompokkan ke dalam set, Scikit-learn memiliki k-means, pengelompokan spektral, pengelompokan rata-rata, pengelompokan hierarki, DBSCAN, dan beberapa algoritme lainnya. Sekali lagi, keseluruhan algoritma konservatif telah dimasukkan.

Pengurangan dimensi adalah tentang mengurangi jumlah variabel acak yang perlu dipertimbangkan, menggunakan teknik dekomposisi seperti analisis komponen utama (PCA) dan faktorisasi matriks non-negatif (NMF), atau teknik pemilihan fitur. Pemilihan model adalah tentang membandingkan, memvalidasi, dan memilih parameter dan model, dan menggunakan algoritme seperti penelusuran kisi, validasi silang, dan fungsi metrik. Untuk kedua area, Scikit-learn menyertakan semua algoritme dan metode yang terbukti dengan baik, dalam API yang mudah diakses.

Pemrosesan awal, yang melibatkan ekstraksi fitur dan normalisasi, adalah salah satu bagian pertama dan terpenting dari proses pembelajaran mesin. Normalisasi mengubah fitur menjadi variabel baru, sering kali dengan mean nol dan varian unit, tetapi terkadang berada di antara nilai minimum dan maksimum tertentu, sering kali 0 dan 1. Ekstraksi fitur mengubah teks atau gambar menjadi angka yang dapat digunakan untuk machine learning. Di sini sekali lagi, Scikit-learn menyajikan semua hidangan klasik lezat yang Anda harapkan di hamparan ini. Anda bebas mengumpulkan mana saja yang menarik bagi Anda.

Perhatikan bahwa ekstraksi fitur sangat berbeda dari pemilihan fitur , yang disebutkan sebelumnya di bawah pengurangan dimensi. Pemilihan fitur adalah cara untuk meningkatkan pembelajaran dengan menghilangkan fitur yang tidak berubah, kovarian, atau fitur yang secara statistik tidak penting.

Singkatnya, Scikit-learn menyertakan sekumpulan lengkap algoritme dan metode untuk pengurangan dimensi, pemilihan model, ekstraksi fitur, dan normalisasi, meskipun tidak memiliki alur kerja terpandu apa pun untuk menyelesaikannya selain kumpulan contoh yang baik dan dokumentasi yang baik.

Menginstal dan menjalankan Scikit-learn

Instalasi Scikit-learn saya mungkin merupakan instalasi framework pembelajaran mesin termudah saya. Karena saya sudah menginstal semua prasyarat dan cukup mutakhir (Python, Numpy, dan Scipy), diperlukan satu perintah:

 $ sudo pip install -U scikit-learn

OK, saya butuh dua perintah, karena pertama kali saya lupa sudo.

Itu membuat saya Scikit-learn 0.18.1. Untuk ukuran yang baik, saya juga memeriksa repositori GitHub, menginstal framework pengujian hidung, dan membangun versi pengembangan Scikit-learn dari sumber, yang sesederhana mengubah ke root repositori dan mengetik make. Butuh beberapa saat untuk mengkompilasi Python, menghasilkan dan mengkompilasi semua file C, menghubungkan assembly, dan menjalankan semua tes, tetapi tidak memerlukan intervensi apa pun.

Menjalankan contoh Scikit-learn pertama saya juga sangat mudah. Dari halaman contoh umum, saya mengklik contoh untuk merencanakan prediksi yang divalidasi silang, membaca buku catatan, mendownload kode sumber Python dan notebook Jupyter, dan menjalankannya. Sumber Python bekerja selama beberapa detik, menghasilkan beberapa pesan peringatan, dan memunculkan grafik. Notebook Jupyter pada dasarnya melakukan hal yang sama ketika saya menjalankannya secara interaktif, seperti yang Anda lihat pada gambar di bawah.

Scikit-learn mendapatkan nilai tertinggi untuk kemudahan pengembangan di antara semua framework pembelajaran mesin yang telah saya uji, sebagian besar karena algoritme berfungsi seperti yang diiklankan dan didokumentasikan, API-nya konsisten dan dirancang dengan baik, dan ada beberapa "ketidakcocokan impedansi" antara struktur data. Sangat menyenangkan bekerja dengan perpustakaan di mana fitur-fiturnya telah disempurnakan secara menyeluruh dan bug benar-benar dibersihkan.

Belajar Scikit-learn

Dokumentasi Scikit-learn bagus, dan contohnya banyak - total sekitar 200. Sebagian besar contoh menyertakan setidaknya satu grafik yang dihasilkan dari data yang dianalisis menggunakan Matplotlib. Ini semua berkontribusi pada kemudahan pengembangan perpustakaan dan kemudahan belajarnya.

Ada satu tutorial panjang, "Tutorial tentang pembelajaran statistik untuk pemrosesan data ilmiah," yang memiliki lima bagian dan lampiran tentang mencari bantuan. Tutorialnya cukup bagus, baik mencakup konsep dasar maupun menampilkan contoh menggunakan data, kode, dan grafik aktual. Ini juga memanggil contoh yang terkait dengan teks - misalnya, perbandingan empat pengklasifikasi SVM berbeda yang ditunjukkan pada gambar di bawah ini.

Contoh yang saya kerjakan semuanya cukup jelas di halaman web mereka. Dalam banyak kasus, ketika saya mendownload dan menjalankan contoh, mereka akan menampilkan peringatan yang tidak ditampilkan di halaman web, tetapi akan selalu memberikan hasil yang sama. Gambar pertama di atas, menunjukkan keluaran notebook Jupyter saya untuk merencanakan prediksi yang divalidasi silang, adalah contoh yang bagus.

Saya mengaitkan sebagian besar peringatan dengan cacat dalam kerangka vecLib Apple dan evolusi di pustaka Python. Beberapa tampaknya peringatan di Python 2.7.10 yang tidak ada dalam versi apa pun yang digunakan untuk halaman web. Gambar di bawah ini memiliki peringatan seperti itu; halaman web terkait tidak.

Sebagai pustaka Python untuk pembelajaran mesin, dengan ruang lingkup yang sengaja dibatasi, Scikit-learn sangat bagus. Ini memiliki berbagai macam algoritme mapan, dengan grafik terintegrasi. Ini relatif mudah untuk diinstal, dipelajari, dan digunakan, dan memiliki contoh dan tutorial yang bagus.

Di sisi lain, Scikit-learn tidak mencakup pembelajaran mendalam atau pembelajaran penguatan, yang mengabaikan masalah yang sulit namun penting saat ini, seperti klasifikasi gambar yang akurat serta penguraian dan terjemahan bahasa real-time yang andal. Selain itu, ini tidak menyertakan model grafis atau prediksi urutan, tidak dapat benar-benar digunakan dari bahasa selain Python, dan tidak mendukung PyPy atau GPU.

Di sisi lain, kinerja yang dicapai Scikit-learn untuk pembelajaran mesin selain jaringan neural cukup bagus, bahkan tanpa akselerasi PyPy atau GPU. Python sering kali lebih zippier daripada yang diharapkan orang dari penerjemah, dan penggunaan Cython untuk menghasilkan kode C untuk loop dalam menghilangkan sebagian besar kemacetan di Scikit-learn.

Jelas, jika Anda tertarik dengan pembelajaran mendalam, Anda harus mencari di tempat lain. Namun demikian, ada banyak masalah - mulai dari membangun fungsi prediksi yang menghubungkan observasi yang berbeda hingga mengklasifikasikan observasi hingga mempelajari struktur dalam kumpulan data tak berlabel - yang memungkinkan pembelajaran mesin lama tanpa memerlukan lusinan lapisan neuron, dan untuk area tersebut Scikit -pelajaran sangat bagus.

Jika Anda seorang penggemar Python, Scikit-learn mungkin merupakan pilihan terbaik di antara pustaka pembelajaran mesin biasa. Jika Anda lebih suka Scala, maka Spark ML mungkin pilihan yang lebih baik. Dan jika Anda suka mendesain pipeline pembelajaran Anda dengan menggambar diagram dan sesekali menulis potongan Python atau R, Microsoft Cortana Analytics Suite - khususnya Azure Machine Learning Studio - mungkin cocok dengan preferensi Anda.

---

Biaya: Sumber terbuka gratis. Platform: Membutuhkan Python, NumPy, SciPy, dan Matplotlib. Rilis tersedia untuk MacOS, Linux, dan Windows.

Kartu catatan angka Model dan algoritma (25%) Kemudahan pengembangan (25%) Dokumentasi (20%) Kinerja (20%) Kemudahan penerapan (10%) Skor Keseluruhan (100%)
Scikit-learn 0.18.1 9 9 9 8 9 8.8