集成学习-bagging算法

目录

集成学习概念

集成学习算法

bagging算法

bagging算法的使用实现


集成学习概念

       集成学习就是组合多个学习器,最后可以得到一个更好的学习器。(就好比当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见,集成学习亦是如此)

集成学习算法

  1. 个体学习器之间不存在强依赖关系。装袋(bagging)
  2. 随机森林(Random Forest)
  3. 个体学习器之间存在强依赖关系。 提升(boosting)
  4. Stacking

本文先讲解bagging算法:

bagging算法

bagging算法是在原始数据集选择S次后得到S个新数据集的一种技术,是一种有放回抽样。

假设我们有一个数据集D,使用有放回的随机采样的方法取了k个数据子集(子集样本数都相等):D1,D2,…,Dk,作为新的训练集,我们使用这k个子集分别训练一个分类器(使用分类、回归等算法),最后会得到k个分类模型。我们将测试数据输入到这k个分类器,会得到k个分类结果,比如分类结果是0和1,那么这k个结果中谁占比最多,那么预测结果就是谁。

算法思想过程如图:

集成学习-bagging算法_第1张图片

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算法_第2张图片集成学习-bagging算法_第3张图片

 决策树算法                                                      bagging-决策树

集成学习-bagging算法_第4张图片集成学习-bagging算法_第5张图片

从图中我们可以看出,一般来说使用了bagging会提高算法的效率,是分类更加准确,有的时候也会不起作用。

你可能感兴趣的:(机器学习,集成学习,算法,机器学习)