@hshustc
2015-09-21T21:43:20.000000Z
字数 2827
阅读 6730
MachineLearning
随机森林(Random Forest)是一个包含多个决策树的分类器, 其输出的类别由个别树输出类别的众数而定。(相当于许多不同领域的专家对数据进行分类判断,然后投票)
在随机森林中,每个决策树的生成过程如下所示:(建立第i棵树,原始训练集为S)
1. 用N来表示训练单个决策树所用样本的数目,M表示原始特征维度(输入矩阵N*M)。
2. 输入特征维度m,用于决策树中一个节点的决策结果,其中m应远小于M, 如sqrt(M), 1/2sqrt(M), 2sqrt(M)等。
3. 从原始训练集S中,以有放回抽样的方式,取样N次,形成一个训练集S(i),作为根节点的样本,从根节点开始训练。
4. 对于每一个节点,随机选择m个特征,运用这m个变量来决定最佳的分裂点。在决策树的生成过中,m的值是保持不变的。在这m个特征中根据信息增益来找到该节点的最佳维度的特征k及其阈值th, 当
5. 用未抽到样本做预测,评估其误差。(行采样)
6. 每棵树都会完整生长而不会剪枝,因为是随机采样,所以不会出现过拟合(overfitting)。
7. 每次根据从M维特征中随机抽取的m个特征生成一个决策树,共生成t个不同的决策树,这样决策树通过投票对测试数据分类(回归时采用平均)。
B = TreeBagger(nTree, train_data, train_label);
predict_label = predict(B,test_data,'NVarToSample','all');
测试代码
load fisheriris %载入fisheriris数据包
load test_data %test_data需要自己提供,matlab不提供
%建造50棵树,训练集meas,类别species,'NVarToSample','all'表示使用randmon forest算法
b = TreeBagger(50,meas,species,'OOBPred','on','NVarToSample','all')
%画出out-of-bag的比率
plot(oobError(b)) %随着tree数目的增多,out-of-bag率在下降
xlabel('number of grown trees')
ylabel('out-of-bag classification error')
%预测
[Y] = predict(b, test_data); %这里也可以用meas这个训练数据集来做测试
#Import Library
from sklearn.ensemble import RandomForestClassifier
#use RandomForestRegressor for regression problem
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Random Forest object
model= RandomForestClassifier(n_estimators=1000)
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted = model.predict(x_test)
####################################################################################
#all parameters
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,bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
主要有3个参数(以python为例)
1. max_features
随机森林允许单个决策树使用特征的最大数量,python中常见的选项有
a. Auto/None:简单地选取所有特征,每棵树都没有限制
b. sqrt:每棵子树可以利用总特征数的平方根个,同log2
c. 0.2(0.X): 允许每个随机森林的子树可以利用特征数目20%
增加max_features一般能提高模型的性能,因为在每个节点上,我们有更多的选择可以考虑。然而,这未必完全是对的,因为它降低了单个树的多样性,而这正是随机森林独特的优点。但是,可以肯定,增加max_features会降低算法的速度。因此,需要适当的平衡和选择最佳max_features。
2. n_estimators
子树数量。在允许的范围内应选择尽可能高的值。
3. min_sample_leaf
较小的叶子使模型更容易捕捉训练数据中的噪声。推荐50,实际中应测试多种叶子大小。
注:更多可参考随机森林模型的参数调优