19

您所在的位置:网站首页 adaboost算法例题 19

19

2023-11-26 15:34| 来源: 网络整理| 查看: 265

Adaboost 多分类算法:

from sklearn.ensemble import AdaBoostClassifier # 多分类问题,不是+1、-1 类别0,1,2 ada = AdaBoostClassifier(n_estimators=3,algorithm='SAMME',learning_rate=1.0) ada.fit(X_train,y_train) # 算法,工作:从X_train---y_train寻找规律

Adaboost 回归算法:

from sklearn.ensemble import AdaBoostRegressor ada = AdaBoostRegressor(n_estimators=3,loss = 'linear', # 线性,误差绝对值 learning_rate=1) # learning_rate 学习率 ada.fit(X,y) # 训练 1、Adaboost多分类算例 1.1、导包 import numpy as np from sklearn.ensemble import AdaBoostClassifier from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn import tree import graphviz  1.2、加载数据 X,y = datasets.load_iris(return_X_y = True) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, random_state = 1024) 1.3、建模 # 多分类问题,不是+1、-1 # 类别0,1,2 ada = AdaBoostClassifier(n_estimators=3,algorithm='SAMME',learning_rate=1.0) ada.fit(X_train,y_train) #算法,工作:从X_train---y_train寻找规律 y_ = ada.predict(X_test) proba_ = ada.predict_proba(X_test) accuracy = ada.score(X_test,y_test) print('--------------------算法准确率:',accuracy) display(y_,proba_) 2、Adaboost回归算例 2.1、加载数据 import numpy as np from sklearn.ensemble import AdaBoostRegressor from sklearn import datasets from sklearn import tree import graphviz X,y = datasets.load_boston(return_X_y=True) 2.2、建模 ada = AdaBoostRegressor(n_estimators=3,loss = 'linear',# 线性,误差绝对值 learning_rate=1)#learning_rate 学习率 ada.fit(X,y)#训练 y_ = ada.predict(X)#预测 print(y_[:10]) 2.3、模型可视化 dot_data = tree.export_graphviz(ada[0],filled=True) graph = graphviz.Source(dot_data) graph

2.4、回归树算法流程

1、初始权重,所有样本权重一样都是 ​\bg_white \small \frac{1}{m}, m表示样本数量

w_{(1)} = [w_{11},w_{12},..., w_{1m}],w_{1i} = \frac{1}{m},i = 1,2,...,m

2、接下来,进行for循环遍历k = 1,2,3,…k,表示k棵树

a) 使用具有权重 ​​\bg_white \small w_{(k)} 的样本集来训练数据,得到弱学习器​​G_k(x)

b) 计算训练集上的最大误差

E_k = max|y_i - G_k(x_i)|,i = 1,2,...,m

c) 计算每个样本的相对误差

如果是线性误差,则:​​​​e_{ki} = \frac{|y_i - G_k(x_i)|}{E_k}

如果是平方误差,则:​​​e_{ki} = \frac{(y_i - G_k(x_i))^2}{E_k^2}

如果是指数误差,则:​​​​e_{ki} = 1 - exp({-\frac{|y_i - G_k(x_i)|}{E_k}})

d) 计算回归误差率

​​e_k = \sum\limits_{i = 1}^mw_{ki}e_{ki}

e) 计算弱学习器的权重

​​beta = \frac{e_k}{1 - e_k}

​​\alpha_k = ln\frac{1}{beta}

f) 更新样本权重分布

​​w_{(k + 1)i} = w_{ki} \times beta^{1 - e_{ki}}

​​w_{(k + 1)i} = w_{(k + 1)i} / \sum\limits_{i=1}^mw_{(k+1)i}

2.4、第一棵树构建 w1 = np.full(shape = 506,fill_value=1/506) y1_ = ada[0].predict(X) # 计算预测值和目标值的误差 error_vector = np.abs(y1_ - y) error_max = error_vector.max() if error_max != 0: error_vector /= error_max # 归一化0~1 # 计算算法误差 estimator_error = (w1 * error_vector).sum() print('第一棵树误差:',estimator_error) print('算法误差:',ada.estimator_errors_) # 计算算法权重 beta = estimator_error / (1. - estimator_error) estimator_weight = np.log(1. / beta) print('第一棵树权重:',estimator_weight) print('算法权重:', ada.estimator_weights_) # 根据第一棵树更新权重 w2 = w1 * np.power(beta, (1. - error_vector)) w2 /= w2.sum() # 输出 ''' 第一棵树误差: 0.11315306016068988 算法误差: [0.11315306 0.11657419 0.18593167] 第一棵树权重: 2.0589309911688427 算法权重: [2.05893099 2.02527945 1.47666508] ''' 2.5、第二棵树构建 y2_ = ada[1].predict(X) # 计算预测值和目标值的误差 error_vector = np.abs(y2_ - y) error_max = error_vector.max() if error_max != 0: error_vector /= error_max # 归一化 # 计算算法误差 estimator_error = (w2 * error_vector).sum() print('第二棵树误差:',estimator_error) print('算法误差:',ada.estimator_errors_) # 计算算法权重 beta = estimator_error / (1. - estimator_error) estimator_weight = np.log(1. / beta) print('第二棵树权重:',estimator_weight) print('算法权重:', ada.estimator_weights_) # 权重更新 w3 = w2 * np.power(beta, (1. - error_vector)) w3 /= w3.sum() # 输出 ''' 第二棵树误差: 0.11657418722530435 算法误差: [0.11315306 0.11657419 0.18593167] 第二棵树权重: 2.0252794479876193 算法权重: [2.05893099 2.02527945 1.47666508] ''' 2.6、第三棵树构建 y3_ = ada[2].predict(X) # 计算预测值和目标值的误差 error_vector = np.abs(y3_ - y) error_max = error_vector.max() if error_max != 0: error_vector /= error_max # 计算算法误差 estimator_error = (w3 * error_vector).sum() print('第三棵树误差:',estimator_error) print('算法误差:',ada.estimator_errors_) # 计算算法权重 beta = estimator_error / (1. - estimator_error) estimator_weight = np.log(1. / beta) print('第三棵树权重:',estimator_weight) print('算法权重:', ada.estimator_weights_) # 输出 ''' 第三棵树误差: 0.1859316681718044 算法误差: [0.11315306 0.11657419 0.18593167] 第三棵树权重: 1.4766650774202654 算法权重: [2.05893099 2.02527945 1.47666508] '''



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3