Support Vector Machines (SVM) zijn een krachtige en veelzijdige klasse van begeleide machine learning-algoritmen die met name effectief zijn voor classificatietaken. Bibliotheken zoals scikit-learn in Python bieden robuuste implementaties van SVM, waardoor het toegankelijk wordt voor zowel praktijkmensen als onderzoekers. Dit antwoord zal verduidelijken hoe scikit-learn kan worden gebruikt om SVM-classificatie te implementeren, waarbij de belangrijkste functies worden beschreven en illustratieve voorbeelden worden gegeven.
Inleiding tot SVM
Ondersteuningsvectormachines werken door het hypervlak te vinden dat de gegevens het beste in verschillende klassen scheidt. In een tweedimensionale ruimte is dit hypervlak eenvoudigweg een lijn, maar in hogere dimensies wordt het een vlak of hypervlak. Het optimale hypervlak is degene die de marge tussen de twee klassen maximaliseert, waarbij de marge wordt gedefinieerd als de afstand tussen het hypervlak en de dichtstbijzijnde gegevenspunten van beide klassen, ook wel ondersteuningsvectoren genoemd.
Scikit-learn en SVM
Scikit-learn is een krachtige Python-bibliotheek voor machine learning die eenvoudige en efficiënte tools biedt voor datamining en data-analyse. Het is gebouwd op NumPy, SciPy en matplotlib. De `svm`-module binnen scikit-learn zorgt voor de implementatie van SVM-algoritmen.
Toetsfuncties
1. `svm.SVC`: Dit is de hoofdklasse voor het uitvoeren van classificatie met behulp van SVM. SVC staat voor Support Vector Classification.
2. `passen`: Deze methode wordt gebruikt om het model te trainen op de gegeven gegevens.
3. `voorspellen`: Zodra het model is getraind, wordt deze methode gebruikt om de klasselabels voor de gegeven testgegevens te voorspellen.
4. `scoren`: Deze methode wordt gebruikt om de nauwkeurigheid van het model op basis van de testgegevens te evalueren.
5. `GridZoekCV`: Dit wordt gebruikt voor het afstemmen van hyperparameters om de beste parameters voor het SVM-model te vinden.
Implementatie van SVM-classificatie met scikit-learn
Laten we eens kijken naar de stappen die nodig zijn voor het implementeren van SVM-classificatie met behulp van scikit-learn.
Stap 1: Bibliotheken importeren
Importeer eerst de benodigde bibliotheken:
{{EJS9}}Stap 2: De dataset laden
Voor demonstratiedoeleinden zullen we de Iris-dataset gebruiken, een bekende dataset in de machine learning-gemeenschap:
{{EJS10}}Stap 3: De gegevensset splitsen
Splits de dataset op in trainings- en testsets:
{{EJS11}}Stap 4: Functieschaling
Het schalen van functies is belangrijk voor SVM, omdat het gevoelig is voor de schaal van de invoerfuncties:
{{EJS12}}Stap 5: Het SVM-model trainen
Instantieer de SVM-classificator en train deze op basis van de trainingsgegevens:
python
# Create an instance of SVC and fit the data
svc = SVC(kernel='linear', C=1.0)
svc.fit(X_train, y_train)
Hier hebben we een lineaire kernel gebruikt en de regularisatieparameter `C` ingesteld op 1.0. De kernelparameter specificeert het type hypervlak dat wordt gebruikt om de gegevens te scheiden. Veel voorkomende kernels zijn onder meer 'lineair', 'poly' (polynoom), 'rbf' (radiale basisfunctie) en 'sigmoïde'.
Stap 6: Voorspellingen doen
Gebruik het getrainde model om voorspellingen te doen op basis van de testgegevens:
{{EJS14}}Stap 7: Evaluatie van het model
Evalueer de prestaties van het model met behulp van statistieken zoals de verwarringsmatrix en het classificatierapport:
python
# Evaluate the model
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
De verwarringsmatrix geeft een samenvatting van de voorspellingsresultaten, terwijl het classificatierapport precisie, herinnering, F1-score en ondersteuning voor elke klasse bevat.
Hyperparameterafstemming met GridSearchCV
Het afstemmen van hyperparameters is essentieel voor het optimaliseren van de prestaties van een SVM-model. Scikit-learn's `GridSearchCV` kan worden gebruikt om een uitgebreide zoekopdracht uit te voeren over een gespecificeerd parameterraster:
python
from sklearn.model_selection import GridSearchCV
# Define the parameter grid
param_grid = {
'C': [0.1, 1, 10, 100],
'gamma': [1, 0.1, 0.01, 0.001],
'kernel': ['rbf']
}
# Create a GridSearchCV instance
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2)
grid.fit(X_train, y_train)
# Print the best parameters and the corresponding score
print("Best parameters found: ", grid.best_params_)
print("Best score: ", grid.best_score_)
# Use the best estimator to make predictions
grid_predictions = grid.predict(X_test)
# Evaluate the model with the best parameters
print(confusion_matrix(y_test, grid_predictions))
print(classification_report(y_test, grid_predictions))
In dit voorbeeld hebben we met behulp van de RBF-kernel in een raster van waarden gezocht naar `C` en `gamma`. De instantie `GridSearchCV` past het model opnieuw aan met de beste parameters die tijdens de zoekopdracht zijn gevonden.
Het visualiseren van de beslissingsgrens
Voor een beter begrip van hoe de SVM-classificator werkt, is het vaak nuttig om de beslissingsgrens te visualiseren. Dit is eenvoudiger in een tweedimensionale kenmerkruimte. Hieronder ziet u een voorbeeld waarbij een synthetische dataset wordt gebruikt:
python
from sklearn.datasets import make_blobs
# Generate a synthetic dataset
X, y = make_blobs(n_samples=100, centers=2, random_state=6)
# Fit the SVM model
svc = SVC(kernel='linear', C=1.0)
svc.fit(X, y)
# Create a mesh to plot the decision boundary
h = .02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
# Predict the class for each point in the mesh
Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# Plot the decision boundary
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('SVM Decision Boundary')
plt.show()
De bovenstaande code genereert een synthetische dataset met twee klassen, past een SVM-model in met een lineaire kernel en visualiseert de beslissingsgrens. De `contourf`-functie wordt gebruikt om de beslissingsgrens uit te zetten, en het spreidingsdiagram toont de datapunten. Scikit-learn biedt een uitgebreide en gebruiksvriendelijke interface voor het implementeren van SVM-classificatie in Python. De sleutelfuncties zoals `svm.SVC`, `fit`, `predict` en `score` zijn essentieel voor het bouwen en evalueren van SVM-modellen. Hyperparameterafstemming met `GridSearchCV` verbetert de modelprestaties verder door de optimale parameters te vinden. Het visualiseren van de beslissingsgrens kan waardevolle inzichten opleveren in het gedrag van de classificator. Door deze stappen te volgen, kan men de SVM-classificatie effectief implementeren en optimaliseren met behulp van scikit-learn.
Andere recente vragen en antwoorden over EITC/AI/MLP Machine Learning met Python:
- Waarom zou je een KNN-algoritme gebruiken in plaats van een SVM-algoritme en vice versa?
- Wat is Quandl en hoe kan ik het momenteel installeren en gebruiken om regressie aan te tonen?
- Hoe wordt de b-parameter bij lineaire regressie (het y-snijpunt van de best passende lijn) berekend?
- Welke rol spelen ondersteuningsvectoren bij het definiëren van de beslissingsgrens van een SVM, en hoe worden ze geïdentificeerd tijdens het trainingsproces?
- Wat is in de context van SVM-optimalisatie de betekenis van de gewichtsvector `w` en bias `b`, en hoe worden deze bepaald?
- Wat is het doel van de ‘visualize’-methode in een SVM-implementatie, en hoe helpt deze bij het begrijpen van de prestaties van het model?
- Hoe bepaalt de `predict`-methode in een SVM-implementatie de classificatie van een nieuw datapunt?
- Wat is het primaire doel van een Support Vector Machine (SVM) in de context van machine learning?
- Leg de betekenis uit van de beperking (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) bij SVM-optimalisatie.
- Wat is het doel van het SVM-optimalisatieprobleem en hoe wordt het wiskundig geformuleerd?
Bekijk meer vragen en antwoorden in EITC/AI/MLP Machine Learning met Python

