如何绘制SVM分类超平面

时间:2016-03-31 18:52:16

标签: r machine-learning svm libsvm

以下是我的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")

我的示例中的功能是一个给出两个级别(true或false)的因子。我想 绘制我的svm分类器的图形并将它们分成两组。一组 那些有&#34;真&#34;而另一组则是假的。我们如何生成3D2D SVM图?我尝试使用plot(svm.fit, train),但它似乎并不适合我。 我在SO上找到了这个答案,但我不清楚tx, y, zwcl在答案中的含义。

Plotting data from an svm fit - hyperplane

我的数据集中有大约50个功能,最后一列是一个因素。任何简单的方法或任何一个可以帮助我解释他的答案。

1 个答案:

答案 0 :(得分: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/

然而,这仅显示点投影及其分类 - 您无法看到超平面,因为它是高维度对象(在您的情况下是49维)并且在这种投影中这个超平面将是......整个屏幕。完全没有像素会留在“外面”(在这个术语中考虑它 - 如果你有3D空间和超平面,这将是2D平面..现在如果你试图在1D中绘制它你将最终得到整行用你的超平面“填充”,因为无论你在3D中放置一条线,在这条线上投影2D平面都会填满它!唯一的另一种可能性是线是垂直的,然后投影是一个点;同样适用于此 - 如果您尝试将49维超平面投影到3D上,您将最终得到整个屏幕“黑色”)。