现在有t、r、tr三种类型的样本,其中tr是兼具t和r这两种特征的类型,在分类时,把tr分成t或者分成r都算分对,所以分类正确率需要变一下。结果想返回一个标签列表,比如:t就返回只有t特征,r就只有r,但tr这个类别就返回两个分类标签有t和r,请问R里有处理这样问题的方法吗?分类方法考虑用支持向量机、偏最小二乘法。
我是一个调包用户,不太擅长自己写算法,常用caret机器学习包

简单

set.seed(42)
my_reference=sample(c("t","r","tr"),20, replace = TRUE)

my_data= sample(c("t","r"),20, replace = TRUE)

# create new ref
my_ref2=my_reference

# convert tr in ref to be the same with prediction
my_ref2[my_reference=="tr"]=my_data[my_reference=="tr"]


caret::confusionMatrix(factor(my_data,c("t","r")),reference=factor(my_ref2,c("t","r")))
#> Confusion Matrix and Statistics
#> 
#>           Reference
#> Prediction t r
#>          t 7 1
#>          r 5 7
#>                                           
#>                Accuracy : 0.7             
#>                  95% CI : (0.4572, 0.8811)
#>     No Information Rate : 0.6             
#>     P-Value [Acc > NIR] : 0.2500          
#>                                           
#>                   Kappa : 0.4231          
#>                                           
#>  Mcnemar's Test P-Value : 0.2207          
#>                                           
#>             Sensitivity : 0.5833          
#>             Specificity : 0.8750          
#>          Pos Pred Value : 0.8750          
#>          Neg Pred Value : 0.5833          
#>              Prevalence : 0.6000          
#>          Detection Rate : 0.3500          
#>    Detection Prevalence : 0.4000          
#>       Balanced Accuracy : 0.7292          
#>                                           
#>        'Positive' Class : t               
#> 

<sup>Created on 2020-11-18 by the reprex package (v0.3.0.9000)</sup>

    tctcab 您这个代码意思是:把tr转换为预测数据相对应的标签,消掉了tr这个类别,把它融为只有t和r,然后计算新的t、r混淆矩阵,是吧?(看了半天,狗头保命)
    但我感觉这么一折腾,干脆把tr按照第三种类别来分,就是最后计算混淆矩阵的时候,做个转换就行,这真的感觉像虚假的多分类,我再看看楼下给的链接😂

    tctcab 哦!那岂不是特征tr分到t和r都算对,就相当于把这个特征删了,就分其他两个t和r就好了😂

      tctcab 哈哈确实,我再想想,的确想要返回一个标签列表才是真实目的

      nan.xiao 照着敲了一遍才来写买家秀,真不错!的确是R的多标签分类,但不晓得这个mlr机器学习包和caret有什么区别,感觉也很强大,谢谢您!!!

      都是框架,所以没什么本质区别。如果有的话,那么 MLR 的设计更多地直接对标了 scikit-learn,在 API 的设计上更灵活,更好地支持了类似于以上多标签这种回归和分类以外的特殊问题。

      可能是因为出现较早的缘故,caret 在以上方面有所局限。当然,他们后来又自己另立山头搞了一套 tidymodels。

        13 天 后

        nan.xiao 请问做出来的每个标签的概率是什么意思?我看到它单个标签其实分对了,为什么概率也是0.3左右,而且也不一定,这个单个标签的概率怎么理解他的意思?
        比如:
        truth.r truth.t truth.w prob.r prob.t prob.w response.r response.t response.w
        FALSE FALSE TRUE 0.15 0.524 0.494 FALSE TRUE FALSE
        FALSE FALSE TRUE 0.334 0.41 0.672 FALSE FALSE TRUE
        TRUE TRUE FALSE 0.714 0.186 0.284 TRUE FALSE FALSE
        nan.xiao

          tctcab 这个真没有,他只说这个是什么,可以怎么获得,mlr官方文档也没有提它的意义是什么

          Susannalsy 我懂了,这个概率的意思就是单纯的算法认为这个东西是什么的概率,不论预测对了还是错了,刚在看mlr3包的书,书中举了这个例子,茅塞顿开。
          row_id truth response prob.M prob.R
          1: 9 R R 0.04651 0.9535
          2: 11 R R 0.04651 0.9535
          3: 15 R R 0.15385 0.8462
          4: 19 R R 0.15385 0.8462
          5: 21 R M 0.89474 0.1053
          6: 27 R R 0.04651 0.9535
          比如,第一行,算法预测对了,就是R类型,它认为是R的概率是0.95,很高的概率确信它是R,而不是M,这个很好理解;看第5行,算法预测错了,算法预测是M,但其实是R,这里给出觉得是M的概率是0.89,很高,所以答案是M。
          因此,就是简单解释算法为什么给出这个结果的概率大小。所以,多标签想必道理是类似的,它的概率虽然很低,但是它结果是对的,只是说有较小的概率认为它是这个,能理解吗,意会一下

            Susannalsy 另外,这个概率是针对每一个标签是01的概率,并不是三个标签加起来是01的概率,用啥能求这样的概率结果呢??

            Susannalsy 算法根据模型预测该object属于某一个类别的概率是多少,通过根据属于各个类别的概率判断属于哪个类别,这与它真实属于哪个类别没有关系。然后根据预测情况与真实情况的差异判断该模型的好与坏,类似统计假设检验中的第一类、第二类错误。

              CMCai0104 你说的这个我现在理解了,这的确是算法呈现出来的意思,但关键是如何让这几个标签的概率加起来等于1?他们加起来不等于1

                Susannalsy 我悟了!!!!以默认阈值为0.5为例,对每一个标签而言给出一个概率,如果大于0.5,就是TRUE,小于0.5就是FALSE,所以他们加起来当然不会等于1