Изменения

Перейти к: навигация, поиск

Метод опорных векторов (SVM)

2946 байт добавлено, 01:59, 29 ноября 2020
Пример на языке R
'''Метод опорных векторов''' (англ. ''support vector machine'', ''SVM'') — один из наиболее популярных методов обучения, который применяется для решения задач классификации и регрессии. Основная идея метода заключается в построении гиперплоскости, разделяющей объекты выборки наиболее оптимальным способом. Алгоритм работает в предположении, что чем больше расстояние (зазор) между разделяющей гиперплоскостью и объектами разделяемых классов, тем меньше будет средняя ошибка классификатора.
== Метод опорных векторов в задаче классификации ==
* [https://arxiv.org/abs/1901.09643v1 Support Features Machine (SFM)]
* [http://www.robots.ox.ac.uk/~minhhoai/papers/SVMFeatureWeight_PR.pdf Relevance Features Machine (RFM)]
 
==Примеры кода==
===Пример на языке Java===
Пример классификации с применением <code>smile.classification.SVM</code><ref>[https://haifengl.github.io/smile/api/java/smile/classification/SVM.html/ Smile, SVM]</ref>
 
<code>Maven</code> зависимость:
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-core</artifactId>
<version>1.5.2</version>
</dependency>
 
'''import''' smile.classification.SVM;
'''import''' smile.data.NominalAttribute;
'''import''' smile.data.parser.DelimitedTextParser;
'''import''' smile.math.kernel.GaussianKernel;
'''import''' java.util.Arrays;
 
<font color="green">// read train & test dataset</font>
'''var''' parser = new DelimitedTextParser();
parser.setResponseIndex(new NominalAttribute("class"), 0);
'''var''' train = parser.parse("USPS Train", this.getClass().getResourceAsStream("/smile/data/usps/zip.train"));
'''var''' test = parser.parse("USPS Test", this.getClass().getResourceAsStream("/smile/data/usps/zip.test"));
'''var''' classes = Arrays.stream(test.labels()).max().orElse(0) + 1;
<font color="green">// build SVM classifier</font>
'''var''' svm = new SVM<>(new GaussianKernel(8.0), 5.0, classes, SVM.Multiclass.ONE_VS_ONE);
svm.learn(train.x(), train.labels());
svm.finish();
<font color="green">// calculate test error rate</font>
'''var''' error = 0;
for (int i = 0; i < test.x().length; i++) {
if (svm.predict(test.x()[i]) != test.labels()[i]) {
error++;
}
}
System.out.format("USPS error rate = %.2f%%\n", 100.0 * error / test.x().length);
 
=== Пример на языке R ===
{{Main|Примеры кода на R}}
 
<font color="gray"># importing package and its' dependencies</font>
library(caret)
<font color="gray">#reading data</font>
data <- read.csv(<font color="green">"input.csv"</font>, <font color="#660099">sep</font> = <font color="green">','</font>, <font color="#660099">header</font> = FALSE)
<font color="gray"># splitting data into train and test sets</font>
index <- createDataPartition(<font color="#660099">y</font> = data$<strong><font color="#660E7A">target</font></strong>, <font color="#660099">p</font> = <font color="blue">0.8</font>, <font color="#660099">list</font> = FALSE)
training <- data[index,]
testing <- data[-index,]
<font color="gray"># evaluating model</font>
fit <- train(target ~ x + y + z,
<font color="#660099">data</font> = train_flats,
<font color="#660099">method</font> = <font color="green">"svmRadial"</font>,
<font color="#660099">trControl</font> = trainControl(<font color="#660099">method</font> = <font color="green">"repeatedcv"</font>, <font color="#660099">number</font> = <font color="blue">10</font>, <font color="#660099">repeats</font> = <font color="blue">3</font>))
<font color="gray"># printing parameters</font>
print(fit)
== См. также ==
286
правок

Навигация