Memulai dengan Scikit-learn untuk Klasifikasi dalam Pembelajaran Mesin

Memulai dengan Scikit-learn untuk Klasifikasi dalam Pembelajaran Mesin

Node Sumber: 1780638
Memulai dengan Scikit-learn untuk Klasifikasi dalam Pembelajaran Mesin
Gambar oleh Editor
 

Scikit-learn adalah salah satu perpustakaan pembelajaran mesin yang paling umum digunakan yang dibangun dengan python. Popularitasnya dapat dikaitkan dengan struktur kode yang mudah dan konsisten yang ramah bagi pengembang pemula. Selain itu, ada dukungan tingkat tinggi yang tersedia bersama dengan fleksibilitas untuk mengintegrasikan fungsionalitas pihak ketiga yang menjadikan perpustakaan kuat dan cocok untuk produksi. Pustaka berisi beberapa model pembelajaran mesin untuk klasifikasi, regresi, dan pengelompokan. Dalam tutorial ini, kita akan mengeksplorasi masalah klasifikasi multikelas melalui berbagai algoritma. Mari selami dan bangun model scikit-learn kita.

pip install scikit-learn

Kami akan menggunakan dataset "Wine" yang tersedia di modul dataset scikit-learn. Dataset ini terdiri dari 178 sampel dan total 3 kelas. Dataset sudah diproses sebelumnya dan dikonversi menjadi vektor fitur, oleh karena itu, kita dapat langsung menggunakannya untuk melatih model kita.

from sklearn.datasets import load_wine X, y = load_wine(return_X_y=True)

Kami akan menyimpan 67% data untuk pelatihan dan sisanya 33% untuk pengujian.

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42
)

 

Sekarang, kami akan bereksperimen dengan 5 model berbeda dengan kompleksitas berbeda dan mengevaluasi hasilnya pada kumpulan data kami.

model_lr = LogisticRegression()
model_lr.fit(X_train, y_train)
y_pred_lr = model_lr.predict(X_test) print("Accuracy Score: ", accuracy_score(y_pred_lr, y_test))
print(classification_report(y_pred_lr, y_test))

 

Keluaran

Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59
model_knn = KNeighborsClassifier(n_neighbors=1)
model_knn.fit(X_train, y_train)
y_pred_knn = model_knn.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_knn, y_test))
print(classification_report(y_pred_knn, y_test))

 

Keluaran 

Accuracy Score: 0.7796610169491526 precision recall f1-score support 0 0.90 0.78 0.84 23 1 0.75 0.82 0.78 22 2 0.67 0.71 0.69 14 accuracy 0.78 59 macro avg 0.77 0.77 0.77 59
weighted avg 0.79 0.78 0.78 59

 

Setelah mengubah parameter 'n_neighbours=2' kami mengamati penurunan nilai akurasi. Oleh karena itu, ini menunjukkan bahwa datanya cukup sederhana dan mencapai pembelajaran yang lebih baik dengan satu tetangga untuk dipertimbangkan. 

Keluaran 

Accuracy Score: 0.6949152542372882 precision recall f1-score support 0 0.90 0.72 0.80 25 1 0.75 0.69 0.72 26 2 0.33 0.62 0.43 8 accuracy 0.69 59 macro avg 0.66 0.68 0.65 59
weighted avg 0.76 0.69 0.72 59
from sklearn.naive_bayes import GaussianNB model_nb = GaussianNB()
model_nb.fit(X_train, y_train)
y_pred_nb = model_nb.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_nb, y_test))
print(classification_report(y_pred_nb, y_test))

 

Keluaran

Accuracy Score: 1.0 precision recall f1-score support 0 1.00 1.00 1.00 20 1 1.00 1.00 1.00 24 2 1.00 1.00 1.00 15 accuracy 1.00 59 macro avg 1.00 1.00 1.00 59
weighted avg 1.00 1.00 1.00 59
from sklearn.tree import DecisionTreeClassifier model_dtclassifier = DecisionTreeClassifier()
model_dtclassifier.fit(X_train, y_train)
y_pred_dtclassifier = model_dtclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_dtclassifier, y_test))
print(classification_report(y_pred_dtclassifier, y_test))

 

Keluaran

Accuracy Score: 0.9661016949152542 precision recall f1-score support 0 0.95 0.95 0.95 20 1 1.00 0.96 0.98 25 2 0.93 1.00 0.97 14 accuracy 0.97 59 macro avg 0.96 0.97 0.97 59
weighted avg 0.97 0.97 0.97 59
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV def get_best_parameters(): params = { "n_estimators": [10, 50, 100], "max_features": ["auto", "sqrt", "log2"], "max_depth": [5, 10, 20, 50], "min_samples_split": [2, 4, 6], "min_samples_leaf": [2, 4, 6], "bootstrap": [True, False], } model_rfclassifier = RandomForestClassifier(random_state=42) rf_randomsearch = RandomizedSearchCV( estimator=model_rfclassifier, param_distributions=params, n_iter=5, cv=3, verbose=2, random_state=42, ) rf_randomsearch.fit(X_train, y_train) best_parameters = rf_randomsearch.best_params_ print("Best Parameters:", best_parameters) return best_parameters parameters_rfclassifier = get_best_parameters() model_rfclassifier = RandomForestClassifier( **parameters_rfclassifier, random_state=42
) model_rfclassifier.fit(X_train, y_train) y_pred_rfclassifier = model_rfclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_rfclassifier, y_test))
print(classification_report(y_pred_rfclassifier, y_test))

 

Keluaran


Best Parameters: {'n_estimators': 100, 'min_samples_split': 6, 'min_samples_leaf': 4, 'max_features': 'log2', 'max_depth': 5, 'bootstrap': True}
Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59

 

Dalam algoritme ini, kami melakukan beberapa penyetelan hyperparameter untuk mencapai akurasi terbaik. Kami mendefinisikan kisi parameter yang terdiri dari beberapa nilai untuk dipilih dari setiap parameter. Selanjutnya, kami menggunakan algoritma Randomized Search CV untuk mencari ruang parameter terbaik untuk model. Akhirnya kami memberi makan parameter yang diperoleh ke pengklasifikasi dan melatih model. 

Model Ketepatan Pengamatan
Regresi logistik 98.30% Mencapai akurasi yang luar biasa. Model mampu melakukan generalisasi dengan baik pada dataset uji.
K-Tetangga Terdekat 77.96% Algoritma tersebut tidak mampu mempelajari representasi data dengan baik.
Bayes Naif 100% Modelnya kurang kompleks sehingga menyesuaikan data untuk mendapatkan akurasi absolut.
Pengklasifikasi Pohon Keputusan 96.61% Mencapai akurasi yang layak.
Pengklasifikasi Hutan Acak 98.30% Menjadi pendekatan berbasis ansambel, kinerjanya lebih baik daripada Pohon Keputusan. Melakukan penyetelan hyperparameter membuatnya mencapai akurasi yang mirip dengan regresi logistik.

Dalam tutorial ini, kita mempelajari cara mulai membuat dan melatih model pembelajaran mesin di scikit-learn. Kami menerapkan dan mengevaluasi beberapa algoritme untuk mendapatkan gambaran dasar tentang kinerjanya. Seseorang selalu dapat mengadopsi strategi lanjutan untuk rekayasa fitur, penyetelan hyperparameter, atau pelatihan untuk meningkatkan kinerja. Untuk membaca lebih lanjut tentang fungsi yang ditawarkan scikit-learn, buka dokumentasi resmi - Pengantar pembelajaran mesin dengan scikit-learn, Pembelajaran Mesin dengan Python dengan scikit-learn.

 
 
Yesha Shastri adalah pengembang dan penulis AI yang bersemangat mengejar gelar Master dalam Pembelajaran Mesin dari Université de Montréal. Yesha tertarik untuk mengeksplorasi teknik AI yang bertanggung jawab untuk memecahkan tantangan yang bermanfaat bagi masyarakat dan berbagi pembelajarannya dengan masyarakat.
 

Stempel Waktu:

Lebih dari KDnugget