【问题标题】:Find column number that satisfies condition based on another vector根据另一个向量查找满足条件的列号
【发布时间】:2018-07-26 08:07:20
【问题描述】:

我正在尝试根据变量UserPlanning HorizonMaterial 等为“Hit”、“Miss”类训练分类器。 大部分都是分类变量,除了Planning Horizon(整数)

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

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

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

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

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

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

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)

【问题讨论】:

  • 如何将您的阈值矩阵合并到结果中,通过比较P("Hit") 和您的P("Hit"|User) 再次创建最终预测?
  • 1. 提供可使用的数据,例如dput(head(yourData,20)) 2. 显示并标记您想要的输出。

标签: r machine-learning classification threshold


【解决方案1】:

我会合并我的阈值矩阵,然后像这样手动创建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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多