Scikit-learniga alustamine masinõppes klassifitseerimiseks

Scikit-learniga alustamine masinõppes klassifitseerimiseks

Allikasõlm: 1780638
Scikit-learniga alustamine masinõppes klassifitseerimiseks
Pilt redaktori poolt
 

Scikit-learn on üks enimkasutatavaid Pythonisse ehitatud masinõppe teeke. Selle populaarsuse põhjuseks on lihtne ja järjepidev koodi struktuur, mis on sõbralik algajatele arendajatele. Lisaks on saadaval kõrgetasemeline tugi ja paindlikkus kolmandate osapoolte funktsioonide integreerimiseks, mis muudab raamatukogu vastupidavaks ja tootmiseks sobivaks. Teek sisaldab mitut masinõppe mudelit klassifitseerimiseks, regressiooniks ja rühmitamiseks. Selles õpetuses uurime mitme klassi klassifitseerimise probleemi erinevate algoritmide kaudu. Sukeldume sellesse ja loome oma scikit-learn mudelid.

pip install scikit-learn

Kasutame scikit-learni andmekogumite moodulis saadaolevat andmestikku "Wine". See andmestik koosneb 178 proovist ja kokku 3 klassist. Andmekogum on juba eeltöödeldud ja teisendatud funktsioonivektoriteks, seega saame seda kasutada otse oma mudelite koolitamiseks.

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

67% andmetest jätame alles treeninguteks ja ülejäänud 33% testimiseks.

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
)

 

Nüüd katsetame 5 erineva keerukusega mudeliga ja hindame nende tulemusi meie andmekogumis.

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

 

Väljund

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

 

Väljund 

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

 

Parameetri 'n_neighbors=2' muutmisel täheldame täpsuse väärtuse vähenemist. Seega näitab see, et andmed on piisavalt lihtsad ja võimaldavad paremini õppida, kui arvestada ühe naabriga. 

Väljund 

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

 

Väljund

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

 

Väljund

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

 

Väljund


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

 

Selles algoritmis viisime parima täpsuse saavutamiseks läbi mõned hüperparameetrite häälestamised. Määratlesime parameetrite ruudustiku, mis koosneb mitmest väärtusest, mille hulgast iga parameetri jaoks valida. Lisaks kasutasime mudeli jaoks parima parameetriruumi otsimiseks juhusliku otsingu CV algoritmi. Lõpuks sisestame saadud parameetrid klassifikaatorisse ja treenime mudelit. 

Mudelid Täpsus Kommentaarid
Logistiline regressioon 98.30% Saavutab suure täpsuse. Mudel on võimeline testandmestiku kohta hästi üldistama.
K-Lähimad naabrid 77.96% Algoritm ei suuda andmete esitust hästi õppida.
Naiivne Bayes 100% Mudel on vähem keerukas, seetõttu sobib see absoluutse täpsuse saavutamiseks andmetega üle.
Otsustuspuu klassifikaator 96.61% Saavutab korraliku täpsuse.
Juhuslik metsa klassifikaator 98.30% Kuna tegemist on ansamblipõhise lähenemisviisiga, toimib see paremini kui otsustepuu. Hüperparameetrite häälestamine võimaldab saavutada logistilise regressiooniga sarnase täpsuse.

Selles õpetuses õppisime, kuidas alustada scikit-learni masinõppemudelite loomist ja koolitamist. Rakendasime ja hindasime mõnda algoritmi, et saada nende toimivusest põhiline ettekujutus. Jõudluse parandamiseks saab alati kasutada täiustatud strateegiaid funktsioonide projekteerimiseks, hüperparameetrite häälestamiseks või treenimiseks. Scikit-learni pakutavate funktsioonide kohta lisateabe saamiseks vaadake ametlikku dokumentatsiooni - Sissejuhatus masinõppesse koos scikit-learniga, Pythonis masinõpe koos scikit-learniga.

 
 
Ješa Šastri on kirglik tehisintellekti arendaja ja kirjanik, kes omandab Montréali ülikoolis masinõppe magistrikraadi. Yesha on huvitatud vastutustundlike tehisintellekti tehnikate uurimisest, et lahendada ühiskonnale kasulikke väljakutseid ja jagada oma teadmisi kogukonnaga.
 

Ajatempel:

Veel alates KDnuggets