Scikit-learnin käytön aloittaminen koneoppimisen luokittelua varten

Scikit-learnin käytön aloittaminen koneoppimisen luokittelua varten

Lähdesolmu: 1780638
Scikit-learnin käytön aloittaminen koneoppimisen luokittelua varten
Kuvan toimittaja
 

Scikit-learn on yksi yleisimmin käytetyistä pythoniin rakennetuista koneoppimiskirjastoista. Sen suosio johtuu sen helposta ja johdonmukaisesta koodirakenteesta, joka on ystävällinen aloitteleville kehittäjille. Lisäksi saatavilla on korkea tukitaso sekä joustavuus integroida kolmannen osapuolen toimintoja, mikä tekee kirjastosta vankan ja tuotantoon sopivan. Kirjasto sisältää useita koneoppimismalleja luokittelua, regressiota ja klusterointia varten. Tässä opetusohjelmassa tutkimme moniluokkaisen luokituksen ongelmaa eri algoritmien avulla. Sukellaan suoraan siihen ja rakennetaan scikit-learn-mallejamme.

pip install scikit-learn

Käytämme scikit-learnin tietojoukkomoduulissa saatavilla olevaa "Wine" -tietojoukkoa. Tämä tietojoukko koostuu yhteensä 178 näytteestä ja 3 luokasta. Tietojoukko on jo esikäsitelty ja muunnettu ominaisuusvektoreiksi, joten voimme käyttää sitä suoraan mallien kouluttamiseen.

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

Säilytämme tiedoista 67 % harjoittelua varten ja loput 33 % testausta varten.

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
)

 

Nyt kokeilemme viittä erilaista mallia, joiden monimutkaisuus vaihtelee, ja arvioimme niiden tuloksia tietojoukossamme.

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

 

ulostulo

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

 

ulostulo 

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

 

Muutettaessa parametria 'n_neighbors=2' havaitsemme tarkkuuden arvon laskun. Näin ollen se osoittaa, että tiedot ovat riittävän yksinkertaisia ​​ja saavuttavat paremman oppimisen yhden naapurin kanssa. 

ulostulo 

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

 

ulostulo

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

 

ulostulo

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

 

ulostulo


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

 

Tässä algoritmissa suoritimme hyperparametrien viritystä parhaan tarkkuuden saavuttamiseksi. Määritimme parametriruudukon, joka koostuu useista arvoista, joista valita kullekin parametrille. Lisäksi käytimme satunnaishaun CV-algoritmia parhaan parametritilan etsimiseen mallille. Lopuksi syötetään saadut parametrit luokittelijaan ja harjoitellaan mallia. 

Mallit tarkkuus Havainnot
Logistinen regressio 98.30% Saavuttaa suuren tarkkuuden. Malli pystyy yleistämään hyvin testiaineistossa.
K-Lähimmät naapurit 77.96% Algoritmi ei pysty oppimaan dataesitystä hyvin.
Naiivi Bayes 100% Malli on vähemmän monimutkainen, joten se ylisovittaa tiedot saavuttaakseen absoluuttisen tarkkuuden.
Päätöspuun luokittelija 96.61% Saavuttaa kunnollisen tarkkuuden.
Satunnainen metsien luokittelija 98.30% Ensemble-pohjaisena lähestymistapana se toimii paremmin kuin päätöspuu. Suorittamalla hyperparametrien virityksen se saavuttaa samanlaisen tarkkuuden kuin logistinen regressio.

Tässä opetusohjelmassa opimme aloittamaan koneoppimismallien rakentamisen ja opettamisen scikit-learnissä. Totesimme ja arvioimme muutamia algoritmeja saadaksemme peruskäsityksen niiden toiminnasta. Suorituskyvyn parantamiseksi voidaan aina ottaa käyttöön edistyneitä strategioita ominaisuuksien suunnitteluun, hyperparametrien viritykseen tai harjoitteluun. Jos haluat lukea lisää scikit-learnin tarjoamista toiminnoista, siirry viralliseen dokumentaatioon - Johdatus koneoppimiseen scikit-learnillä, Koneoppiminen Pythonissa scikit-learnillä.

 
 
Yesha Shastri on intohimoinen tekoälykehittäjä ja kirjailija, joka suorittaa koneoppimisen maisterintutkintoa Université de Montréalista. Yesha on kiinnostunut tutkimaan vastuullisia tekoälytekniikoita yhteiskunnan hyödyllisten haasteiden ratkaisemiseksi ja jakamaan oppimansa yhteisön kanssa.
 

Aikaleima:

Lisää aiheesta KDnuggets