目录
集成学习概念
集成学习就是组合多个学习器,最后可以得到一个更好的学习器。(就好比当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见,集成学习亦是如此)
集成学习算法
- 个体学习器之间不存在强依赖关系。装袋(bagging)
- 随机森林(Random Forest)
- 个体学习器之间存在强依赖关系。 提升(boosting)
- Stacking
本文先讲解bagging算法:
bagging算法
bagging算法是在原始数据集选择S次后得到S个新数据集的一种技术,是一种有放回抽样。
假设我们有一个数据集D,使用有放回的随机采样的方法取了k个数据子集(子集样本数都相等):D1,D2,…,Dk,作为新的训练集,我们使用这k个子集分别训练一个分类器(使用分类、回归等算法),最后会得到k个分类模型。我们将测试数据输入到这k个分类器,会得到k个分类结果,比如分类结果是0和1,那么这k个结果中谁占比最多,那么预测结果就是谁。
算法思想过程如图:
bagging算法的使用实现
#导入包
from sklearn import neighbors
from sklearn import datasets
from sklearn.ensemble import BaggingClassifier
from sklearn import tree
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#导入鸢尾花数据
iris = datasets.load_iris()
x_data = iris.data[:,:2]
y_data = iris.target
x_train,x_test,y_train,y_test = train_test_split(x_data,y_data) #分为训练集和测试机
#使用knn算法进行分类
knn = neighbors.KNeighborsClassifier()
knn.fit(x_train,y_train)
#画图
def plot(model):
#获取数据值所在的范围
x_min,x_max = x_data[:,0].min()-1,x_data[:,0].max()+1
y_min,y_max = x_data[:,1].min()-1,x_data[:,1].max()+1
#生成网格矩阵
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
np.arange(y_min,y_max,0.02))
z = model.predict(np.c_[xx.ravel(),yy.ravel()])
z = z.reshape(xx.shape)
#等高线图
cs = plt.contourf(xx,yy,z)
#画图
plot(knn)
#画散点图
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()
#准确率
knn.score(x_test,y_test)
#使用决策树算法分类
dtree = tree.DecisionTreeClassifier()
dtree.fit(x_train,y_train)
#画图
#画图
plot(dtree)
#画散点图
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()
#准确率
dtree.score(x_test,y_test)
#KNN算法使用bagging
bagging_knn = BaggingClassifier(knn,n_estimators=100)
#输入数据建立模型
bagging_knn.fit(x_train,y_train)
plot(bagging_knn)
#样本散点图
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()
bagging_knn.score(x_test,y_test)
#决策树算法使用bagging
bagging_dtree = BaggingClassifier(dtree,n_estimators=100)
#输入数据建立模型
bagging_dtree.fit(x_train,y_train)
plot(bagging_dtree)
#样本散点图
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()
bagging_dtree.score(x_test,y_test)
结果如下图:
KNN算法 bagging-KNN
决策树算法 bagging-决策树
从图中我们可以看出,一般来说使用了bagging会提高算法的效率,是分类更加准确,有的时候也会不起作用。