Začetek s Scikit-learn za klasifikacijo v strojnem učenju

Začetek s Scikit-learn za klasifikacijo v strojnem učenju

Izvorno vozlišče: 1780638
Začetek s Scikit-learn za klasifikacijo v strojnem učenju
Slika urednika
 

Scikit-learn je ena najpogosteje uporabljenih knjižnic za strojno učenje, zgrajenih v pythonu. Njegovo priljubljenost je mogoče pripisati enostavni in dosledni strukturi kode, ki je prijazna za razvijalce začetnike. Poleg tega je na voljo visoka raven podpore in prilagodljivost za integracijo funkcij tretjih oseb, zaradi česar je knjižnica robustna in primerna za produkcijo. Knjižnica vsebuje več modelov strojnega učenja za klasifikacijo, regresijo in združevanje v gruče. V tej vadnici bomo raziskali problem večrazredne klasifikacije z različnimi algoritmi. Poglobimo se vanj in zgradimo naše modele učenja scikit.

pip install scikit-learn

Uporabili bomo nabor podatkov »Wine«, ki je na voljo v modulu naborov podatkov scikit-learn. Ta nabor podatkov je sestavljen iz 178 vzorcev in skupaj 3 razredov. Nabor podatkov je že vnaprej obdelan in pretvorjen v značilne vektorje, zato ga lahko neposredno uporabimo za usposabljanje naših modelov.

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

67 % podatkov bomo hranili za usposabljanje, preostalih 33 % pa za testiranje.

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
)

 

Zdaj bomo eksperimentirali s 5 različnimi modeli različnih kompleksnosti in ocenili njihove rezultate na našem naboru podatkov.

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

 

izhod

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

 

izhod 

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

 

Ob spremembi parametra 'n_neighbors=2' opazimo zmanjšanje vrednosti natančnosti. Zato kaže, da so podatki dovolj preprosti in dosegajo boljše učenje z enim samim sosedom, ki ga je treba upoštevati. 

izhod 

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

 

izhod

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

 

izhod

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

 

izhod


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

 

V tem algoritmu smo izvedli nekaj prilagoditev hiperparametrov, da bi dosegli najboljšo natančnost. Določili smo mrežo parametrov, sestavljeno iz več vrednosti, med katerimi lahko izbirate za vsak parameter. Nadalje smo uporabili algoritem Randomized Search CV za iskanje najboljšega prostora parametrov za model. Na koncu dobljene parametre vnesemo v klasifikator in usposobimo model. 

Modeli natančnost Opazovanja
Logistična regresija 98.30% Doseže veliko natančnost. Model je sposoben dobro posplošiti testni nabor podatkov.
K-Najbližji sosedje 77.96% Algoritem se ne more dobro naučiti predstavitve podatkov.
Naiven Bayes 100% Model je manj zapleten, zato prenapolni podatke, da bi dosegel absolutno natančnost.
Klasifikator dreves odločitev 96.61% Doseže dostojno natančnost.
Klasifikator naključnih gozdov 98.30% Ker gre za pristop, ki temelji na ansamblu, deluje bolje kot Decision Tree. Z uravnavanjem hiperparametrov doseže podobno natančnost kot logistična regresija.

V tej vadnici smo se naučili, kako začeti graditi in usposabljati modele strojnega učenja v scikit-learn. Implementirali in ovrednotili smo nekaj algoritmov, da bi dobili osnovno predstavo o njihovi uspešnosti. Vedno lahko sprejmemo napredne strategije za inženiring funkcij, nastavitev hiperparametrov ali usposabljanje za izboljšanje zmogljivosti. Če želite prebrati več o funkcijah, ki jih ponuja scikit-learn, pojdite na uradno dokumentacijo - Uvod v strojno učenje s scikit-learn, Strojno učenje v Pythonu s scikit-learn.

 
 
Ješa Šastri je strasten razvijalec AI in pisec, ki opravlja magistrski študij strojnega učenja na Université de Montréal. Yesha je navdušena nad raziskovanjem odgovornih tehnik umetne inteligence za reševanje izzivov, ki koristijo družbi, in deli svoje znanje s skupnostjo.
 

Časovni žig:

Več od KDnuggets