如何绘制 SVM 分类超平面
Posted
技术标签:
【中文标题】如何绘制 SVM 分类超平面【英文标题】:How to plot SVM classification hyperplane 【发布时间】:2016-07-20 09:04:11 【问题描述】:这是我的 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")
我的示例中的特征 value 是一个给出两个级别(真或假)的因素。我想
绘制我的 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")
给了
更多示例可以参考项目网站http://r.gmum.net/
但是,这仅显示点投影及其分类-您看不到超平面,因为它是高维对象(在您的情况下为 49 维),在这种投影中,该超平面将是……整个屏幕。完全没有像素会留在“外面”(用这个术语来考虑 - 如果你有 3D 空间和内部超平面,这将是 2D 平面。现在如果你尝试以 1D 绘制它,你最终会得到整条线用你的超平面“填充”,因为无论你在 3D 中将一条线放在哪里,这条线上的 2D 平面的投影都会把它填满!唯一的另一种可能性是这条线是垂直的,然后投影是一个点;此处同样适用 - 如果您尝试将 49 维超平面投影到 3D 上,您最终会得到整个屏幕“黑色”)。
【讨论】:
我不能用“train”代替svm_breast_cancer_dataset
吗?
没错。您将无法在任何现实生活数据集中绘制决策边界。这仅适用于具有多达 3 个特征的玩具数据集。对于真实数据 - 您仍然可以可视化某些东西(如答案中所述) - 但不是实际的超平面
了解在数据上调用 svm 的基础知识,所有内容都在提供的链接中进行了描述。
这与链接上给出的示例相同,您可以在此处看到:r.gmum.net/svm :'(
这里是仅使用矩阵的示例:r.gmum.net/samples/svm.example.weights.html,只需将 x 和 y 替换为您自己的火车数据(x 的特征,y 的标签),删除“权重”,并使用“ pca”模式而不是绘图中的“轮廓”以上是关于如何绘制 SVM 分类超平面的主要内容,如果未能解决你的问题,请参考以下文章