Kom godt i gang med Scikit-learn til klassificering i maskinlæring

Kom godt i gang med Scikit-learn til klassificering i maskinlæring

Kildeknude: 1780638
Kom godt i gang med Scikit-learn til klassificering i maskinlæring
Billede af redaktør
 

Scikit-learn er et af de mest brugte maskinlæringsbiblioteker bygget i python. Dens popularitet kan tilskrives dens nemme og konsistente kodestruktur, som er venlig for begyndere udviklere. Der er også et højt niveau af support tilgængelig sammen med fleksibilitet til at integrere tredjepartsfunktioner, hvilket gør biblioteket robust og velegnet til produktion. Biblioteket indeholder flere maskinlæringsmodeller til klassificering, regression og klyngedannelse. I denne tutorial vil vi udforske problemet med multiklasseklassificering gennem forskellige algoritmer. Lad os dykke direkte ned i det og bygge vores scikit-learn-modeller.

pip install scikit-learn

Vi vil bruge "Wine"-datasættet, der er tilgængeligt i datasætmodulet i scikit-learn. Dette datasæt består af 178 prøver og 3 klasser i alt. Datasættet er allerede forbehandlet og konverteret til funktionsvektorer, så vi kan direkte bruge det til at træne vores modeller.

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

Vi beholder 67 % af dataene til træning og resten 33 % til test.

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
)

 

Nu vil vi eksperimentere med 5 forskellige modeller af forskellig kompleksitet og evaluere deres resultater på vores datasæt.

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

 

Produktion

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

 

Produktion 

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

 

Ved ændring af parameteren 'n_neighbors=2' observerer vi et fald i værdien af ​​nøjagtighed. Derfor viser det, at dataene er enkle nok og opnår bedre læring med en enkelt nabo at overveje. 

Produktion 

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

 

Produktion

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

 

Produktion

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

 

Produktion


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

 

I denne algoritme udførte vi nogle hyperparameterjusteringer for at opnå den bedste nøjagtighed. Vi definerede et parametergitter bestående af flere værdier at vælge imellem for hver parameter. Yderligere brugte vi Randomized Search CV-algoritmen til at søge efter det bedste parameterrum for modellen. Til sidst fodrer vi de opnåede parametre til klassifikatoren og træner modellen. 

Modeller Nøjagtighed Kommentarer
Logistisk regression 98.30 % Opnår stor nøjagtighed. Modellen er i stand til at generalisere godt på testdatasættet.
K-Nærmeste Naboer 77.96 % Algoritmen er ikke i stand til at lære datarepræsentationen godt.
Naiv Bayes 100 % Modellen er mindre kompleks, og derfor overpasser den dataene for at opnå absolut nøjagtighed.
Decision Tree Classifier 96.61 % Opnår anstændig nøjagtighed.
Tilfældig skovklassificering 98.30 % Da den er en ensemblebaseret tilgang, yder den bedre end Decision Tree. Udførelse af hyperparameterjustering gør, at den opnår samme nøjagtighed som logistisk regression.

I dette selvstudie lærte vi, hvordan man kommer i gang med at bygge og træne machine learning-modeller i scikit-learn. Vi implementerede og evaluerede nogle få algoritmer for at få en grundlæggende idé om deres ydeevne. Man kan altid anvende avancerede strategier til feature engineering, hyperparameter tuning eller træning for at forbedre ydeevnen. For at læse mere om de funktioner, som scikit-learn tilbyder, skal du gå over til den officielle dokumentation - Introduktion til maskinlæring med scikit-learn, Machine Learning i Python med scikit-learn.

 
 
Yesha Shastri er en passioneret AI-udvikler og skribent, der forfølger en mastergrad i maskinlæring fra Université de Montréal. Yesha er fascineret af at udforske ansvarlige AI-teknikker for at løse udfordringer, der gavner samfundet, og dele sine erfaringer med samfundet.
 

Tidsstempel:

Mere fra KDnuggets