【发布时间】:2018-12-05 22:11:26
【问题描述】:
我正在iris 数据上试验SVM 函数。目标是从输出矩阵attr(pred_prob, "probabilities") 中提取 (1) 每一行 (2) 的最高预测概率的“类别”。
data(iris)
attach(iris)
x <- subset(iris, select = -Species)
y <- Species
model <- svm(x, y, probability = TRUE)
pred_prob <- predict(model, x, decision.values = TRUE, probability = TRUE)
attr(pred_prob, "probabilities")
(原代码来自之前的thread。)
最后一行代码将为我们提供以下格式的输出:
setosa versicolor virginica
1 0.979989881 0.011347796 0.008662323
2 0.972567961 0.018145783 0.009286256
3 0.978668604 0.011973933 0.009357463
为了便于将这些预测概率与它们的真实类别“标签”(即 setosa、versicolor、virginica)进行比较,我计划从上述输出矩阵中提取每行的最高预测概率类别。例如,第一次观察的概率最高的类是setosa,预测概率为0.9799,返回自
which(attr(pred_prob, "probabilities")[1,] == max(attr(pred_prob, "probabilities")[1,]), arr.ind = TRUE)
我现在正在将上述代码扩展为一个循环,以便为数据中的每个观察输出一个包含预测类标签的数据列。以下是我到目前为止所拥有的,但我很难过
predicted_class <- attr(pred_prob, "probabilities")
for(row in 1:nrow(predicted_class)) {
output <- print(which(predicted_class[row,] == max(predicted_class[row,]), arr.ind = TRUE))
output
}
但这并没有给我我想要的结果,它似乎只是从随机行返回预测类(而我想要一列预测类用于所有观察)。 有人能告诉我吗?
【问题讨论】: