python|AdaBoost(AdaBoostClassifier)

# -*- 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 隨機種子設置。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章