Makine Öğreniminde Sınıflandırma için Scikit-learn'e Başlarken

Makine Öğreniminde Sınıflandırma için Scikit-learn'e Başlarken

Kaynak Düğüm: 1780638
Makine Öğreniminde Sınıflandırma için Scikit-learn'e Başlarken
Editöre göre resim
 

Scikit-learn, python'da oluşturulmuş en yaygın kullanılan makine öğrenimi kitaplıklarından biridir. Popülaritesi, yeni başlayan geliştiriciler için kolay ve tutarlı kod yapısına bağlanabilir. Ayrıca, kitaplığı sağlam ve üretim için uygun hale getiren üçüncü taraf işlevlerini entegre etme esnekliğinin yanı sıra yüksek düzeyde destek mevcuttur. Kitaplık, sınıflandırma, regresyon ve kümeleme için birden çok makine öğrenimi modeli içerir. Bu öğreticide, çeşitli algoritmalar aracılığıyla çok sınıflı sınıflandırma problemini keşfedeceğiz. Hemen konuya girelim ve scikit-learn modellerimizi oluşturalım.

pip install scikit-learn

Scikit-learn'ün veri kümeleri modülünde bulunan "Wine" veri kümesini kullanacağız. Bu veri seti toplamda 178 örnek ve 3 sınıftan oluşmaktadır. Veri kümesi önceden işlendi ve özellik vektörlerine dönüştürüldü, bu nedenle onu modellerimizi eğitmek için doğrudan kullanabiliriz.

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

Verilerin %67'sini eğitim için ve geri kalan %33'ünü test için tutacağız.

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
)

 

Şimdi, farklı karmaşıklıklara sahip 5 farklı modeli deneyeceğiz ve sonuçlarını veri setimiz üzerinde değerlendireceğiz.

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))

 

Çıktı

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))

 

Çıktı 

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

 

'n_neighbors=2' parametresini değiştirdikten sonra doğruluk değerinde bir düşüş gözlemliyoruz. Dolayısıyla, verilerin yeterince basit olduğunu ve dikkate alınması gereken tek bir komşu ile daha iyi öğrenme sağladığını gösterir. 

Çıktı 

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))

 

Çıktı

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))

 

Çıktı

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))

 

Çıktı


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

 

Bu algoritmada, en iyi doğruluğu elde etmek için bazı hiperparametre ayarlamaları yaptık. Her parametre için aralarından seçim yapabileceğiniz birden çok değerden oluşan bir parametre ızgarası tanımladık. Ayrıca, model için en iyi parametre alanını aramak için Rastgele Arama CV algoritmasını kullandık. Son olarak elde edilen parametreleri sınıflandırıcıya besliyoruz ve modeli eğitiyoruz. 

Modeller doğruluk Gözlemler
Lojistik regresyon %98.30 Büyük doğruluk elde eder. Model, test veri setinde iyi genelleme yapabilir.
K-En Yakın Komşular %77.96 Algoritma, veri temsilini iyi öğrenemez.
Naif bayanlar %100 Model daha az karmaşıktır, bu nedenle mutlak doğruluk elde etmek için verileri değiştirir.
Karar Ağacı Sınıflandırıcısı %96.61 Yeterli doğruluk elde eder.
Rastgele Orman Sınıflandırıcısı %98.30 Topluluk tabanlı bir yaklaşım olarak, Karar Ağacından daha iyi performans gösterir. Hiperparametre ayarlaması gerçekleştirmek, lojistik regresyona benzer bir doğruluk elde etmesini sağlar.

Bu eğitimde, scikit-learn'de makine öğrenimi modellerini oluşturmaya ve eğitmeye nasıl başlayacağımızı öğrendik. Performansları hakkında temel bir fikir edinmek için birkaç algoritma uyguladık ve değerlendirdik. Performansı artırmak için özellik mühendisliği, hiperparametre ayarı veya eğitim için her zaman gelişmiş stratejiler benimsenebilir. Scikit-learn'ün sunduğu işlevler hakkında daha fazla bilgi edinmek için resmi belgelere gidin - Scikit-learn ile makine öğrenimine giriş, scikit-learn ile Python'da Makine Öğrenimi.

 
 
Yesha Shastri Tutkulu bir yapay zeka geliştiricisi ve Université de Montréal'den Makine Öğrenimi alanında yüksek lisans yapmakta olan bir yazardır. Yesha, topluma fayda sağlayan zorlukları çözmek ve öğrendiklerini toplulukla paylaşmak için sorumlu yapay zeka tekniklerini keşfetmeye ilgi duyuyor.
 

Zaman Damgası:

Den fazla KDNuggets