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.
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- Platoblockchain. Web3 Metaverse Intelligentie. Kennis versterkt. Toegang hier.
- Bron: https://www.kdnuggets.com/getting-started-with-scikit-learn-for-classification-in-machine-learning.html?utm_source=rss&utm_medium=rss&utm_campaign=getting-started-with-scikit-learn-for-classification-in-machine-learning
- 1
- 10
- 100
- 67
- 77
- 84
- 9
- 98
- a
- in staat
- Over
- absoluut
- nauwkeurigheid
- Bereiken
- adopteren
- vergevorderd
- AI
- algoritme
- algoritmen
- al
- altijd
- en
- nadering
- auto
- Beschikbaar
- basis-
- voordeel
- BEST
- Betere
- Bootstrap
- bouw
- bebouwd
- uitdagingen
- veranderende
- Kies
- klassen
- classificatie
- clustering
- code
- algemeen
- gemeenschap
- complex
- complexiteit
- Overwegen
- consequent
- bestaande uit
- bevat
- geconverteerd
- gegevens
- datasets
- beslissing
- verlagen
- Ontwikkelaar
- ontwikkelaars
- anders
- verschillend
- direct
- documentatie
- elk
- Engineering
- genoeg
- Ether (ETH)
- schatten
- geëvalueerd
- experiment
- Verken
- Kenmerk
- weinig
- Tot slot
- Flexibiliteit
- Bos
- vriendelijk
- oppompen van
- functionaliteiten
- verder
- krijgen
- het krijgen van
- groot
- Raster
- hoofd
- Hoge
- Hoe
- How To
- HTML
- HTTPS
- Hyperparameter afstemmen
- idee
- geïmplementeerd
- importeren
- verbeteren
- in
- installeren
- integreren
- IT
- Houden
- LEARN
- geleerd
- leren
- Niveau
- bibliotheken
- Bibliotheek
- machine
- machine learning
- Macro
- MERKEN
- master's
- model
- modellen
- module
- meer
- meest
- meervoudig
- waarnemen
- verkregen
- Aanbod
- officieel
- EEN
- parameter
- parameters
- hartstochtelijk
- prestatie
- uitvoerend
- presteert
- Plato
- Plato gegevensintelligentie
- PlatoData
- populariteit
- precisie
- probleem
- Productie
- Python
- Gerandomiseerd
- Lees
- vertegenwoordiging
- verantwoordelijk
- REST
- Resultaten
- terugkeer
- robuust
- scikit-leren
- Ontdek
- Delen
- Shows
- gelijk
- Eenvoudig
- single
- Maatschappij
- OPLOSSEN
- sommige
- Tussenruimte
- gestart
- strategieën
- structuur
- geschikt
- ondersteuning
- technieken
- proef
- Testen
- De
- hun
- van derden
- Door
- naar
- Totaal
- Trainen
- Trainingen
- waar
- zelfstudie
- .
- waarde
- Values
- divers
- welke
- wil
- schrijver
- X
- zephyrnet