Les màquines vectorials de suport (SVM) són una classe potent i versàtil d'algoritmes d'aprenentatge automàtic supervisat especialment eficaços per a tasques de classificació. Biblioteques com scikit-learn a Python ofereixen implementacions sòlides de SVM, fent-lo accessible tant per als professionals com per als investigadors. Aquesta resposta dilucidarà com es pot utilitzar scikit-learn per implementar la classificació SVM, detallant les funcions clau implicades i proporcionant exemples il·lustratius.
Introducció a SVM
Les màquines vectorials de suport funcionen trobant l'hiperpla que millor separa les dades en diferents classes. En un espai bidimensional, aquest hiperpla és simplement una línia, però en dimensions superiors, es converteix en un pla o hiperpla. L'hiperpla òptim és el que maximitza el marge entre les dues classes, on el marge es defineix com la distància entre l'hiperpla i els punts de dades més propers de qualsevol classe, coneguts com a vectors de suport.
Scikit-learn i SVM
Scikit-learn és una potent biblioteca de Python per a l'aprenentatge automàtic que proporciona eines senzilles i eficients per a la mineria de dades i l'anàlisi de dades. Està construït sobre NumPy, SciPy i matplotlib. El mòdul `svm` dins de scikit-learn proporciona la implementació d'algorismes SVM.
Funcions clau
1. `svm.SVC`: Aquesta és la classe principal per dur a terme la classificació mitjançant SVM. SVC significa Classificació Vectorial de Suport.
2. 'encaix': Aquest mètode s'utilitza per entrenar el model sobre les dades donades.
3. 'predir': Un cop s'ha entrenat el model, aquest mètode s'utilitza per predir les etiquetes de classe per a les dades de prova donades.
4. "puntuació".: Aquest mètode s'utilitza per avaluar la precisió del model sobre les dades de prova.
5. `GridSearchCV`: S'utilitza per ajustar els hiperparàmetres per trobar els millors paràmetres per al model SVM.
Implementació de la classificació SVM amb scikit-learn
Considerem els passos implicats en la implementació de la classificació SVM mitjançant scikit-learn.
Pas 1: importació de biblioteques
Primer, importeu les biblioteques necessàries:
python import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import classification_report, confusion_matrix
Pas 2: carregar el conjunt de dades
Amb finalitats de demostració, utilitzarem el conjunt de dades Iris, un conjunt de dades conegut a la comunitat d'aprenentatge automàtic:
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
Pas 3: Divisió del conjunt de dades
Dividiu el conjunt de dades en conjunts d'entrenament i de prova:
python # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Pas 4: escala de característiques
L'escala de característiques és important per a SVM, ja que és sensible a l'escala de les característiques d'entrada:
python # Standardize features by removing the mean and scaling to unit variance scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
Pas 5: Entrenar el model SVM
Instanciïu el classificador SVM i entreneu-lo amb les dades d'entrenament:
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
Aquí, hem utilitzat un nucli lineal i hem establert el paràmetre de regularització "C" a 1.0. El paràmetre del nucli especifica el tipus d'hiperpla utilitzat per separar les dades. Els nuclis comuns inclouen "lineal", "poli" (polinomi), "rbf" (funció de base radial) i "sigmoide".
Pas 6: fer prediccions
Utilitzeu el model entrenat per fer prediccions sobre les dades de prova:
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
Pas 7: Avaluació del model
Avalueu el rendiment del model mitjançant mètriques com ara la matriu de confusió i l'informe de classificació:
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
La matriu de confusió proporciona un resum dels resultats de la predicció, mentre que l'informe de classificació inclou precisió, recordació, puntuació F1 i suport per a cada classe.
Ajust d'hiperparàmetres amb GridSearchCV
L'ajustament d'hiperparàmetres és essencial per optimitzar el rendiment d'un model SVM. El `GridSearchCV` de Scikit-learn es pot utilitzar per realitzar una cerca exhaustiva sobre una graella de paràmetres especificada:
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))
En aquest exemple, hem cercat en una graella de valors "C" i "gamma" mitjançant el nucli RBF. La instància `GridSearchCV` ajusta el model amb els millors paràmetres trobats durant la cerca.
Visualització del límit de decisió
Per entendre millor com funciona el classificador SVM, sovint és útil visualitzar el límit de decisió. Això és més senzill en un espai de característiques bidimensionals. A continuació es mostra un exemple amb un conjunt de dades sintètics:
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()
El codi anterior genera un conjunt de dades sintètic amb dues classes, s'adapta a un model SVM amb un nucli lineal i visualitza el límit de decisió. La funció `contourf` s'utilitza per traçar el límit de decisió, i el gràfic de dispersió mostra els punts de dades. Scikit-learn proporciona una interfície completa i fàcil d'utilitzar per implementar la classificació SVM en Python. Les funcions clau com ara `svm.SVC`, `fit', `predict' i `score' són essencials per construir i avaluar models SVM. L'ajustament d'hiperparàmetres amb "GridSearchCV" millora encara més el rendiment del model en trobar els paràmetres òptims. Visualitzar el límit de decisió pot proporcionar informació valuosa sobre el comportament del classificador. Seguint aquests passos, es pot implementar i optimitzar eficaçment la classificació SVM mitjançant scikit-learn.
Altres preguntes i respostes recents sobre Aprenentatge automàtic EITC/AI/MLP amb Python:
- Com es calcula el paràmetre b en regressió lineal (la intercepció en y de la línia de millor ajust)?
- Quin paper juguen els vectors de suport a l'hora de definir el límit de decisió d'un SVM i com s'identifiquen durant el procés de formació?
- En el context de l'optimització SVM, quina és la importància del vector de pes "w" i el biaix "b" i com es determinen?
- Quin és l'objectiu del mètode `visualize' en una implementació SVM, i com ajuda a entendre el rendiment del model?
- Com determina el mètode "predir" en una implementació SVM la classificació d'un punt de dades nou?
- Quin és l'objectiu principal d'una màquina de vectors de suport (SVM) en el context de l'aprenentatge automàtic?
- Expliqueu la importància de la restricció (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) en l'optimització de SVM.
- Quin és l'objectiu del problema d'optimització SVM i com es formula matemàticament?
- Com depèn la classificació d'un conjunt de característiques a SVM del signe de la funció de decisió (text{sign}(mathbf{x}_i cdot mathbf{w} + b))?
- Quin és el paper de l'equació d'hiperpla (mathbf{x} cdot mathbf{w} + b = 0) en el context de les màquines de vectors de suport (SVM)?
Consulteu més preguntes i respostes a EITC/AI/MLP Machine Learning amb Python