R – confusionMatrix() – 在sort.list(y)中出错:’x’必须是原子类型才能用于’sort.list’

我在使用随机森林的train()函数进行Coursera的实用机器学习项目时遇到了两个问题。由于原始数据集很大,我用两个小的数据框复制了这个问题,如下所示。

输入

library(caret)f = data.frame(x = 1:10, y = 11:20)f2 = data.frame(x = 1:5, y = 6:10)fit <- train(y~., data = f, method="lm")pred <- predict(fit, newdata = f2)confusionMatrix(pred, f2)

输出(主要问题)

Error in sort.list(y) : 'x'必须是原子类型才能用于'sort.list'你是否在列表上调用了'sort'?

如果我使用table函数代替confusionMatrix,我得到了以下错误:

Error in table(pred, data = f2) : 所有参数必须具有相同的长度

尽管pred的长度为5,f2$y的长度也是5。

作为旁注,这个例子中的fit函数有时也会给我一个我无法理解的错误。

警告信息:在nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,  :重抽样性能测量中存在缺失值。

EDIT: 语法


回答:

我认为你有三个问题。

  1. confusionMatrix期望两个向量,但f2是一个数据框。请改用confusionMatrix(pred, f2$y)

  2. 但这会导致另一个错误:The data must contain some levels that overlap the reference.。这引出了第二个问题。如果你查看f2的预测值和实际值,它们之间没有重叠。基本上,ff2代表了xy之间完全不同的关系。你可以通过绘图来看到这一点。

    library(tidyverse)theme_set(theme_classic())ggplot(bind_rows(f=f,f2=f2, .id="source"), aes(x,y,colour=source)) +  geom_point() +  geom_smooth(method="lm") 

    enter image description here

    此外,假数据中没有噪声,所以拟合是完美的(RMSE = 0 且 R-squared = 1)。

    fit
    重抽样结果:  RMSE          Rsquared  1.650006e-15  1
  3. 假数据集有一个连续的outcome变量。然而,混淆矩阵是用于检查分类模型质量的工具——即,outcome是分类而不是连续的。在这种情况下,你应该使用适用于分类的模型,如逻辑回归、随机森林等,而不是线性回归模型。然后你可以使用confusionMatrix来比较预测类别与实际类别。

这是一个例子:

library(caret)# 假数据集set.seed(100)f = data.frame(y = c(rep(c("A","B"), c(100,25)),rep(c("B","A"), c(100,25))),               x = c(rnorm(125, 1, 1), rnorm(125, 3, 1)))# 在训练数据集上训练模型set.seed(50)idx = sample(1:nrow(f), 200)  # 训练观测的索引fit <- train(y ~ ., data = f[idx,], method="glm")# 获取概率尺度上的预测pred <- predict(fit, newdata=f[-idx, ], type="prob")# 创建混淆矩阵的数据框results = data.frame(pred=ifelse(pred$A < 0.5, "B","A"),                     actual=f$y[-idx])confusionMatrix(results$pred, results$actual)
混淆矩阵和统计数据          参考Prediction  A  B         A 16  7         B  6 21               准确度 : 0.74                             95% CI : (0.5966, 0.8537)    无信息率 : 0.56                P值 [Acc > NIR] : 0.006698                          Kappa : 0.475            Mcnemar测试P值 : 1.000000                    敏感度 : 0.7273                      特异度 : 0.7500                   正预测值 : 0.6957                   负预测值 : 0.7778                       流行度 : 0.4400                   检测率 : 0.3200             检测流行度 : 0.4600                平衡准确度 : 0.7386                 'Positive'类 : A

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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