19 |
您所在的位置:网站首页 › adaboost算法例题 › 19 |
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、初始权重,所有样本权重一样都是 , m表示样本数量 2、接下来,进行for循环遍历k = 1,2,3,…k,表示k棵树 a) 使用具有权重 的样本集来训练数据,得到弱学习器 b) 计算训练集上的最大误差 c) 计算每个样本的相对误差 如果是线性误差,则: 如果是平方误差,则: 如果是指数误差,则: d) 计算回归误差率 e) 计算弱学习器的权重 f) 更新样本权重分布 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 |