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

  1. 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.

  1. 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.

  1. 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.

  1. 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

  1. 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.

  1. 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ó.

  1. 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

  1. Carrega el conjunt de dades Iris.
  2. Divideix el conjunt de dades en entrenament i prova.
  3. Entrena un model SVM amb un kernel lineal.
  4. 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

  1. Entrena un model SVM amb un kernel polinòmic.
  2. Entrena un model SVM amb un kernel RBF.
  3. 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

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algoritmes de Machine Learning Supervisat

Mòdul 5: Algoritmes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2024. Tots els drets reservats