Aan de slag met Scikit-learn voor classificatie in machine learning

Aan de slag met Scikit-learn voor classificatie in machine learning

Bronknooppunt: 1780638
Aan de slag met Scikit-learn voor classificatie in machine learning
Afbeelding door redacteur
 

Scikit-learn is een van de meest gebruikte machine learning-bibliotheken die in Python zijn gebouwd. De populariteit kan worden toegeschreven aan de eenvoudige en consistente codestructuur die vriendelijk is voor beginnende ontwikkelaars. Er is ook een hoog niveau van ondersteuning beschikbaar, samen met de flexibiliteit om functionaliteiten van derden te integreren, wat de bibliotheek robuust en geschikt maakt voor productie. De bibliotheek bevat meerdere machine learning-modellen voor classificatie, regressie en clustering. In deze zelfstudie onderzoeken we het probleem van classificatie met meerdere klassen via verschillende algoritmen. Laten we er meteen in duiken en onze scikit-learn-modellen bouwen.

pip install scikit-learn

We zullen de dataset "Wine" gebruiken die beschikbaar is in de datasets-module van scikit-learn. Deze dataset bestaat uit 178 monsters en in totaal 3 klassen. De dataset is al voorbewerkt en geconverteerd naar kenmerkvectoren, dus we kunnen deze direct gebruiken om onze modellen te trainen.

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

We bewaren 67% van de gegevens voor training en de rest 33% voor testen.

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 gaan we experimenteren met 5 verschillende modellen met verschillende complexiteiten en evalueren we hun resultaten op onze dataset.

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

 

uitgang

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

 

uitgang 

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

 

Bij het wijzigen van de parameter 'n_neighbors=2' zien we een afname in de waarde van nauwkeurigheid. Het laat dus zien dat de gegevens eenvoudig genoeg zijn en beter leren met een enkele buur om te overwegen. 

uitgang 

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

 

uitgang

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

 

uitgang

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

 

uitgang


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

 

In dit algoritme hebben we wat hyperparameterafstemming uitgevoerd om de beste nauwkeurigheid te bereiken. We hebben een parameterraster gedefinieerd dat bestaat uit meerdere waarden om uit te kiezen voor elke parameter. Verder hebben we het Randomized Search CV-algoritme gebruikt om de beste parameterruimte voor het model te zoeken. Ten slotte voeren we de verkregen parameters in de classifier in en trainen we het model. 

Modellen Nauwkeurigheid Waarnemingen
Logistische regressie 98.30% Bereikt grote nauwkeurigheid. Model kan goed generaliseren op de testdataset.
K-dichtstbijzijnde buren 77.96% Het algoritme kan de gegevensrepresentatie niet goed leren.
Naïeve Bayes 100% Het model is minder complex en past daarom te veel op de gegevens om absolute nauwkeurigheid te verkrijgen.
Beslissingsboomclassificatie 96.61% Bereikt behoorlijke nauwkeurigheid.
Willekeurige bosclassificatie 98.30% Omdat het een op ensembles gebaseerde aanpak is, presteert het beter dan Decision Tree. Door hyperparameterafstemming uit te voeren, bereikt het een vergelijkbare nauwkeurigheid als logistische regressie.

In deze zelfstudie hebben we geleerd hoe u aan de slag kunt gaan met het bouwen en trainen van machine learning-modellen in scikit-learn. We hebben een aantal algoritmen geïmplementeerd en geëvalueerd om een ​​basisidee te krijgen over hun prestaties. Je kunt altijd geavanceerde strategieën toepassen voor feature-engineering, afstemming van hyperparameters of training om de prestaties te verbeteren. Om meer te lezen over de functionaliteiten die scikit-learn biedt, ga naar de officiële documentatie - Inleiding tot machine learning met scikit-learn, Machine learning in Python met scikit-learn.

 
 
Yesha Shastri is een gepassioneerde AI-ontwikkelaar en -schrijver die een master in Machine Learning volgt aan de Université de Montréal. Yesha is geïntrigeerd om verantwoorde AI-technieken te onderzoeken om uitdagingen op te lossen die de samenleving ten goede komen en haar lessen te delen met de gemeenschap.
 

Tijdstempel:

Meer van KDnuggets