1. Bagging
Bootstrap:一种有放回的抽样方法。
Bagging( bootstrap aggregation)的策略:从样本集中进行有放回地选出n个样本;在样本的所有特征上,对这n个样本建立分类器;重复上述两步m次,获得m个样本分类器;最后将测试数据都放在这m个样本分类器上,最终得到m个分类结果,再从这m个分类结果中决定数据属于哪一类(多数投票制)。
随机森林采用了Bagging策略,且在其基础上进行了一些修改,采用了两个随机:
-
从训练样本集中使用Bootstrap采样(随机有放回)选出n个样本。
-
设样本共有b个特征,从这b个特征中只随机选择k个特征来分割样本,通过计算选择最优划分特征作为节点来划分样本集合来建立决策树。(与Bagging的不同之处:没有使用全部的特征,这样可以避免一些过拟合的特征,不再对决策树进行任何剪枝)
-
重复以上两步m次,可建立m棵决策树
-
这m棵决策树形成了森林,可通过简单多数投票法(或其他投票机制)来决定森林的输出,决定属于哪一类型。(针对解决回归问题,可以采用单棵树输出结果总和的平均值)
随机森林在一定程序上提高了泛化能力,而且可以并行地生成单棵树。
import numpy as np import matplotlib.pyplot as plt from sklearn.tree import DecisionTreeRegressor if __name__ == "__main__": n = 500 x = np.random.rand(n) * 8 - 3 x.sort() y = np.cos(x) + np.sin(x) + np.random.randn(n) * 0.4 x = x.reshape(-1, 1) reg = DecisionTreeRegressor(criterion='mse') # reg1 = RandomForestRegressor(criterion='mse') dt = reg.fit(x, y) # dt1 = reg1.fit(x, y) x_test = np.linspace(-3, 5, 100).reshape(-1, 1) y_hat = dt.predict(x_test) plt.figure(facecolor="w") plt.plot(x, y, 'ro', label="actual") plt.plot(x_test, y_hat, 'k*', label="predict") plt.legend(loc="best") plt.title(u'Decision Tree', fontsize=17) plt.tight_layout() plt.grid() plt.show()