以下是我的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;而另一组则是假的。我们如何生成3D
或2D
SVM图?我尝试使用plot(svm.fit, train)
,但它似乎并不适合我。
我在SO上找到了这个答案,但我不清楚t
,x, y, z
,w
和cl
在答案中的含义。
Plotting data from an svm fit - hyperplane
我的数据集中有大约50个功能,最后一列是一个因素。任何简单的方法或任何一个可以帮助我解释他的答案。
答案 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")
给出了
有关更多示例,您可以参考项目网站http://r.gmum.net/
然而,这仅显示点投影及其分类 - 您无法看到超平面,因为它是高维度对象(在您的情况下是49维)并且在这种投影中这个超平面将是......整个屏幕。完全没有像素会留在“外面”(在这个术语中考虑它 - 如果你有3D空间和超平面,这将是2D平面..现在如果你试图在1D中绘制它你将最终得到整行用你的超平面“填充”,因为无论你在3D中放置一条线,在这条线上投影2D平面都会填满它!唯一的另一种可能性是线是垂直的,然后投影是一个点;同样适用于此 - 如果您尝试将49维超平面投影到3D上,您将最终得到整个屏幕“黑色”)。