一、一些概念
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

&spm=1001.2101.3001.5002&articleId=139683481&d=1&t=3&u=7e90651d0e1b453ab3be44c373d1f4de)
396

被折叠的 条评论
为什么被折叠?



