首页 文章

如何使用e1071计算数据点到svm创建的决策超平面的距离

提问于
浏览
1

我使用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中也是如此 .

1 回答

  • 1

    您可以从预测中获取决策值

    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")
    

    它返回一个值矩阵 .

    有关更多信息,请阅读 ?predict.svm 的帮助页面

相关问题