西瓜书笔记04:集成学习

集成学习

集成学习分为两大类:
- 代表:boosting,个体学习器间存在强依赖,串行生成序列化方法。
- 代表:bagging,个体学习器间不存在强依赖,同时生成的并行化方法。

Boosting

  • 先从训练集训练基学习器,根据基学习器的表现对训练样本进行调整,使先前基学习器做错的训练样本在后续受到更多关注,调整后的样本分布训练下一个基学习器,最终将基学习器加权结合。

  • 代表是AdaBoost算法。学习器的线性组合 H(x)=Tt=1αtht(x) H ( x ) = ∑ t = 1 T α t h t ( x ) ,最小化指数损失函数

    lexp(H|D)=ExD[ef(x)H(x)] l e x p ( H | D ) = E x ∼ D [ e − f ( x ) H ( x ) ]

    ϵt=PxDt(h(x)f(x)) ϵ t = P x ∼ D t ( h ( x ) ≠ f ( x ) ) ,则损失函数最小化得
    αt=12ln(1ϵtϵt) α t = 1 2 l n ( 1 − ϵ t ϵ t )

    以此就可以得到新的基学习器。

  • boosting主要降低偏差,基于泛化性相当弱的学习器构建出很强的集成,如集成决策树。

python实现adaBoost

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles

# 生成2维正态分布,500样本,两个样本特征
x1,y1=make_gaussian_quantiles(cov=2,n_samples=500,n_features=2,n_classes=2)
x2,y2=make_gaussian_quantiles(mean=(3,3),cov=2,n_samples=400,n_features=2,n_classes=2)
X=np.concatenate((x1,x2))
y=np.concatenate((y1,-y2+1))
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=4,min_samples_split=20,min_samples_leaf=5),algorithm='SAMME',n_estimators=200,learning_rate=0.8)
bdt.fit(X,y)

x_min,x_max = X[:,0].min()-1,X[:,0].max()+1
y_min,y_max = X[:,1].min()-1,X[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))
Z=bdt.predict(np.c_[xx.ravel(),yy.ravel()])
Z=Z.reshape(xx.shape)#628*725
cs=plt.contourf(xx,yy,Z,cmap=plt.cm.Paired) #坐标点附近填充
plt.scatter(X[:,0],X[:,1],marker='o',c=y)

这里写图片描述

Bagging与随机森林

bagging是有放回的取样,每个采样集训练一个基学习器,分类使用简单投票法。

扩展—-随机森林
在当前节点的属性集合中随机选择一个包含k个属性的子集,从子集中选择一个最优属性用于划分。
随机森林调参:
- n_estimators与learning_rate一起考虑,一般n_estimators为100。
- max_features,常用auto,sqrt,0.2等,此值增加一般可以提高性能但降低速度。
- max_depth,常用10-100.
- min_samples_split,如果样本量不大,不要管这个值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值