使用rpart的predict方法计算树的预测准确性

我已经使用rpart为一个数据集构建了一个决策树。

然后我将数据分成了两部分 – 一个训练数据集和一个测试数据集。使用训练数据为数据集构建了一棵树。我想计算基于创建的模型的预测准确性。

我的代码如下所示:

library(rpart)#读取数据data = read.table("source")names(data) <- c("a", "b", "c", "d", "class")#生成测试和训练数据 - 数据随机选择,按80/20分割trainIndex  <- sample(1:nrow(x), 0.8 * nrow(x))train <- data[trainIndex,]test <- data[-trainIndex,]#基于信息增益构建树tree = rpart(class ~ a + b + c + d, data = train, method = 'class', parms = list(split = "information"))

我现在想通过将模型生成的预测结果与实际的训练和测试数据进行比较来计算预测的准确性,但在执行这一步时遇到了错误。

我的代码如下所示:

t_pred = predict(tree,test,type="class")t = test['class']accuracy = sum(t_pred == t)/length(t)print(accuracy)

我收到了一个错误消息,内容如下 –

错误在 t_pred == t : 这些类型的比较尚未实现 另外:警告消息:对于”==”,不兼容的方法(”Ops.factor”, “Ops.data.frame”)

在检查t_pred的类型时,我发现它是整数类型,然而文档

(https://stat.ethz.ch/R-manual/R-devel/library/rpart/html/predict.rpart.html)

指出predict()方法应该返回一个向量。

我无法理解为什么变量的类型是整数而不是列表。我在哪里犯了错误?我该如何修复它?


回答:

尝试先计算混淆矩阵:

confMat <- table(test$class,t_pred)

现在你可以通过将矩阵对角线的总和 – 即正确的预测 – 除以矩阵的总和来计算准确性:

accuracy <- sum(diag(confMat))/sum(confMat)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注