L'objectiu principal d'una màquina de vectors de suport (SVM) en el context de l'aprenentatge automàtic és trobar l'hiperpla òptim que separi els punts de dades de diferents classes amb el màxim marge. Això implica resoldre un problema d'optimització quadràtica per assegurar-se que l'hiperpla no només separa les classes, sinó que ho fa amb la major distància possible entre els punts de dades més propers de qualsevol classe, coneguts com a vectors de suport, i el propi hiperpla.
Explicació detallada
El concepte d'hiperplans i marges
En un problema de classificació binària, on l'objectiu és classificar els punts de dades en una de dues classes, un hiperpla és un subespai afí pla d'una dimensió menys que el seu espai ambiental. Per exemple, en un espai bidimensional, l'hiperpla és una línia, mentre que en un espai tridimensional, és un pla. L'equació d'un hiperpla en un espai n-dimensional es pot expressar com:
where és el vector normal de l'hiperpla,
és un punt de l'hiperpla, i
és el terme biaix.
El marge és la distància entre l'hiperpla i el punt de dades més proper de qualsevol de les classes. L'objectiu de SVM és maximitzar aquest marge, que es pot expressar matemàticament com:
Problema d'optimització
Per aconseguir-ho, SVM resol el següent problema d'optimització:
1. Formulació primària:
Aquí, representa l'etiqueta de classe del punt de dades i-è, que pot ser +1 o -1, i
representa l'i-è punt de dades.
2. Formulació dual:
El problema principal es pot transformar en la seva forma dual mitjançant multiplicadors de Lagrange, que sovint és més fàcil de resoldre:
Aquí, són els multiplicadors de Lagrange, i
és el paràmetre de regularització que controla la compensació entre maximitzar el marge i minimitzar l'error de classificació.
Truc del nucli
En molts escenaris pràctics, les dades no es poden separar linealment en el seu espai de característiques original. Per solucionar-ho, SVM utilitza el truc del nucli, que consisteix a mapejar les dades originals en un espai de característiques de dimensions superiors on esdevinguin separables linealment. Els nuclis utilitzats habitualment inclouen:
- Nucli lineal:
- Nucli polinomial:
- Nucli de la funció de base radial (RBF):
- Nucli sigmoide:
La funció del nucli calcula el producte intern a l'espai de les característiques transformades sense realitzar explícitament la transformació, fent així el càlcul més eficient.
Implementant SVM des de zero a Python
Per implementar SVM des de zero, cal seguir aquests passos:
1. Paràmetres d'inicialització:
– Inicialitzar el vector pes i biaix
.
– Estableix la taxa d'aprenentatge i el nombre d'iteracions per a l'entrenament.
2. Calcula el gradient:
– Per a cada punt de dades, calculeu el gradient de la funció de pèrdua respecte a i
.
3. Paràmetres d'actualització:
– Actualització i
utilitzant el descens del gradient o qualsevol altre algorisme d'optimització.
4. Prediu les etiquetes de classe:
– Utilitzar allò après i
per predir les etiquetes de classe de nous punts de dades.
Aquí teniu un exemple simplificat d'implementació d'un SVM lineal des de zero a Python:
python import numpy as np class SVM: def __init__(self, learning_rate=0.001, lambda_param=0.01, n_iters=1000): self.learning_rate = learning_rate self.lambda_param = lambda_param self.n_iters = n_iters self.w = None self.b = None def fit(self, X, y): n_samples, n_features = X.shape y_ = np.where(y <= 0, -1, 1) self.w = np.zeros(n_features) self.b = 0 for _ in range(self.n_iters): for idx, x_i in enumerate(X): condition = y_[idx] * (np.dot(x_i, self.w) - self.b) >= 1 if condition: self.w -= self.learning_rate * (2 * self.lambda_param * self.w) else: self.w -= self.learning_rate * (2 * self.lambda_param * self.w - np.dot(x_i, y_[idx])) self.b -= self.learning_rate * y_[idx] def predict(self, X): approx = np.dot(X, self.w) - self.b return np.sign(approx) # Example usage if __name__ == "__main__": X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]) y = np.array([0, 0, 1, 1, 1]) clf = SVM() clf.fit(X, y) predictions = clf.predict(X) print(predictions)
Aplicacions del món real
Les màquines de vectors de suport s'han aplicat amb èxit en diversos dominis a causa de la seva capacitat per manejar dades d'alta dimensió i la seva robustesa contra el sobreajustament, especialment en els casos en què el nombre de dimensions supera el nombre de mostres. Algunes aplicacions notables inclouen:
- Classificació del text: Els SVM s'utilitzen àmpliament en tasques de classificació de text, com ara la detecció de correu brossa i l'anàlisi de sentiments, a causa de la seva eficàcia en el maneig de dades escasses i d'alta dimensió.
- Reconeixement d'imatges: En visió per computador, els SVM s'utilitzen per a tasques de detecció d'objectes i classificació d'imatges, aprofitant la seva capacitat per treballar amb funcions del nucli per gestionar relacions no lineals.
- Bioinformàtica: Els SVM s'utilitzen per classificar gens, proteïnes i altres dades biològiques, on les dades sovint són complexes i de gran dimensió.
- Reconeixement d'escriptura a mà: Els SVM també s'apliquen en sistemes de reconeixement òptic de caràcters (OCR) per classificar caràcters escrits a mà.
Avantatges i inconvenients
Avantatges:
- Eficaç en grans dimensions: Els SVM funcionen bé en espais d'alta dimensió i són efectius fins i tot quan el nombre de dimensions supera el nombre de mostres.
- Eficiència de memòria: Només un subconjunt de punts d'entrenament (vectors de suport) s'utilitza en la funció de decisió, fent que la memòria SVM sigui eficient.
- Versatilitat: Mitjançant l'ús de diferents funcions del nucli, els SVM es poden adaptar a diversos tipus de dades i problemes de classificació.
Desavantatges:
- Temps d'entrenament: Els SVM poden ser computacionalment intensius i lents d'entrenar, especialment amb grans conjunts de dades.
- Elecció del nucli: El rendiment dels SVM depèn en gran mesura de l'elecció del nucli i dels paràmetres, que poden requerir una gran experimentació i validació creuada.
- Interpretabilitat: El model resultant sovint és menys interpretable en comparació amb altres algorismes com els arbres de decisió.
L'objectiu principal d'una màquina de vectors de suport és trobar l'hiperplà òptim que maximitzi el marge entre diferents classes, garantint una classificació robusta i precisa. Això s'aconsegueix resolent un problema d'optimització quadràtica i, si cal, emprant el truc del nucli per manejar dades no lineals. Els SVM han demostrat la seva eficàcia en diverses aplicacions del món real, tot i que tenen el seu propi conjunt de reptes i consideracions.
Altres preguntes i respostes recents sobre Completar SVM des de zero:
- 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?