多个分类模型的简单融合(通过各个模型各个分类的精准度、加权分类概率proba)

一、一些概念

1、stacking与模型简单融合有什么区别?

stacking多指贪吃蛇,几个模型的尾,形成几个模型的头(类似神经结构的层)
简单融合一般指根据投票等简单的形式

2、分类器和模型

模型被训练完毕,具有重复用来预测的“产品“,叫分类器

3、多分类任务的评价体系

precision、recall、accuracy 的概念自行学习 ;
多分类的评价,应该细节查看每个类别的指标

二、思路

假设2个分类器 ,共3类需要被预测

1、多个分类器获取其对每个类的预测能力并量化

分类器在训练集数据上进行预测、评估,获得这个分类器在每一个类别上的能力(单个类别评级指标precision、recall、f1-score),假设选择f1-score,那么这个f1-score,就是衡量预测好坏能力的量化指标;
我们此步骤的目的,是对于每个分类器,获得这样的一个字典:
estimator1: table1 = { ‘类别1’: 0.8 , ‘类别2’ : 0.85 ,‘类别3’:0.5}
estimator2: table2 = { ‘类别1’: 0.9 , ‘类别2’ : 0.8 ,‘类别3’:0.7}

2、新规则预测

当过来一个X , 我们通过 estimator1 去预测 , 发现它预测出 '类别2’ , 从 table1中我们发现,1号选手对于类别2的能力是0.85 ;
当过来一个X , 我们通过 estimator2 去预测 , 发现它预测出 '类别1’ , 从 table2中我们发现,2号选手对于类别1的能力是0.9 ;

3、预测结果

0.9 > 0.8
我们听 2号选手的
(X,‘类别1’)

三、一些思考:

1、容易犯的错

错误示范:有些人是这样做的,用test的数据,根据数据的每一条的y值,去查一下表,看看1号和2号选手在这个分类上的能力,然后制定选取规则
错误原因:测试里的y值都是未知的, my bro …
错误引申:在我们训练的时候,测试集是未知的,不允许提取它的任何信息作为助力,我们有的只是训练集数据(train+val),有的人又要问,到底是train还是val,实际上宏观一点来说,故事很简单,给你一堆数据,让你做一个模型;由于我们有(学习、测验)的机制,所以在我们手上已有的数据上也要模拟这种 (学习了然后要考试看学得效果)的生态,所以我们才会将这部分数据切为(train + val)

2、这种做法合理吗?(此部分不感兴趣可以略过)

换种角度,实际上这种简单融合,也是 (加权调节 + 非线性转换)的一种

加权思想:
很多分类模型,其预测的结果实际上是对每个分类的概率,而最后经过一步比如取最大np.maxarg()来输出概率最大的一个类别,达到分类效果;那么我们10个模型一起去干,就会有10次各个类别的“概率结果”,一次比赛10个评委,我们现在把评委变成公司董事他们根据股权来最后决策,就可以了,而当我们的思路 【二、2】中,如果1号和2号该次预测的能力都是0.8呢?我们该听谁的?我们一定会选1个,这就类似于【0%、100% 极限权重罢了】

非线性思想:
比如我设置一个跳板机制,当【A预测出类别2】的时候,我的结果就变成【B预测的1类】,这两个【】内是一种非线性映射

搜索空间与模型验证角度
事实上,粗暴一些来说,只要你的一切是建立在训练数据上的(train+val的集合但是不一定需要分train+val),你将允许任意地操作,形成的规则、机制、模型,都将送往Test来检验,Test好的,暂时就是好的。本文的思路,没有参考test的数据

三、代码实操

1、思路实现,假设你有两个模型了

对于机器学习模型 实现 【二、1】

#常见的机器学习模型
ML_pred = ML_model.predict(ML_X_train) 
ML_report = classification_report(ML_y_train
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

托米老师代号9527

卡布奇诺满上

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值