从零学习Adaboost算法的python实现

本文介绍了Adaboost分类算法的Python实现,包括多分类的思路和Sklearn库的应用。通过实例展示了Adaboost回归的调用、实验和模型探索,探讨了基分类器的选择对模型性能的影响,提出Adaboost回归还可结合神经网络进行深入研究。
摘要由CSDN通过智能技术生成

最近突然遇到个Adaboost算法实现增强LBP特征进行表情识别的论文,因为一些要求需要从头学习并整理一下,于是对Adaboost算法的进行了一些了解。又臭又长的理论和各种各样的论文这里就不贴了,记录一下学习心得。

Adaboost分类算法python代码详细实现

首先呢,Adaboost分类算法的实现网上找的基本都是二分类的代码,很少有基于多分类的代码实现,于是我就找了找基于多分类实现的方法,具体思路我这里不讲述了,详见这篇博客监督算法大比拼之BP、SVM、adaboost非线性多分类实验
,大佬在一开始就讲述了多分类的思想,通过学习发现Adaboost算法实现多分类的思路与Andrew Ng老师在讲述逻辑回归用于多分类的思路是基本相同的,这种思路应该就是二分类任务拓展到多分类任务的一个常用方式。
这里直接上多分类代码和决策树的底层代码,这些代码其实我没仔细分析,看了个大概,主要了解了它的用法,我这里主要讲用法吧,底层代码放在最后面,有兴趣的同学可以自行精读原理,然后对比一下。

Sklearn库实现Adaboost分类、Adaboost回归

搜了很多自实现的方法,基本都是简单的二分类,对于多分类就很少很少了,值域回归,我暂时还没找到自实现的方法。经过了解,对于Adaboost算法,常用的就是直接调用Sklearn库,这里我们分别进行实验验证一下:

Adaboost分类:

对于Adaboost分类,这个明天再写吧,今天主要做Adaboost回归了

在这里插入代码片

Adaboost回归

调用

关于Adaboost回归的调用,以及使用比较简单如下:

from sklearn.ensemble import AdaBoostRegressor

clf = AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, loss='linear', random_state=None)
clf.fit(X, y)

里面的参数详解,可以参考Sklearn库的英文注释进行详细解读sklearn.ensemble.AdaBoostRegressor

不喜欢看英文的可以参考刘建平老师的这篇博客scikit-learn Adaboost类库使用小结,老师将英文进行了简单翻译,并举例分析了Adaboost回归。

实验

参数我们就不再详述了,下面,就基于Adaboost回归模型进行了简单实验,生成了一些二维数据,用来呈现一下Adaboost回归性能:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import AdaBoostRegressor

# 创建数据集
rng = np.random.RandomState(1)
X = np.linspace(0, 6, 100)[:, np.newaxis]
y = np.sin(X).ravel() + np.sin(6 * X).ravel() + rng.normal(0, 0.1, X.shape[0])

# 训练回归模型
regr_1 = DecisionTreeRegressor(max_depth=4)

regr_2 = AdaBoostRegressor(DecisionTreeRegressor(max_depth=4),
                          n_estimators=300, random_state=rng)

regr_1.fit(X, y)
regr_2.fit(X, y)

# 预测
y_1 = regr_1.predict(X)
y_2 = regr_2.predict(X)

# 绘图
plt.figure()
plt.scatter(X, y, c="k", label="training samples")
plt.plot(X, y_1, c="g", label="n_estimators=1", linewidth=2)
plt.plot(X, y_2, c="r", label="n_estimators=300", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Boosted Decision Tree Regression")
plt.legend()
plt.show()

实验结果如下图所示,可以看到在将决策树回归算法只进行1次迭代,以及使用300次迭代时,对于实验数据的拟合效果有明显差异。

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值