鱼C论坛

 找回密码
 立即注册
查看: 7537|回复: 27

[已解决]机器学习中的随机森林算法的疑问

[复制链接]
发表于 2019-4-22 16:19:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近手头有一组数据,需要进行建模(水污染分析模型),要根据输入的污染企业排放量,气象情况,水位等信息,及水质监测站的监测数据,进行建模。
目前采用随机森林的分类模型来处理。
情况导致介绍下:
1. 该模型为多分类模型;
2. 输入变量的种类为26个;
3. 目标变量原为连续型数据,根据标准,将其离散化处理成3个水平(根据标准应是设置出6个水平数,代号是0--5,而实际只能匹配3--5)。因此目标变量的三个类别是3,4,5(我没有对其进行更改,主要是考虑以后如果有新的数据进行,可能存在有0,1,2的水平)
4. 早期模型选择了常规的线性回归,但是其拟合度很低,才0.33.。所以不得已,考虑分类模型,而使用基础分类器的结果,也试过,效果也不佳。现在考虑用集成算法来试验,看效果是否有改善。
但是这个流程不太清除,是否哪里不合理,请高手指点迷津,代码如下:
#先导入必要的模块
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split,GridSearchCV,KFold
from sklearn.metrics import  confusion_matrix,f1_score,precision_score,recall_score,accuracy_score
from sklearn.feature_selection import SelectKBest,f_classif

#观察目标变量时,发现变量存在不平衡情况,因此选择过采样处理,使数据平衡
from imblearn.over_sampling import SMOTE
sos = SMOTE(random_state=1)
X_sos,y_sos = sos.fit_sample(X,y)

#先不做任何处理,初步训练模型,看下准确度,以便和后面调参后的模型训练准确度进行对比。
rf0 = RandomForestClassifier(oob_score= True,random_state=1)  #oob-score用来表示采用袋外数据进行测试准确度
rf0.fit(X_sos,y_sos)
rf0.oob_score_
#该步骤得出分数是 0.8129496402877698

#第一步调参,查看最佳的决策树数量
rf1 = RandomForestClassifier(oob_score=True,random_state=1)
params_1 = {'n_estimators':range(10,201,10)}
kfold =KFold(n_splits=10)
grid1 = GridSearchCV(rf1,param_grid=params_1,cv = kfold)
grid1.fit(X_sos,y_sos)
grid1.best_estimator_
#该步骤,得出最佳的决策树数目是110颗

#根据上一步的结果,确定其中一个参数,再次进行另外3个参数的调优
rf2 = RandomForestClassifier(n_estimators=110,oob_score=True,random_state=1,n_jobs= -1)
params_2 = {'max_depth':range(1,20),'min_samples_split':range(50,201,10),'min_samples_leaf':range(1,10,2)}
grid2 = GridSearchCV(rf2,cv=kfold,param_grid=params_2)
grid2.fit(X_sos,y_sos)
grid2.best_params_
#该步骤,得出最佳的随机森林深度是7,最小枝叶数是1,最小划分样本是50个

#根据上一步的结果,再次新增确定的3个参数
rf3 = RandomForestClassifier(n_estimators=110,oob_score=True,random_state=1,n_jobs= -1,max_depth=7,min_samples_leaf=1,min_samples_split=50)
params_3 = {'max_features':range(2,27,2)}
grid3 = GridSearchCV(rf3,cv=kfold,param_grid=params_3)
grid3.fit(X_sos,y_sos)
grid3.best_params_
#该步骤得出最大的特征数是26个(输入变量最大的特征数,也是26个)

#根据上述调参,正式进行训练建模
rf = RandomForestClassifier(n_estimators=110,oob_score=True,random_state=1,n_jobs= -1,max_depth=7,min_samples_leaf=1,
                            min_samples_split=50,max_features = 26)
rf.fit(X_sos,y_sos)
rf.oob_score_
#该步得出的分数结果是 0.829736211031175

我有几点不明白之处:
1.  因为模型已经调整到平衡状态。那模型的评估,是用X_sos, y_sos来评估,还是用X,y? 或者说直接看oob_score_这个袋外分数指标?
2.  如上面情况介绍的第3点,因为目标变量的代号是3,4,5,而模型生成的代号则是0,1,2.。这种情况下,该如何将两者进行对应。。也就是我如何指定模型代号中的0 ,是目标变量中的哪个?
3.  多分类模型,如果数据平衡,直接看准确度可能是合理的。但是,如何数据不平衡,个人以为,应该看F1score,才比较合理些(Recall score和precision score因为相互影响,F1score才是综合分)。但如果是多分类模型,貌似无法直接调用F1-sciore,而要靠自己去写计算公式?--这个具体怎么做?
4. 相对调参的随机森林模型,其袋外分只比调参后的袋外分略低。。这样的话,这种调参,是否意味着效果不明显?
最佳答案
2019-4-23 17:10:04
1如果你的数据特别不平衡,看你的关注方面,当然比如有的指标是不能容忍的,所以可以考虑找召回率等,具体使用那个是你实际应用场景的样本类别分布比较好
2袋内外完全没用过,,也可能之前就直接调包了你的目标变量都是有标签的,你自己看,你说的012其实是345,那你的345又对应什么了
3你可以考虑一个为0类,其他为1类,
4你可以再考虑个模型,我觉得你的模型直接用分类可能是不太好,分类只是靠严重程度阈值,类别间还是有很大的相关性,当然机器是可以学习的。你可以多试试几个模型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-23 17:10:04 From FishC Mobile | 显示全部楼层    本楼为最佳答案   

回帖奖励 +5 鱼币

1如果你的数据特别不平衡,看你的关注方面,当然比如有的指标是不能容忍的,所以可以考虑找召回率等,具体使用那个是你实际应用场景的样本类别分布比较好
2袋内外完全没用过,,也可能之前就直接调包了你的目标变量都是有标签的,你自己看,你说的012其实是345,那你的345又对应什么了
3你可以考虑一个为0类,其他为1类,
4你可以再考虑个模型,我觉得你的模型直接用分类可能是不太好,分类只是靠严重程度阈值,类别间还是有很大的相关性,当然机器是可以学习的。你可以多试试几个模型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-24 08:03:40 | 显示全部楼层
塔利班 发表于 2019-4-23 17:10
1如果你的数据特别不平衡,看你的关注方面,当然比如有的指标是不能容忍的,所以可以考虑找召回率等,具体 ...

1. 我关注的差不多就是目前得到的分类部分,所以的确如你所言,我是考虑采用F1值和AUC。但是对于多分类的分值计算,还有些没搞清楚。。
2. 袋外分的问题,我网搜过,应该是可以用的。但是一般还是针对数据平衡的情况比较合适些。我的345分类,是很清楚的,就是匹配的原先标准中的指定类别(标准是GB标准,其中分成了6个类别,我的数据只匹配到其中的3个类别)。。我不太想改这个编码,因为后期如果有新数据进来,假使能匹配到新的分类,那不是模型得重新搞?  因此,现在就是想搞清楚,我的目标变量中的分类编号是3,4,5,而模型出来的变量编号却成了0,1,2.。这两者如何对应?
3. 关于这个多分类的F1值,我昨天网搜过,有两种评估值,一个是micro,一个是macro。。相应的P,R,A等指标应该也是。所以我考虑用这个综合评估分。---因为假使以后的目标变量类别较多,总不能每次都要重新建模吧。。
4. 我之前试过用简单的线性回归,但是效果很差。我也问了几个有经验的人,他们觉得可能变量纳入有缺失,导致目前的模型拟合不好。但是谁也不知道模型缺失的变量是什么。。所以只能想用集成算法,靠综合弱分类器的结果来看下效果是否会改善----我自己试了下,貌似的确好不少。。如果有的选择,我也希望用回归模型,毕竟出来的结果是连续的,可以设定需要的报警点之类的数值。。分类模型,还是不太好用。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-28 10:09:19 | 显示全部楼层

回帖奖励 +5 鱼币

鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-9 17:51:33 | 显示全部楼层

回帖奖励 +5 鱼币

我为我白嫖鱼币的行为感到羞耻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-18 14:01:43 | 显示全部楼层

回帖奖励 +5 鱼币

鱼币鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 11:09:05 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-25 11:36:54 | 显示全部楼层

回帖奖励 +5 鱼币

塔利班 发表于 2019-4-23 17:10
1如果你的数据特别不平衡,看你的关注方面,当然比如有的指标是不能容忍的,所以可以考虑找召回率等,具体 ...

我靠,一万积分的巨佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 16:53:21 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-19 09:53:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-19 09:54:26 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-21 15:09:04 | 显示全部楼层

回帖奖励 +5 鱼币

向大佬学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-8 10:50:37 | 显示全部楼层

回帖奖励 +5 鱼币

学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-8 10:52:35 | 显示全部楼层

回帖奖励 +5 鱼币

学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-9 14:47:22 | 显示全部楼层

回帖奖励 +5 鱼币

还有渔币吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-14 16:35:17 | 显示全部楼层

回帖奖励 +5 鱼币

育碧育碧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-15 15:12:32 | 显示全部楼层

回帖奖励 +5 鱼币


学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-15 16:09:27 | 显示全部楼层
111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-10 16:51:34 | 显示全部楼层

回帖奖励 +5 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-25 09:57:01 | 显示全部楼层

回帖奖励 +5 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表