# -*- coding: utf-8 -*-
"""
Created on Thu Nov 7 15:49:21 2019
@author: weiping
"""
from sklearn.ensemble import AdaBoostClassifier as abc
from sklearn.ensemble import AdaBoostRegressor as abr
import pandas as pd
import numpy as np
import sklearn.datasets as skdata
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import metrics
'''分类'''
data_x,data_y = skdata.load_iris().data, skdata.load_iris().target
df = pd.DataFrame(data_x,columns = list('abcd'))
df['f'] = data_y
x_tr,x_te,y_tr,y_te = train_test_split(df[list('abcd')],df['f'],train_size = 0.7,random_state =22)
rf = abc()
rf.fit(x_tr,y_tr)
rf_p = rf.predict(x_te)
f_importances = rf.feature_importances_ #特征的重要性
imp = pd.Series(f_importances,index = list('abcd')) #画出特征重要程度的条形图
plt.barh(imp.index,imp.values)
metrics.confusion_matrix(y_te,rf_p)
'''回归'''
d_x ,d_y = skdata.load_boston().data,skdata.load_boston().target
x_tr,x_te,y_tr,y_te = train_test_split(d_x,d_y,train_size = 0.7,random_state = 22)
rfr = abr()
rfr.fit(x_tr,y_tr)
rf_p = rfr.predict(x_te)
imp = pd.Series(rfr.feature_importances_,index = list('abcdefghijklm'))
plt.barh(imp.index,imp.values)
metrics.r2_score(rf_p,y_te)
参数(https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier)
base_estimator | 基分类器,默认是决策树,在该分类器基础上进行boosting,理论上可以是任意一个分类器,但是如果是其他分类器时需要指明样本权重。 |
n_estimators | 基分类器提升(循环)次数,默认是50次,这个值过大,模型容易过拟合;值过小,模型容易欠拟合。 |
learning_rate | 学习率,表示梯度收敛速度,默认为1,如果过大,容易错过最优值,如果过小,则收敛速度会很慢;该值需要和n_estimators进行一个权衡,当分类器迭代次数较少时,学习率可以小一些,当迭代次数较多时,学习率可以适当放大。 |
algorithm | boosting算法,也就是模型提升准则,有两种方式SAMME和SAMME.R两种,默认是SAMME.R,两者的区别主要是弱学习器权重的度量,前者是对样本集预测错误的概率进行划分的,后者是对样本集的预测错误的比例,即错分率进行划分的,默认是用的SAMME.R。 |
random_state | 随机种子设置。 |