根据另一个向量查找满足条件的列号

时间:2018-02-15 14:18:28

标签: r machine-learning classification threshold

我正在尝试根据变量UserPlanning HorizonMaterial以及更多内容为“Hit”,“Miss”类训练分类器。 除Planning Horizon(整数)

外,其中大部分都是分类变量

我有不平衡的数据所以我试图使用阈值来选择模型的最终输出(而不是仅使用默认的0.5概率)

变量User对类结果的影响最大,所以我试图为每个用户使用不同的阈值。我正在考虑使用朴素贝叶斯后验概率P(类|用户)。

问题是,我如何将这些不同的规则应用于模型的输出矩阵:

“阈值矩阵”,每个用户的不同阈值:

User    P("Hit"|User)
A           0.80
B           0.40
C           0.61

分类器(P(Hit)和P(Miss))和最后一列(最终预测)的输出是我需要构建的。

User    P("Miss")   P("Hit")    Final Prediction
B           0.79    0.21        Miss
B           0.20    0.80        Hit
A           0.15    0.85        Hit
C           0.22    0.78        Hit
A           0.90    0.10        Miss
B           0.80    0.20        Miss

注意第一行得到一个MISS,因为P(Miss)低于P(Hit | User = B)

1 个答案:

答案 0 :(得分:0)

我会合并我的阈值矩阵,然后像这样手动创建Final Prediction列。

df <- read.table(text='User P("Miss") P("Hit") "Final Prediction"
B 0.79 0.21 Miss
B 0.20 0.80 Hit
A 0.15 0.85 Hit
C 0.22 0.78 Hit
A 0.90 0.10 Miss
B 0.80 0.20 Miss', 
                 header=TRUE, sep=' ', check.names=FALSE)

thm <- read.table(text='User P("Hit"|User)
A 0.80
B 0.40
C 0.61', 
                  header=TRUE, sep=' ', check.names=FALSE)

thmdf <- merge(thm, df)

thmdf['My Final Prediction'] <- 
  ifelse(thmdf$`P(Hit)` < thmdf$`P(Hit|User)`, 
         'Miss',
         'Hit')

thmdf