bagging与随机森林

Bagging(Bootstrap aggregating)

让该学习算法训练多轮,每轮的训练集由从初始的训练集中随机取出的n个训练样本组成,某个初始训练样本在某轮训练集中可以出现多次或根本不出现,训练之后可得到一个预测函数序列h_1,⋯ ⋯h_n ,最终的预测函数H对分类问题采用投票方式,对回归问题采用简单平均方法对新示例进行判别。训练R个分类器f_i,分类器之间其他相同就是参数不同。其中f_i是通过从训练集合中(N篇文档)随机取(取后放回)N次文档构成的训练集合训练得到的。对于新文档d,用这R个分类器去分类,得到的最多的那个类别作为d的最终类别。

Bagging算法可与其他分类,回归算法结合,提高其准确率、稳定性的同时,通过降低结果的方差,避免过拟合的发生。

随机森林

随机森林在bagging基础上做了修改。

从样本集中用Bootstrap采样选出n个样本;

从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;

重复以上两步m次,即建立了m棵CART决策树

这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类

可以使用决策树作为基本分类器

但也可以使用SVM、 Logistic回归等其他分类器,习惯上,这些分类器组成的“总分类器”,仍然叫做随机森林

投票机制:

一票否决(一致表决)

少数服从多数

有效多数(加权)

阈值表决

根据投票机制得到分类结果

评价:

在随机森林中,无需交叉验证来评价其分类的准确性,随机森林自带OOB(out-of-bag)错误估计:  

OOB:在构造单棵决策树时我们只是随机有放回的抽取了N个样例,所以可以用没有抽取到的样例来测试这棵决策树的分类准确性,这些样例大概占总样例数目的三分之一

代码事例:

 1 from sklearn.datasets import load_iris
 2 from sklearn.ensemble import RandomForestClassifier
 3 import pandas as pd
 4 import numpy as np
 5 
 6 iris = load_iris()
 7 df = pd.DataFrame(iris.data, columns=iris.feature_names)
 8 df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75
 9 df['species'] = pd.Factor(iris.target, iris.target_names)
10 #print(df.head())
11 
12 train, test = df[df['is_train']==True], df[df['is_train']==False]
13 
14 features = df.columns[:4]
15 clf = RandomForestClassifier(n_jobs=2)
16 y, _ = pd.factorize(train['species'])
17 clf.fit(train[features], y)
18 
19 preds = iris.target_names[clf.predict(test[features])]
20 print(pd.crosstab(test['species'], preds, rownames=['actual'], colnames=['preds']))

 

原文地址:https://www.cnblogs.com/xmeo/p/6491471.html