Cílem problému optimalizace Support Vector Machine (SVM) je najít nadrovinu, která nejlépe rozděluje sadu datových bodů do odlišných tříd. Tohoto oddělení je dosaženo maximalizací okraje, definovaného jako vzdálenost mezi nadrovinou a nejbližšími datovými body z každé třídy, známé jako podpůrné vektory. Algoritmus SVM si klade za cíl vytvořit model, který dokáže dobře zobecnit na neviditelná data tím, že se zaměří na tyto kritické body.
Matematicky lze problém optimalizace SVM formulovat v kontextu problému binární klasifikace, kde je cílem rozdělit datové body do dvou tříd, obvykle označených jako +1 a -1. Datové body jsou reprezentovány jako vektory v n-rozměrném prostoru prvků. Označme trénovací datovou sadu jako , Kde
představuje příznakový vektor i-tého datového bodu a
představuje odpovídající označení třídy.
Problém lineární optimalizace SVM lze formulovat následovně:
1. Primární složení:
Cílem je najít nadrovinu definovanou váhovým vektorem a zaujatý termín
což maximalizuje rezervu při správné klasifikaci trénovacích dat. Nadrovinu lze znázornit rovnicí
.
Optimalizační problém lze vyjádřit takto:
s výhradou omezení:
Zde, je kvadratická norma vektoru hmotnosti, kterou se snažíme minimalizovat, abychom maximalizovali rozpětí. Omezení zajišťují, že každý datový bod je správně klasifikován a leží na správné straně okraje.
2. Duální složení:
Prvotní problém lze převést do jeho duální podoby pomocí Lagrangeových multiplikátorů. Duální formulace je v praxi často preferována, protože umožňuje použití funkcí jádra ke zpracování nelineárních rozhodovacích hranic.
Problém duální optimalizace je formulován takto:
s výhradou omezení:
Zde, jsou Lagrangeovy multiplikátory a
je regularizační parametr, který řídí kompromis mezi maximalizací marže a minimalizací chyby klasifikace. Funkce jádra
umožňuje algoritmu pracovat ve vysokorozměrném prostoru prvků bez explicitního výpočtu souřadnic dat v tomto prostoru.
3. Nelineární SVM:
Ke zpracování nelineárních separací se používá jádrový trik. Myšlenkou je mapování původního prostoru rysů do vícerozměrného prostoru pomocí nelineární mapovací funkce . Funkce jádra
představuje vnitřní produkt v tomto vyšší dimenzionálním prostoru, tzn.
.
Mezi běžně používané funkce jádra patří:
- Lineární jádro:
- Polynomiální jádro: , Kde
je stupeň polynomu.
- Jádro funkce radiální báze (RBF): , Kde
je parametr, který definuje šířku Gaussovy funkce.
- Sigmoidní jádro: , Kde
si
jsou parametry sigmoidní funkce.
Problém duální optimalizace pro nelineární SVM zůstává stejný jako v lineárním případě, ale s funkcí jádra výměna vnitřního produktu
.
4. Měkká marže SVM:
Ve scénářích reálného světa nemusí být data dokonale oddělitelná. Pro řešení takových případů je zaveden koncept měkkého rozpětí. SVM s měkkým okrajem umožňuje určitou chybnou klasifikaci zavedením proměnných nevyužitých hodnot pro každý datový bod.
Primární optimalizační problém pro SVM s měkkým okrajem je formulován jako:
s výhradou omezení:
Tady termín penalizuje nesprávně klasifikované body a
je regularizační parametr, který řídí kompromis mezi maximalizací marže a minimalizací chyby klasifikace.
Duální formulace pro SVM s měkkým rozpětím je podobná případu s pevným rozpětím, s omezeními na Lagrangeových multiplikátorech upraveno tak, aby zahrnovalo parametr regularizace
:
5. Příklad:
Zvažte jednoduchý příklad s dvourozměrnou datovou sadou sestávající ze dvou tříd. Datové body jsou:
Třída +1: ,
,
Třída -1: ,
,
Cílem je najít nadrovinu, která nejlépe odděluje tyto dvě třídy. Pro jednoduchost předpokládejme lineární SVM s pevným okrajem. Primární optimalizační problém lze formulovat takto:
s výhradou omezení:
Řešením tohoto optimalizačního problému se získá vektor hmotnosti a zkreslení
které definují optimální nadrovinu. Podpěrné vektory, což jsou datové body nejblíže k nadrovině, určují okraj.
V praxi jsou SVM implementovány pomocí optimalizačních knihoven, které efektivně řeší duální formulaci. V Pythonu knihovna `scikit-learn` poskytuje implementaci SVM prostřednictvím třídy `SVC`, která dokáže pracovat s lineárními i nelineárními jádry.
Například pro trénování SVM s lineárním jádrem pomocí `scikit-learn` lze použít následující kód:
python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Load a sample dataset iris = datasets.load_iris() X = iris.data y = iris.target # Use only two classes for binary classification X = X[y != 2] y = y[y != 2] # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Create an SVM classifier with a linear kernel svm = SVC(kernel='linear', C=1.0) # Train the SVM classifier svm.fit(X_train, y_train) # Make predictions on the test set y_pred = svm.predict(X_test) # Evaluate the accuracy of the classifier accuracy = accuracy_score(y_test, y_pred) print(f'Accuracy: {accuracy:.2f}')
V tomto příkladu je třída `SVC` použita k vytvoření klasifikátoru SVM s lineárním jádrem. Klasifikátor je natrénován na trénovací sadě a vyhodnocen na testovací sadě, přičemž přesnost předpovědí je vytištěna na konzole.
Problém optimalizace SVM je základním aspektem strojového učení a poskytuje robustní a všestrannou metodu pro klasifikační úlohy. Maximalizací marže se SVM zaměřují na dosažení dobrého výkonu zobecnění, což z nich činí cenný nástroj v různých aplikacích.
Další nedávné otázky a odpovědi týkající se Strojové učení EITC/AI/MLP s Pythonem:
- Jak se vypočítá parametr b v lineární regresi (průsečík y nejlépe vyhovující přímky)?
- Jakou roli hrají podpůrné vektory při definování rozhodovací hranice SVM a jak jsou identifikovány během tréninkového procesu?
- 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í?
- Jak lze knihovny, jako je scikit-learn, použít k implementaci klasifikace SVM v Pythonu a jaké klíčové funkce jsou obsaženy?
- Vysvětlete význam omezení (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) v optimalizaci SVM.
- Jak závisí klasifikace sady prvků v SVM na znaménku rozhodovací funkce (text{sign}(mathbf{x}_i cdot mathbf{w} + b))?
- Jakou roli hraje rovnice nadroviny (mathbf{x} cdot mathbf{w} + b = 0) v kontextu Support Vector Machines (SVM)?
Prohlédněte si další otázky a odpovědi v EITC/AI/MLP Machine Learning with Python