文章目录
例如:Python 机器学习入门之adaboost算法
前言
Adaboost算法是一种提升方法,将多个弱分类器,组合成强分类器。中文名为自适应增强。它的自适应在于:前一个弱分类器分错的样本的权值(样本对应的权值)会得到加强,权值更新后的样本再次被用来训练下一个新的弱分类器。在每轮训练中,用总体(样本总体)训练新的弱分类器,产生新的样本权值、该弱分类器的话语权,一直迭代直到达到预定的错误率或达到指定的最大迭代次数。
一、算法原理
(1)初始化训练数据(每个样本)的权值分布:如果有N个样本,则每一个训练的样本点最开始时都被赋予相同的权重:1/N。
(2)训练弱分类器。具体训练过程中,如果某个样本已经被准确地分类,那么在构造下一个训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。同时,得到弱分类器对应的话语权。然后,更新权值后的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
(3)将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,分类误差率小的弱分类器的话语权较大,其在最终的分类函数中起着较大的决定作用,而分类误差率大的弱分类器的话语权较小,其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的比例较大,反之较小。
二、使用步骤
1.引入库
代码如下(示例):
import numpy as np
import sklearn.metrics as sm
import matplotlib.pyplot as plt
from sklearn.utils import shuffle
from sklearn import datasets
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import AdaBoostRegressor
2.读入数据
代码如下:
housing_data = datasets.load_boston()
X,y = shuffle(housing_data.data,housing_data.target,random_state=7)
number_train = int(0.8*len(X))
x_train = X[:number_train]
y_train = y[:number_train]
x_test = X[number_train:]
y_test = y[number_train:]
3.建立决策树并使用adaboost增强
dt_regressor = DecisionTreeRegressor(max_depth=4)
dt_regressor.fit(x_train,y_train)
ab_regressor = AdaBoostRegressor(DecisionTreeRegressor(max_depth=4),n_estimators=400,
random_state=7)
ab_regressor.fit(x_train,y_train)
y_pre_dt = dt_regressor.predict(x_test)
mse = sm.mean_squared_error(y_test,y_pre_dt)
evs = sm.explained_variance_score(y_test,y_pre_dt)
print("\n决策树学习效果\n",f"均方误差={round(mse,2)}\n解释方差分={round(evs,2)}")
y_pre_ab = ab_regressor.predict(x_test)
mse = sm.mean_squared_error(y_test,y_pre_ab)
evs = sm.explained_variance_score(y_test,y_pre_ab)
print("\n决策树学习效果\n",f"均方误差={round(mse,2)}\n解释方差分={round(evs,2)}")