干煸泥鳅的做法⼀、前⾔
回归随机森林作为⼀种机器学习和数据分析领域常⽤且有效的算法,对其原理和代码实现过程的掌握是⾮常有必要的。为此,本⽂将着重介绍从零开始实现回归随机森林的过程,对于随机森林和决策树的相关理论原理将不做太深⼊的描述。本⽂的⽬的只是为了演⽰回归随机森林主要功能的具体实现过程,在实现过程中不会考虑代码性能,会更加注重代码可读性。
实现语⾔:Python汽车保养与维护
图 1. 四种不同的impurity function
图 2. RFR训练⽰意图
bootstrap[1]是对输⼊训练样本集合
进⾏
图 3. 回归决策树训练过程
RFR的预测结果是由内部所有⼆叉决策树的预测结果取平均值得到的。⼆叉决策树的预测过程主要分为以下步骤:
针对某⼀输⼊样本,从⼆叉决策树的根节点起,判断当前节点是否为叶⼦节点,如果是则返回叶⼦节点的预测值(即当前叶⼦中样本⽬标变量的平均值),如果不是则进⼊下⼀步;
使⽤训练数据训练模型;
计算训练数据在模型上依据某⼀metric的score,记为
(在回归中,可以选⽤r2);
遍历训练数据集中的每⼀个feature,每次在原训练数据集的基础上将对应的feature进⾏shuffle操作,然后使⽤模型得到shuffle后数据集的score,记为
,最后通过
计算出第
个feature的重要性。
⽅法2
如果⼀个feature很重要,那么从数据集中去除该feature后,模型的prediction error会增⼤;相反,如
拍鞋>关于阅读的成语
果⼀个feature不重要,那么从数据集中去除后,模型的prediction error不会变化太⼤。该⽅法的步骤如下:
使⽤原数据集训练模型,并评估模型在训练数据集上的prediction error,记为
;
遍历训练数据集中的每⼀个feature,每次从原训练数据集的基础上去除该feature,然后使⽤得到数据集训练模型,最终计算出prediction error,记为
,最后通过香椿怎么腌制好吃
计算出第
个feature的重要性。
该⽅法和⽅法1有点类似,但该⽅法在计算每个feature的重要性的时候都需要重新训练模型,会增加额外的计算量,在实际应⽤⼀般不采⽤该⽅法。
⽅法3
该⽅法是sklearn内部树模型计算feature重要性时采⽤的⽅法。即某⼀节点
的重要性为
(2-5)
其中,
分别为节点
以及其左右⼦节点中训练样本个数与总训练样本数⽬的⽐例,
分为为节点
以及其左右⼦节点的不纯度。知道每⼀个节点的重要性之后,即可通过公式(2-6)得出某⼀feature的重要性。
(2-6)
为了使所有feature的重要性加起来等于1,需要每⼀feature的重要性进⾏normalization,即公式(2-7)
(2-7)
gopro4
⽅法3在sklearn中的实现,请查看_tree.pyx。
⽅法3。
两副牌斗地主
⽅法1和⽅法3
在本⽂实现的RFR中,同时实现了⽅法1
非理性消费
三、回归随机森林实现
3.1 代码
代码有点长,不想看的可以直接跳过。
from multiprocessing import Pool, cpu_count
class RFRegressor(object):
"""Random Forest Regressor
"""