【问题标题】:Why is my predict function predicting the same probability for each row of my data?为什么我的预测函数为我的数据的每一行预测相同的概率?
【发布时间】:2021-04-04 02:28:50
【问题描述】:
labelled <- read.table(header=TRUE, text="
  veh_value exposure clm
  3.33      0.73     0
  0.99      0.82     1
  3.44      0.74     1
  2.50      0.68     0
  4.05      0.11     1
")
unlabelled <- read.table(header=TRUE, text="
  veh_value exposure 
  2.77      0.44     
  0.86      0.10     
  4.27      0.02     
  2.47      0.29     
  1.43      0.25     
")
##Preprocessing of both data sets 

labelled$veh_value =cut(labelled$veh_value,breaks=c(quantile(labelled$veh_value,probs=seq(0,1,by=0.25))))
labelled$exposure = cut(labelled$exposure,breaks=c(quantile(labelled$exposure,probs=seq(0,1,by=0.25))))
labelled$clm = as.factor(labelled$clm);

unlabelled$veh_value=cut(unlabelled$veh_value,breaks=c(quantile(unlabelled$veh_value,probs=seq(0,1,by=0.25))))
unlabelled$exposure =cut(unlabelled$exposure,breaks=c(quantile(unlabelled$exposure,probs=seq(0,1,by=0.25))))

##Training Model for labelled data 

library(e1071)
NBclassfierlabel=naiveBayes(clm~veh_value+exposure, laplace=1, data=labelled)

##Predicting posterior probabilities for the unlabelled data  

predict<- predict(NBclassfierlabel, newdata=unlabelled, type="raw")

我已经包含了我的标记和未标记数据集的样本。我还包括预处理以在我的标记数据集上运行 naivebayes 算法。然后我想通过使用predict&lt;- predict(NBclassfierlabel, newdata=unlabelled, type="raw") 来预测我的未标记集的后验概率当我运行此代码时,每一行都会返回相同的概率。你知道为什么会这样吗?非常感谢任何帮助。

【问题讨论】:

  • 请分享一段可重现的数据,以便其他人可以更有效地帮助您。

标签: r


【解决方案1】:

您在为 veh_valueexposure 未标记数据创建存储桶时犯了一个小错误。您通过将quantile 用于未标记数据本身来削减未标记数据,这不是在未标记数据中创建级别的正确方法。每当您想为未标记的(测试数据)创建存储桶时,您应该始终将存储桶(标记的切割)与训练数据(在您的情况下为标记的数据)保持一致。理想情况下,削减水平应该匹配。不同之处在于每个类别(级别)的两个数据集之间这些级别下的行数。问题是即使有人错误地创建了关卡,朴素贝叶斯也不会失败,但如果您运行逻辑回归(这会产生错误,这会导致代码中的关卡不匹配)。

这是修改后的代码。同样在创建剪辑时,下侧会有 NA,所以基本上你在左侧的剪辑也丢失了(包含 NA)。所以为了避免这种情况,我在两端都使用了 Infs(-Inf, +Inf)。

这是您修改后的代码,输入给定:

p1 <- c(-Inf, c(quantile(labelled$veh_value,probs=seq(0,1,by=0.25))), Inf)

p2 <- c(-Inf, (quantile(labelled$exposure,probs=seq(0,1,by=0.25))), Inf)

labelled$veh_value =cut(labelled$veh_value,
                        breaks=p1)

labelled$exposure = cut(labelled$exposure,breaks=p2)
labelled$clm = as.factor(labelled$clm);

unlabelled$veh_value=cut(unlabelled$veh_value,breaks=p1)

unlabelled$exposure =cut(unlabelled$exposure,breaks=p2)

##Training Model for labelled data 
labelled
library(e1071)
NBclassfierlabel=naiveBayes(factor(clm)~veh_value+exposure, laplace=1, data=labelled)

##Predicting posterior probabilities for the unlabelled data  

str(labelled)

predict<- predict(NBclassfierlabel, newdata=unlabelled, type="raw")

输出

                0            1
[1,] 0.7714285714 0.2285714286
[2,] 0.1741935484 0.8258064516
[3,] 0.2967032967 0.7032967033
[4,] 0.7714285714 0.2285714286
[5,] 0.7714285714 0.2285714286
R>

【讨论】:

  • @Killian Gavin,我能帮到你吗?谢谢
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2016-10-01
  • 2017-01-04
  • 2020-07-11
  • 2019-09-16
  • 1970-01-01
  • 2020-01-17
  • 2017-01-29
相关资源
最近更新 更多