从零学习Adaboost算法的python实现

最近突然遇到个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次迭代时,对于实验数据的拟合效果有明显差异。

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