机器学习实战笔记44-49:集成学习中的bagging算法

发布于:2024-12-07 ⋅ 阅读:(30) ⋅ 点赞:(0)


1.先讲bagging如何实现:
如何实现找到一串数中哪个数出现次数最多:
b=np.argmax(np.bincount(r))
Bincount作用是将array由小到大排然后返回每个值计数结果,
Argmax是找到array中最大值,然后返回最大值索引
但是注意,bincount只有正值有效,负的要改为正的
如果数量一致,则会返回编码更小的类别
回归则直接求平均

3.随机森林
Cross_validate参数:多了return_train_score:是否返回训练分数,这个可以用来观测是否过拟合;verbose:是否打印进程,可以看种到第几颗树了;n_jobs:进程数

随机森林参数:弱分类器数量、弱分类器训练数据、弱分类器结构(最重要的是前两类)
具体参数:
分支标准:三类,平方误差、绝对误差、泊松偏差,第三类用在要预测的标签全为正整数时。
注意,当criterion不同时,feature_importance也会不同
控制过拟合的几个参数(由严重到不严重):max_depth、max_leaf_nodes、min_sample_split、min_impurity_decrease
n_estimators:唯一必填参数,随着他的增加,容易过拟合,要找到平衡点。

随机森林的数据类参数:
Bootstrap:控制是否对数据随机抽样,最终当抽样次数趋于无穷时,会有37%的样本被浪费
Oob_score:是否使用袋外数据验证,oob_score_可以查看验证结果
Max_samples:每次抽样的样本总量是多少
Max_features:特征抽样个数
注意:数据量足够时,要控制但棵树的数据量,否则bagging发挥不出效果
Random_state:注意不同的包里面同样的参数值效果不同
其它参数:
N_jobs、verbose(打印建树过程)、ccp_alpha:结构风险的系数\warm_Start:支持增量学习


如何调参?
参数重要性:

e4e1a9c5a235461aa622f0cb20bfc039.png
方法论:
由巨大影响力的应定要调,其他的选择了调
如果完全人为确定的参数,首先看学习曲线:即单个参数变化时模型误差情况。找到转折点,然后想参数可能往哪个方向变,设定范围。比如几棵树。
不完全由人为确定的参数:先拟合一次看看树的深度,然后按这个大概的深度范围来设定。
一个小技巧:在查看的时候,array是会收缩的,用tolist()转化后就不会收缩了

 

N_jobs一定要设置4/8否则会很卡
Verbose一定要设置true,可以看到哪个参数设置的值错了

4.随机森林在巨量数据上的增量学习
由于sklearn不支持gpu,因此计算资源会短缺,解决方法是用xgboost这种支持gpu的或者是用增量学习,即将巨量数据分成若干子集再输入模型训练
控制的参数是warm_start,注意一般为false,这是交叉验证的基础,以保证每次训练的模型不会记得之前的结果。具体方法是model.n_estimators+=2去增加两棵树再训练

在kaggle中的应用:
首先要写一个循环读入数据,这就需要知道数据量有多少,一般可以看kaggle说明,用数据库算,用deque读最后几列看它的索引这几种方式,靠pandas估算(用skiprows+循环来试)
一个小技巧:[*range(0,10**6,50000)]
但这种方法有个问题,计算量巨大

5.bagging的面试问题
a为什么bagging算法效果比单个评估器好?方差小,而泛化误差=偏差+方差+噪音
Bbagging有效的基本条件:偏差较低(准确率到50%以上)、弱评估器之间相关性弱,最好相互独立、弱评估器是方差较高且不稳定的评估器
注:偏差指在当前数据集上的误差,方差指在不同数据集上的误差
B bagging可以集成决策树之外的算法吗?可以,偏差低但方差高的都可以,比如支持向量机。可以使用sklearn.ensemble.BaggingRegressor来集成评估器
C 怎样增强bagging中评估器独立性:独立性不足的原因是训练数据一致、弱评估器构建的规则一致。
一个是用其它算法,比如voting等模型融合算法;另一个是在随机森林里用bootstrap、maxsample等参数调

D 知道其它的bagging算法吗?极端随机树:每次随机选择几个节点进行不纯度计算,这样可以降低方差,但偏差较大,这种适用于方差大的数据。

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到