




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第python機器學習Sklearn實戰(zhàn)adaboost算法示例詳解importmatplotlib.pyplotasplt
data=pd.read_excel(/Users/zhucan/Desktop/18級高一體測成績匯總.xls)
cond=data[班級]!=班級
data=data[cond]
data.fillna(0,inplace=True)
data.isnull().any()#沒有空數(shù)據(jù)了
結(jié)果:
班級False
性別False
姓名False
1000米False
50米False
跳遠False
體前屈False
引體False
肺活量False
身高False
體重False
dtype:bool
data.head()
#1000米成績有string有int
defconvert(x):
ifisinstance(x,str):
minute,second=x.split()
int(minute)
minute=int(minute)
second=int(second)
returnminute+second/100.0
else:
returnx
data[1000米]=data[1000米].map(convert)
score=pd.read_excel(/Users/zhucan/Desktop/體側(cè)成績評分表.xls,header=[0,1])
score
defconvert(item):
m,s=item.strip().split()
m,s=int(m),int(s)
returnm+s/100.0
score.iloc[:,-4]=score.iloc[:,-4].map(convert)
defconvert(item):
m,s=item.strip().split()
m,s=int(m),int(s)
returnm+s/100.0
score.iloc[:,-2]=score.iloc[:,-2].map(convert)
score
data.columns=[班級,性別,姓名,男1000,男50米跑,跳遠,體前屈,引體,肺活量,身高,體重]
data[男50米跑]=data[男50米跑].astype(np.float)
forcolin[男1000,男50米跑]:
#獲取成績的標準
s=score[col]
defconvert(x):
foriinrange(len(s)):
ifx=s[成績].iloc[0]:
ifx==0:
return0#沒有參加這個項目
return100
elifxs[成績].iloc[-1]:
return0#跑的太慢
elif(xs[成績].iloc[i-1])and(x=s[成績].iloc[i]):
returns[分數(shù)].iloc[i]
data[col+成績]=data[col].map(convert)
forcolin[跳遠,體前屈,引體,肺活量]:
s=score[男+col]
defconvert(x):
foriinrange(len(s)):
ifxs[成績].iloc[i]:
returns[分數(shù)].iloc[i]
return0
data[col+成績]=data[col].map(convert)
data.columns
結(jié)果:
Index([班級,性別,姓名,男1000,男50米跑,跳遠,體前屈,引體,肺活量,身高,
體重,男1000成績,男50米跑成績,跳遠成績,體前屈成績,引體成績,肺活量成績],
dtype=object)
#根據(jù)索引的順序,去data取值
cols=[班級,性別,姓名,男1000,男1000成績,男50米跑,男50米跑成績,跳遠,跳遠成績,體前屈,體前屈成績,引體,引體成績,肺活量,肺活量成績,身高,體重]
data[cols]
#計算BMI
data[BMI]=data[體重]/data[身高]
defconvert(x):
ifx100:
returnx/100
else:
returnx
data[身高]=data[身高].map(convert)
data[BMI]=data[體重]/(data[身高])**2
defconvert_bmi(x):
ifx=26.4:
return60
elif(x=16.4)or(x23.3andx=26.3):
return80
elifx=16.5andx=23.2:
return100
else:
return0
data[BMI_score]=data[BMI].map(convert_bmi)
#統(tǒng)計分析
data[BMI_score].value_counts().plot(kind=pie,autopct=%0.2f%%)
#統(tǒng)計分析
data[BMI_score].value_counts().plot(kind=bar)
data.groupby([男1000成績])[BMI_score].count().plot(kind=bar)
adaboost
值
越大,特征越明顯,越被容易分開;越后面的學習器,權(quán)重越大
梯度提升樹沒有修改原來的數(shù)據(jù),使用的是殘差,最終結(jié)果就是最后一棵樹
上面的圖不是GBDT
Boosting與Bagging模型相比,Boosting可以同時降低偏差和方差,Bagging只能降低模型的方差。在實際應用中,Boosting算法也還是存在明顯的高方差問題,也就是過擬合。
importnumpyasnp
y=np.array([0,1]*5)
y_=np.array([0,0,0,0,0,0,0,1,0,1])
w=0.1*(y!=y_).sum()
round(w,1)
結(jié)果:
0.3
0.5*np.log((1-0.3)/0.3)
round((0.5*np.log((1-0.3)/0.3)),2)
結(jié)果:
0.42
adaboost原理案例舉例
fromsklearn.ensembleimportAdaBoostClassifier
fromsklearnimporttree
importmatplotlib.pyplotasplt
X=np.arange(10).reshape(-1,1)
y=np.array([1,1,1,-1,-1,-1,1,1,1,-1])
ada=AdaBoostClassifier(n_estimators=3)
ada.fit(X,y)
plt.figure(figsize=(9,6))
_=tree.plot_tree(ada[0])
y_=ada[0].predict(X),4
y_
結(jié)果:
array([1,1,1,-1,-1,-1,-1,-1,-1,-1])
e1=np.round(0.1*(y!=y_).sum(),4)
e1
結(jié)果:
0.3
#計算第一棵樹權(quán)重
#隨機森林中每棵樹的權(quán)重是一樣的
#adaboost提升樹中每棵樹的權(quán)重不同
a1=np.round(1/2*np.log((1-e1)/e1),4)
a1
結(jié)果:
0.4236
#樣本預測準確:更新的權(quán)重
w2=0.1*np.e**(-a1*y*y_)
w2=w2/w2.sum()
np.round(w2,4)
結(jié)果:
array([0.0714,0.0714,0.0714,0.0714,0.0714,0.0714,0.1667,0.1667,
0.1667,0.0714])
#樣本預測準確:更新的權(quán)重
w2=0.1*np.e**(-a1*y*y_)
w2=w2/w2.sum()
np.round(w2,4)
結(jié)果:
array([0.0714,0.0714,0.0714,0.0714,0.0714,0.0714,0.1667,0.1667,
0.1667,0.0714])
從上述第一輪的整個迭代過程可以看出:被誤分類樣本的權(quán)值之和影響誤差率,誤差率影響基本分類器在最終分類器中所占的權(quán)重
分類函數(shù)f1(x)=a1*G1(x)=0.4236G1(x)
plt.figure(figsize=(9,6))
_=tree.plot_tree(ada[1])
e2=0.0714*3
e2
結(jié)果:
0.2142
a2=np.round(1/2*np.log((1-e2)/e2),4)
a2
結(jié)果:
0.6499
y_=ada[1].predict(X)
#樣本預測準確:更新的權(quán)重
w3=w2*np.e**(-a2*y*y_)
w3=w3/w3.sum()
np.round(w3,4)
結(jié)果:
array([0.0454,0.0454,0.0454,0.1667,0.1667,0.1667,0.106,0.106,
0.106,0.0454])
plt.figure(figsize=(9,6))
_=tree.plot_tree(ada[2])
樹劃分按照gini系數(shù);結(jié)果和按照誤差率是一致的~
y_=ada[2].predict(X)
e3=(w3*(y_!=y)).sum()
a3=1/2*np.log((1-e3)/e3)
#樣本預測準確:更新的權(quán)重
w4=w3*np.e**(-a3*y*y_)
w4=w4/w4.sum()
np.round(w4,4)
結(jié)果:
array([0.125,0.125,0.125,0.1019,0.1019,0.1019,0.0648,0.0648,
0.0648,0.125])
display(a1,a2,a3)
結(jié)果:
0.4236
0.6498960745553556
0.7521752700597043
弱分類器合并成強分類器
綜上,將上面計算得到的a1、a2、a3各值代入G(x)中
G(x)=sign[f3(x)]=sign[a1*G1(x)+a2*G2(x)+a3*G3(x)]
得到最終的分類器為:
G(x)=sign[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)]
ada.predict(X)
結(jié)果:
array([1,1,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人資金借貸合同范例
- 醫(yī)療設(shè)備電氣安全檢查的重要性
- 企業(yè)內(nèi)部實驗室應急管理與實施案例
- 企業(yè)用房購買合同范例
- 醫(yī)療數(shù)據(jù)共享的保障者-區(qū)塊鏈技術(shù)的角色與挑戰(zhàn)
- 醫(yī)療技術(shù)IP保護的挑戰(zhàn)與對策分析
- 主機租賃服務合同范例
- M視域下淺析優(yōu)化患方對診療記錄保密的措施與問題應對
- 個人豬場租賃合同范例
- 公共服務合同范例
- 2021年武漢中考數(shù)學試題(附答案)
- 部編版五年級語文上冊期末群文閱讀 試卷附答案
- DB21-T 2850-2017旅游景區(qū)安全管理規(guī)范
- 規(guī)范會議記錄培訓課件
- AIB(2022版)統(tǒng)一檢查標準-前提方案與食品安全程序
- GIS(地理信息系統(tǒng))空間分析
- 《風險管理理論》課件
- 防汛行政首長培訓課件
- FBS-GC-001-分布式光伏施工日志
- 《裝備質(zhì)量問題歸零實施指南》
- 人衛(wèi)版肺部疾病教學課件
評論
0/150
提交評論