Les Màquines de Suport Vectorial (SVM) són un dels algorismes més potents i populars en el camp del Machine Learning supervisat. SVM és especialment útil per a tasques de classificació i regressió, però és més conegut per la seva aplicació en problemes de classificació binària.
Conceptes Clau
- Separació de Classes
L'objectiu principal de SVM és trobar un hiperplà que separi les dades en diferents classes amb el màxim marge possible. Aquest hiperplà es coneix com a hiperplà òptim.
- Màxim Marge
El marge és la distància entre l'hiperplà i els punts de dades més propers de cada classe. SVM busca maximitzar aquest marge per millorar la generalització del model.
- Vectors de Suport
Els vectors de suport són els punts de dades més propers a l'hiperplà. Aquests punts són crítics perquè defineixen la posició de l'hiperplà òptim.
- Kernel Trick
Quan les dades no són linealment separables en l'espai original, SVM utilitza una tècnica anomenada "kernel trick" per transformar les dades a un espai de dimensions més altes on sí que poden ser separades linealment.
Funcionament de SVM
- Hiperplà Òptim
L'hiperplà òptim es defineix com aquell que maximitza el marge entre les dues classes. Matemàticament, es pot expressar com:
\[ w \cdot x + b = 0 \]
On:
- \( w \) és el vector de pesos.
- \( x \) és el vector de característiques.
- \( b \) és el bias.
- Funció de Cost
La funció de cost de SVM es basa en maximitzar el marge i minimitzar els errors de classificació. Es pot expressar com:
\[ \text{Minimitzar} \quad \frac{1}{2} ||w||^2 + C \sum_{i=1}^{n} \xi_i \]
On:
- \( ||w||^2 \) és la norma del vector de pesos.
- \( C \) és un paràmetre de regularització que controla el trade-off entre maximitzar el marge i minimitzar els errors de classificació.
- \( \xi_i \) són les variables de slack que permeten errors de classificació.
- Kernel Trick
Els kernels permeten transformar les dades a un espai de dimensions més altes. Alguns dels kernels més comuns són:
- Kernel lineal: \( K(x_i, x_j) = x_i \cdot x_j \)
- Kernel polinòmic: \( K(x_i, x_j) = (x_i \cdot x_j + 1)^d \)
- Kernel RBF (Radial Basis Function): \( K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2) \)
Exemple Pràctic
A continuació, es presenta un exemple pràctic d'implementació de SVM utilitzant Python i la biblioteca scikit-learn
.
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Carregar el conjunt de dades Iris iris = datasets.load_iris() X = iris.data[:, :2] # Utilitzem només les dues primeres característiques per a la visualització y = iris.target # Dividir el conjunt de dades en entrenament i prova X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Crear i entrenar el model SVM model = SVC(kernel='linear', C=1.0) model.fit(X_train, y_train) # Predir les etiquetes del conjunt de prova y_pred = model.predict(X_test) # Avaluar el model accuracy = accuracy_score(y_test, y_pred) print(f'Precisió del model: {accuracy * 100:.2f}%') # Visualitzar el resultat def plot_decision_boundary(X, y, model): h = .02 # Pas de la malla 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)) Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') plt.xlabel('Característica 1') plt.ylabel('Característica 2') plt.title('SVM amb Kernel Lineal') plt.show() plot_decision_boundary(X_test, y_test, model)
Exercicis Pràctics
Exercici 1: Implementació bàsica de SVM
- Carrega el conjunt de dades Iris.
- Divideix el conjunt de dades en entrenament i prova.
- Entrena un model SVM amb un kernel lineal.
- Avalua el model utilitzant la precisió.
Solució
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Carregar el conjunt de dades Iris iris = datasets.load_iris() X = iris.data[:, :2] # Utilitzem només les dues primeres característiques per a la visualització y = iris.target # Dividir el conjunt de dades en entrenament i prova X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Crear i entrenar el model SVM model = SVC(kernel='linear', C=1.0) model.fit(X_train, y_train) # Predir les etiquetes del conjunt de prova y_pred = model.predict(X_test) # Avaluar el model accuracy = accuracy_score(y_test, y_pred) print(f'Precisió del model: {accuracy * 100:.2f}%')
Exercici 2: Utilització de diferents kernels
- Entrena un model SVM amb un kernel polinòmic.
- Entrena un model SVM amb un kernel RBF.
- Compara els resultats amb el model amb kernel lineal.
Solució
# Kernel Polinòmic model_poly = SVC(kernel='poly', degree=3, C=1.0) model_poly.fit(X_train, y_train) y_pred_poly = model_poly.predict(X_test) accuracy_poly = accuracy_score(y_test, y_pred_poly) print(f'Precisió del model amb kernel polinòmic: {accuracy_poly * 100:.2f}%') # Kernel RBF model_rbf = SVC(kernel='rbf', gamma='scale', C=1.0) model_rbf.fit(X_train, y_train) y_pred_rbf = model_rbf.predict(X_test) accuracy_rbf = accuracy_score(y_test, y_pred_rbf) print(f'Precisió del model amb kernel RBF: {accuracy_rbf * 100:.2f}%')
Resum
En aquesta secció, hem explorat les Màquines de Suport Vectorial (SVM), un algorisme potent per a tasques de classificació i regressió. Hem après sobre conceptes clau com el màxim marge, els vectors de suport i el kernel trick. També hem implementat un model SVM utilitzant Python i la biblioteca scikit-learn
, i hem realitzat exercicis pràctics per reforçar els conceptes apresos. En la següent secció, explorarem altres algorismes de Machine Learning supervisat.
Curs de Machine Learning
Mòdul 1: Introducció al Machine Learning
- Què és el Machine Learning?
- Història i evolució del Machine Learning
- Tipus de Machine Learning
- Aplicacions del Machine Learning
Mòdul 2: Fonaments d'Estadística i Probabilitat
- Conceptes bàsics d'estadística
- Distribucions de probabilitat
- Inferència estadística
- Teorema de Bayes
Mòdul 3: Preprocessament de Dades
Mòdul 4: Algoritmes de Machine Learning Supervisat
- Regressió lineal
- Regressió logística
- Arbres de decisió
- Màquines de suport vectorial (SVM)
- K-Veïns més propers (K-NN)
- Xarxes neuronals
Mòdul 5: Algoritmes de Machine Learning No Supervisat
- Clustering: K-means
- Clustering jeràrquic
- Anàlisi de components principals (PCA)
- Anàlisi d'agrupament DBSCAN
Mòdul 6: Avaluació i Validació de Models
Mòdul 7: Tècniques Avançades i Optimització
- Ensemble Learning
- Gradient Boosting
- Xarxes neuronals profundes (Deep Learning)
- Optimització d'hiperparàmetres
Mòdul 8: Implementació i Desplegament de Models
- Frameworks i biblioteques populars
- Implementació de models en producció
- Manteniment i monitoratge de models
- Consideracions ètiques i de privacitat
Mòdul 9: Projectes Pràctics
- Projecte 1: Predicció de preus d'habitatges
- Projecte 2: Classificació d'imatges
- Projecte 3: Anàlisi de sentiments a xarxes socials
- Projecte 4: Detecció de fraus