Support Vector Machines (SVM) jsou třídou řízených výukových modelů používaných pro klasifikaci a regresní analýzu. Základním konceptem SVM je najít optimální nadrovinu, která nejlépe odděluje datové body různých tříd. Podporové vektory jsou důležitými prvky při definování této rozhodovací hranice. Tato odpověď objasní roli podpůrných vektorů v SVM, jejich identifikaci během tréninkového procesu a poskytne komplexní pochopení jejich významu.
Role podpůrných vektorů při definování hranice rozhodování
V SVM je rozhodovací hranice nadrovina, která odděluje třídy datových bodů. Optimální nadrovina je ta, která maximalizuje rozpětí mezi třídami. Okraj je definován jako vzdálenost mezi nadrovinou a nejbližšími datovými body z obou tříd. Tyto nejbližší datové body jsou známé jako podpůrné vektory. Jsou stěžejní, protože přímo ovlivňují polohu a orientaci nadroviny.
1. Maximalizace marže: Primárním cílem SVM je maximalizovat rozpětí mezi třídami. Okraj je definován vzdáleností k nejbližším vektorům podpory. Maximalizací této rezervy má SVM za cíl zlepšit schopnost zobecnění modelu, a tím snížit pravděpodobnost nadměrného vybavení.
2. Definování nadroviny: Rovnici nadroviny ve dvourozměrném prostoru lze zapsat jako , Kde
je vektor hmotnosti,
je vstupní vektor a
je termín zkreslení. Podpěrné vektory jsou datové body, které leží nejblíže nadrovině a splňují podmínku
, Kde
je označení třídy podpůrného vektoru
. Tyto body jsou kritické, protože definují parametry
si
nadroviny.
3. Ovlivňování hranice rozhodování: Pokud se vektory podpory posunou, změní se poloha nadroviny. Je to proto, že podpůrné vektory jsou body, které se používají k výpočtu okraje. Ostatní datové body, které nejsou podpůrnými vektory, neovlivňují hranici rozhodování tak přímo.
Identifikace podpůrných vektorů během tréninku
Tréninkový proces SVM zahrnuje řešení problému kvadratické optimalizace s omezeními. Cílem je najít vektor hmotnosti a zaujatost
které maximalizují rezervu při správné klasifikaci trénovacích dat. To lze formulovat takto:
Tento problém optimalizace lze vyřešit pomocí technik, jako je algoritmus sekvenční minimální optimalizace (SMO) nebo pomocí řešičů kvadratického programování. Během tohoto procesu jsou podpůrné vektory identifikovány následovně:
1. Lagrangeovy multiplikátory: Problém optimalizace se často řeší pomocí metody Lagrangeových multiplikátorů. Duální forma optimalizačního problému zavádí Lagrangeovy multiplikátory pro každé omezení. Duální problém je dán takto:
kde je regularizační parametr, který řídí kompromis mezi maximalizací marže a minimalizací chyby klasifikace.
2. Podpora vektorové identifikace: Podpůrné vektory jsou datové body, pro které odpovídají Lagrangeovy multiplikátory jsou nenulové. Tyto body leží na okraji a splňují podmínku
. Vektor hmotnosti
lze vyjádřit pomocí podpůrných vektorů jako:
3. Výpočet doby zkreslení: Termín zkreslení se vypočítá pomocí podpůrných vektorů. Pro jakýkoli vektor podpory
, zkreslení lze vypočítat jako:
To zajišťuje, že nadrovina správně klasifikuje vektory podpory.
Příklad
Zvažte jednoduchou dvourozměrnou datovou sadu se dvěma třídami. Datové body mohou být reprezentovány následovně:
Třída 1:
Třída 2:
Cílem SVM je najít optimální nadrovinu, která odděluje tyto dvě třídy. Během tréninkového procesu SVM identifikuje vektory podpory, které jsou nejbližšími body k nadrovině. V tomto případě mohou být podpůrné vektory ze třídy 1 a
ze třídy 2. Tyto body budou použity k definování nadroviny a výpočtu okraje.
Matematická formulace
Primární forma problému optimalizace SVM je:
Duální forma je:
Podporné vektory jsou identifikovány nenulovými Lagrangeovými multiplikátory . Vektor hmotnosti
se počítá jako:
Termín zkreslení se vypočítá pomocí podpůrných vektorů:
Implementace v Pythonu
Chcete-li implementovat SVM od nuly v Pythonu, postupujte takto:
1. Příprava dat: Načtěte a předzpracujte datovou sadu.
2. Funkce jádra: Definujte funkci jádra (např. lineární, polynomiální, RBF).
3. Optimalizace: Vyřešte problém duální optimalizace pomocí řešení kvadratického programování nebo iterativního algoritmu, jako je SMO.
4. Podpora vektorové identifikace: Identifikujte vektory podpory na základě Lagrangeových multiplikátorů.
5. Výpočet nadroviny: Vypočtěte vektor hmotnosti a zkreslení
.
6. Předpověď: Použijte nadrovinu ke klasifikaci nových datových bodů.
Zde je zjednodušená implementace lineárního SVM od nuly:
python import numpy as np from cvxopt import matrix, solvers class SVM: def __init__(self, C=1.0): self.C = C self.w = None self.b = None self.support_vectors = None def fit(self, X, y): n_samples, n_features = X.shape # Calculate the Gram matrix K = np.dot(X, X.T) # Set up the parameters for the quadratic programming solver P = matrix(np.outer(y, y) * K) q = matrix(-np.ones(n_samples)) G = matrix(np.vstack((-np.eye(n_samples), np.eye(n_samples)))) h = matrix(np.hstack((np.zeros(n_samples), np.ones(n_samples) * self.C))) A = matrix(y, (1, n_samples), 'd') b = matrix(0.0) # Solve the quadratic programming problem solution = solvers.qp(P, q, G, h, A, b) alphas = np.ravel(solution['x']) # Identify the support vectors support_vector_indices = alphas > 1e-5 self.support_vectors = X[support_vector_indices] self.alphas = alphas[support_vector_indices] self.sv_y = y[support_vector_indices] # Calculate the weight vector self.w = np.sum(self.alphas[:, None] * self.sv_y[:, None] * self.support_vectors, axis=0) # Calculate the bias term self.b = np.mean(self.sv_y - np.dot(self.support_vectors, self.w)) def predict(self, X): return np.sign(np.dot(X, self.w) + self.b) # Example usage X = np.array([[1, 2], [2, 3], [3, 3], [6, 6], [7, 7], [8, 8]]) y = np.array([-1, -1, -1, 1, 1, 1]) svm = SVM(C=1.0) svm.fit(X, y) predictions = svm.predict(X) print(predictions)
V tomto příkladu třída `SVM` definuje model SVM a metoda `fit` trénuje model řešením problému duální optimalizace. Podpůrné vektory se identifikují na základě Lagrangeových multiplikátorů a podle toho se vypočítá vektor váhy a člen zkreslení. Ke klasifikaci nových datových bodů se pak použije metoda `predict`. Podpůrné vektory hrají klíčovou roli při definování rozhodovací hranice SVM. Jsou to datové body, které leží nejblíže nadrovině a přímo ovlivňují její polohu a orientaci. Během tréninkového procesu se pomocí optimalizace funkce cíle SVM identifikují podpůrné vektory a použijí se k výpočtu vektoru hmotnosti a členu zkreslení, které definují nadrovinu. Pochopení významu vektorů podpory je zásadní pro pochopení toho, jak SVM dosahují svých klasifikačních cílů, a pro implementaci SVM od nuly v Pythonu.
Další nedávné otázky a odpovědi týkající se Dokončení SVM od nuly:
- Jaký je v kontextu optimalizace SVM význam váhového vektoru `w` a zkreslení `b` a jak se určují?
- Jaký je účel metody `vizualizovat` v implementaci SVM a jak pomáhá pochopit výkon modelu?
- Jak metoda `předpovědět` v implementaci SVM určuje klasifikaci nového datového bodu?
- Jaký je primární cíl stroje podpory vektorů (SVM) v kontextu strojového učení?