java 随机森林 线性回归 随机森林做回归的原理_决策树


今天讲的内容是机器学习中的决策树算法。

一、理论介绍

随机森林的定义

随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器。

如何正确看待随机森林?

顾名思义,森林——是由很多很多的树组成的。在随机森林算法中,会生成许多的树,而由于决策树本身自带有随机性,因此随机森林生成的树也都是各不相同的。最终,算法会从这些彼此不同的树中,选择出最适合的。

然而,这里大家要注意了:

(决策树可以可视化,但是,随机森林是无法被可视化的!!)

其他的理论原理与决策树类似,在这里就不重复了,有需要了解的同学可以看看我之前的文章:


侦探L:机器学习之旅(1)——决策树zhuanlan.zhihu.com

java 随机森林 线性回归 随机森林做回归的原理_随机森林的特征 是放回抽样么_02


二、实操说明

(1)RandomForestClassifier(随机森林分类器)

类体:


class sklearn.ensemble.RandomForestClassifier (n_estimators=’10’, criterion=’gini’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,
n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)


主要参数:

(与决策树基本一致,有需要了解的同学可以看看我之前的文章)

随机森林分类器主要参数


java 随机森林 线性回归 随机森林做回归的原理_随机森林_03


1、n_estimators:(决定了森林中树木的数量,即基评估器的数量,默认值=100)

n_estimators对随机森林模型的精确性影响是单调的,n_estimators越大,模型的效果往往越好。但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长

2、random_state:

用法和分类树中相似,只不过在分类树中,一个random_state只控制生成一棵树,而随机森林中的random_state控制的是生成森林的模式,而非让一个森林中只有一棵树。当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是用”随机挑选特征进行分枝“的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的。

3、bootstrap :(默认True)

要让基分类器尽量都不一样,一种很容易理解的方法是使用不同的训练集来进行训练,而袋装法正是通过有放回的随机抽样技术来形成不同的训练数据,bootstrap就是用来控制抽样技术的参数。在一个含有n个样本的原始训练集中,我们进行随机采样,每次采样一个样本,并在抽取下一个样本之前将该样本放回原始训练集,也就是说下次采样时这个样本依然可能被采集到,这样采集n次,最终得到一个和原始训练集一样大的,n个样本组成的自助集。由于是随机采样,这样每次的自助集和原始数据集不同,和其他的采样集也是不同的。这样我们就可以自由创造取之不尽用之不竭,并且互不相同的自助集,用这些自助集来训练我们的基分类器,我们的基分类器自然也就各不相同了。bootstrap代表采用这种有放回的随机抽样技术。通常,这个参数不会被我们设置为False。

4、oob_score:

在上面第三个参数中我们提到,bootstrap代表采用有放回的随机抽样技术,而由于是有放回,一些样本可能在同一个自助集中出现多次,而其他一些却可能被忽略,一般来说,自助集大约平均会包含63%的原始数据。因为每一个样本被抽到某个自助集中的概率为:


java 随机森林 线性回归 随机森林做回归的原理_随机森林的特征 是放回抽样么_04


当n足够大时,这个概率收敛于1-(1/e),约等于0.632。因此,会有约37%的训练数据被浪费掉,没有参与建模,这些数据被称为袋外数据(out of bag data,简写为oob)。除了我们最开始就划分好的测试集之外,这些数据也可以被用来作为集成算法的测试集。也就是说,在使用随机森林时,我们可以不划分测试集和训练集,只需要用袋外数据来测试我们的模型即可。当然,这也不是绝对的,当n和n_estimators都不够大的时候,很可能就没有数据掉落在袋外,自然也就无法使用oob数据来测试模型了。如果希望用袋外数据来测试,则需要在实例化时就将oob_score这个参数调整为True,训练完毕之后,我们可以用随机森林的另一个重要属性:oob_score_来查看我们的在袋外数据上测试的结果。

附:随机森林分类器全部参数列表


java 随机森林 线性回归 随机森林做回归的原理_随机森林的特征 是放回抽样么_05


java 随机森林 线性回归 随机森林做回归的原理_随机森林_06


java 随机森林 线性回归 随机森林做回归的原理_随机森林_07


java 随机森林 线性回归 随机森林做回归的原理_随机森林_08


java 随机森林 线性回归 随机森林做回归的原理_java 随机森林 线性回归_09


随机森林分类器全部属性列表


java 随机森林 线性回归 随机森林做回归的原理_决策树_10


随机森林分类器全部接口列表


java 随机森林 线性回归 随机森林做回归的原理_决策树_11


java 随机森林 线性回归 随机森林做回归的原理_随机森林的特征 是放回抽样么_12


主要接口:

1、apply,、fit、 predict、score

这四个接口和决策树的用法是一样的,大家可以看我之前的文章~

2、predict_proba

返回每个测试样本对应的被分到每一类标签的概率,标签有几个分类就返回几个概率。如果是二分类问题,则predict_proba返回的数值大于0.5的,被分为1,小于0.5的,被分为0。传统的随机森林是利用袋装法中的规则,平均或少数服从多数来决定集成的结果,而sklearn中的随机森林是平均每个样本对应的predict_proba返回的概率,得到一个平均概率,从而决定测试样本的分类。

(2)RandomForestRegressor(随机森林回归器)

类体:


class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’mse’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,
n_jobs=None, random_state=None, verbose=0, warm_start=False)


主要参数:

(和上面的随机森林分类器是一样的,不重复了~)

主要接口:

1、apply,、fit、 predict、score

(和上面的随机森林分类器是一样的,不重复了~)
2、随机森林回归并没有predict_proba这个接口。

因为对于回归来说,并不存在一个样本要被分到某个类别的概率问题,因此没有predict_proba这个接口。


以上便是<机器学习之旅(2)——随机森林>的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~