如何使用 e1071 计算数据点到 svm 创建的决策超平面的距离
How to calculate the distance of a data point to a decision hyperplane created by svm using e1071
我使用 e1071 包创建了一个预测 2 类 的线性模型。我现在可以预测类,但我还想知道每个预测到决策超平面的距离
此代码对鸢尾花数据进行子集化,创建训练集和预测集:
# The data should have 2 factors, such that there is only 1 hyperplane
iris.subset <- subset(iris, iris$Species %in% c("versicolor", "virginica"))
iris.subset$Species <- as.factor(as.character(iris.subset$Species))
# Random sampling for training data
training.data <- iris.subset[sample(1:nrow(iris.subset), 50, replace=FALSE),]
# Remaining samples make up the prediction data
prediction.data <- iris.subset[!(rownames(iris.subset) %in% rownames(training.data)),]
此代码适合模型。:
require(e1071)
svmfit <- svm(Species~., data=training.data, kernel="linear")
从预测集中预测 5 个样本:
predict(svmfit, prediction.data[sample(1:nrow(prediction.data), 5, replace=FALSE),])
这给了我类。现在,我想计算这些点到超平面的距离。我该怎么做?
Here 是同类未回答的问题,但在 Matlab 中。
Here 是另一个可能有帮助的页面,但同样是在 Matlab 中。
您可以使用
从预测中获取决策值
dd <- prediction.data[sample(1:nrow(prediction.data), 5, replace=FALSE),]
pred <- predict(svmfit, dd, decision.value=T)
pred
# 112 139 87 108 70
# virginica virginica versicolor virginica versicolor
# attr(,"decision.values")
# virginica/versicolor
# 112 1.9830355
# 139 0.4160704
# 87 -1.2680673
# 108 2.7181950
# 70 -2.6954507
这些值在属性中返回。您可以使用
更直接地访问数据
attr(pred, "decision.values")
其中 returns 值矩阵。
有关详细信息,您可以阅读 ?predict.svm
的帮助页面
我使用 e1071 包创建了一个预测 2 类 的线性模型。我现在可以预测类,但我还想知道每个预测到决策超平面的距离
此代码对鸢尾花数据进行子集化,创建训练集和预测集:
# The data should have 2 factors, such that there is only 1 hyperplane
iris.subset <- subset(iris, iris$Species %in% c("versicolor", "virginica"))
iris.subset$Species <- as.factor(as.character(iris.subset$Species))
# Random sampling for training data
training.data <- iris.subset[sample(1:nrow(iris.subset), 50, replace=FALSE),]
# Remaining samples make up the prediction data
prediction.data <- iris.subset[!(rownames(iris.subset) %in% rownames(training.data)),]
此代码适合模型。:
require(e1071)
svmfit <- svm(Species~., data=training.data, kernel="linear")
从预测集中预测 5 个样本:
predict(svmfit, prediction.data[sample(1:nrow(prediction.data), 5, replace=FALSE),])
这给了我类。现在,我想计算这些点到超平面的距离。我该怎么做?
Here 是同类未回答的问题,但在 Matlab 中。 Here 是另一个可能有帮助的页面,但同样是在 Matlab 中。
您可以使用
从预测中获取决策值dd <- prediction.data[sample(1:nrow(prediction.data), 5, replace=FALSE),]
pred <- predict(svmfit, dd, decision.value=T)
pred
# 112 139 87 108 70
# virginica virginica versicolor virginica versicolor
# attr(,"decision.values")
# virginica/versicolor
# 112 1.9830355
# 139 0.4160704
# 87 -1.2680673
# 108 2.7181950
# 70 -2.6954507
这些值在属性中返回。您可以使用
更直接地访问数据attr(pred, "decision.values")
其中 returns 值矩阵。
有关详细信息,您可以阅读 ?predict.svm