机器学习算法-随机森林(RF)
随着大数据和人工智能热潮的相继而来,促使机器学习近些年也火的一塌糊涂。机器学习方法已在生产、科研和生活中有着广泛应用,而集成学习则是机器学习的首要热门方向。集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。集成学习有两个分支,一个是Boosting派系,另一个是Bagging流派,二者的区别主要如下:
Boosting–假定原始样本集中有
Bagging–假定原始样本集中有
一、随机森林的基本思想
随机森林是Bagging的一个扩展变体,顾名思义其是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输 入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,对于分类算法,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。对回归问题,计算
二、随机森林的算法步骤
1:首先,通过Bootstrap方法在原始样本集S中抽取
2:其次,对
3:最后,将
三、随机森林的优缺点
随机森林的主要优点有:基于决策树模型,比较简单,易于实现,对特征缺失不敏感; 因针对不同的样本集训练弱分类器,因此训练可以高度并行化,对于大数据时代的大样本训练速度有优势;在样本特征量很大的时候,可以随机选择决策树节点划分特征,降低训练模型开销;并且采用了随机采样,训练出的模型的方差小,泛化能力强。主要缺点有:在某些噪音比较大的样本集上,随机森林模型容易陷入过拟合;取值划分比较多的特征容易对随机森林的决策产生更大的影响,从而影响拟合的模型的效果。
四、随机森林实战
在scikit-learn中,随机森林的分类函数是RandomForestClassifier,回归函数是RandomForestRegressor ,二者主要的参数为n_estimators–也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合,一般选择一个适中的数值。默认是100。max_depth–决策树最大深度,默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。max_features–划分时考虑的最大特征数,可以使用很多种类型的值,默认是”None”,意味着划分时考虑所有的特征数;如果是”
# -*- coding: utf-8 -*-
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor
import numpy as np
iris = datasets.load_iris()
#利用随机森林进行分类训练
rfc = RandomForestClassifier(n_estimators=10,max_depth=3)
rfc.fit(iris.data, iris.target)
#利用随机森林进行回归训练
rfr = RandomForestRegressor(n_estimators=10,max_depth=3)
rfr.fit(iris.data, iris.target)
instance = np.array([[4.5,6.7,3.4,5.0]])
print "新样本:", instance
print '分类结果:', rfc.predict(instance)
print '回归结果:', rfr.predict(instance)
参考资料
- http://www.cnblogs.com/pinard/p/6156009.html Bagging与随机森林算法原理小结
- http://www.csdn.net/article/2015-10-08/2825851 使用scikit-learn解释随机森林算法
- http://www.cnblogs.com/dudumiaomiao/p/6361777.html 集成学习—boosting和bagging异同
- http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 随机森林分类模型参数介绍
- http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html 随机森林回归模型参数介绍