这是我的 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 分类器的图表,并将它们分为两组。一组
一组为“真”,另一组为假。我们如何生成 3D
或 2D
SVM 图?我尝试使用 plot(svm.fit, train)
但它似乎不适合我。
我在 SO 上找到了这个答案,但我不清楚 t
、x、y、z
、w
和 是什么cl
在答案中。
Plotting data from an svm fit - hyperplane
我的数据集中有大约 50 个特征,其中最后一列是一个因素。任何简单的方法,或者是否有人可以帮助我解释他的答案。
最佳答案
简短的回答是:你不能。您的数据是 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 上,您最终会得到整个屏幕“黑色”)。
关于r - 如何绘制 SVM 分类超平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36341381/