2016-03-31 5 views
0

Вот мой пример кода для классификации SVM.Как построить график гиперметрия SVM

train <- read.csv("traindata.csv") 
    test <- read.csv("testdata.csv") 

    svm.fit=svm(as.factor(value)~ ., data=train, kernel="linear", method="class") 

    svm.pred = predict(svm.fit,test,type="class") 

Значение Функция в моем примере это фактор, который дает два уровня (либо истинным или ложным). Я хотел, чтобы построил график моего классификатора svm и сгруппировал их по двум группам. Одна группа те, у кого «истина», а другая группа - ложная. Как мы производим график SVM 3D или 2D SVM? Я пробовал с plot(svm.fit, train), но, похоже, для меня это не сработало. Существует такой ответ, который я нашел на SO, но я не знаю, с чем t, x, y, z, w и cl находятся в ответе.

Plotting data from an svm fit - hyperplane

У меня есть около 50 функций в моем наборе данных, который последний столбец является фактором. Любой простой способ сделать это, или если кто-нибудь может помочь мне объяснить его ответ.

ответ

1

Короткий ответ: вы не можете. Ваши данные имеют размер 50. Вы не можете построить 50 измерений. Единственное, что вы можете сделать, это приблизительные приближения, сокращения и прогнозы, но ни одно из них не может фактически представлять, что происходит внутри. Для построения границы 2D/3D-данных ваши данные должны быть 2D/3D (2 или 3 функции, что именно происходит в предоставляемой ссылке - у них есть только 3 функции, чтобы они могли отображать их все). С 50 функциями вы остаетесь со статистическим анализом, без фактического визуального осмотра.

Возможно, вы можете взглянуть на некоторые фрагменты (выберите 3 функции или основные компоненты проекций PCA). Если вы не знакомы с базовой линейной алгеброй, вы можете просто использовать gmum.r package, который сделает это за вас. Просто тренируйте svm и запишите его, чтобы заставить «pca» визуализацию, как здесь: http://r.gmum.net/samples/svm.basic.html.

library(gmum.r) 

# We will perform basic classification on breast cancer dataset 
# using LIBSVM with linear kernel 
data(svm_breast_cancer_dataset) 

# We can pass either formula or explicitly X and Y 
svm <- SVM(X1 ~ ., svm.breastcancer.dataset, core="libsvm", kernel="linear", C=10) 
## optimization finished, #iter = 8980 
pred <- predict(svm, svm.breastcancer.dataset[,-1]) 

plot(svm, mode="pca") 

который дает

SVM visualization

больше примеров можно сослаться на веб-сайт проекта http://r.gmum.net/

Однако это только показывает баллы, projetions и их классификация - вы не можете видеть гиперплоскость, потому что она является высокомерным объектом (в вашем случае 49-мерным), и в такой проекции эта гиперплоскость будет ... целым экраном. Точно, ни один пиксель не останется «снаружи» (подумайте об этом в этих терминах - если у вас есть 3D-пространство и гиперплоскость внутри, это будет 2D-плоскость .. теперь, если вы попытаетесь построить его в 1D, вы получите всю строку «заполнен» вашей гиперплоскостью, потому что независимо от того, где вы размещаете линию в 3D, проекция 2D-плоскости на эту линию заполняет ее! Единственная другая возможность заключается в том, что линия перпендикулярна, а затем проекция является одной точкой; то же самое применимо здесь - если вы попытаетесь спроектировать 49-мерную гиперплоскость на 3D, вы получите весь экран «черный»).

+0

Могу ли я использовать «поезд» вместо 'svm_breast_cancer_dataset'? – Mahsolid

+1

Точно. Вы не сможете отображать границы решения в ** любом реальном наборе данных **. Это возможно только для наборов игрушек, которые имеют до 3 функций. Для реальных данных вы все еще можете что-то визуализировать (как описано в ответе), но не фактическую гиперплоскость – lejlot

+0

Пройдите основные принципы вызова svm на свои данные, все описано в предоставленной ссылке. – lejlot