




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第python機(jī)器學(xué)習(xí)Sklearn實(shí)戰(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
跳遠(yuǎn)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米跑,跳遠(yuǎn),體前屈,引體,肺活量,身高,體重]
data[男50米跑]=data[男50米跑].astype(np.float)
forcolin[男1000,男50米跑]:
#獲取成績的標(biāo)準(zhǔn)
s=score[col]
defconvert(x):
foriinrange(len(s)):
ifx=s[成績].iloc[0]:
ifx==0:
return0#沒有參加這個(gè)項(xiàng)目
return100
elifxs[成績].iloc[-1]:
return0#跑的太慢
elif(xs[成績].iloc[i-1])and(x=s[成績].iloc[i]):
returns[分?jǐn)?shù)].iloc[i]
data[col+成績]=data[col].map(convert)
forcolin[跳遠(yuǎn),體前屈,引體,肺活量]:
s=score[男+col]
defconvert(x):
foriinrange(len(s)):
ifxs[成績].iloc[i]:
returns[分?jǐn)?shù)].iloc[i]
return0
data[col+成績]=data[col].map(convert)
data.columns
結(jié)果:
Index([班級,性別,姓名,男1000,男50米跑,跳遠(yuǎn),體前屈,引體,肺活量,身高,
體重,男1000成績,男50米跑成績,跳遠(yuǎn)成績,體前屈成績,引體成績,肺活量成績],
dtype=object)
#根據(jù)索引的順序,去data取值
cols=[班級,性別,姓名,男1000,男1000成績,男50米跑,男50米跑成績,跳遠(yuǎn),跳遠(yuǎn)成績,體前屈,體前屈成績,引體,引體成績,肺活量,肺活量成績,身高,體重]
data[cols]
#計(jì)算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)計(jì)分析
data[BMI_score].value_counts().plot(kind=pie,autopct=%0.2f%%)
#統(tǒng)計(jì)分析
data[BMI_score].value_counts().plot(kind=bar)
data.groupby([男1000成績])[BMI_score].count().plot(kind=bar)
adaboost
值
越大,特征越明顯,越被容易分開;越后面的學(xué)習(xí)器,權(quán)重越大
梯度提升樹沒有修改原來的數(shù)據(jù),使用的是殘差,最終結(jié)果就是最后一棵樹
上面的圖不是GBDT
Boosting與Bagging模型相比,Boosting可以同時(shí)降低偏差和方差,Bagging只能降低模型的方差。在實(shí)際應(yīng)用中,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
#計(jì)算第一棵樹權(quán)重
#隨機(jī)森林中每棵樹的權(quán)重是一樣的
#adaboost提升樹中每棵樹的權(quán)重不同
a1=np.round(1/2*np.log((1-e1)/e1),4)
a1
結(jié)果:
0.4236
#樣本預(yù)測準(zhǔn)確:更新的權(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])
#樣本預(yù)測準(zhǔn)確:更新的權(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])
從上述第一輪的整個(gè)迭代過程可以看出:被誤分類樣本的權(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)
#樣本預(yù)測準(zhǔn)確:更新的權(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)
#樣本預(yù)測準(zhǔn)確:更新的權(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
弱分類器合并成強(qiáng)分類器
綜上,將上面計(jì)算得到的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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代持合同終止協(xié)議書范本
- 2025年VFP考試策略試題及答案詳解
- 2024-2025學(xué)年九年級歷史與社會(huì)上冊第一單元20世紀(jì)初的世界與中國第一課世界的格局與第一次世界大戰(zhàn)教案人教版
- 計(jì)算機(jī)三級軟件測試技術(shù)考試的試題及答案解析
- 改建房屋合同協(xié)議書
- 二級C語言考試基礎(chǔ)知識(shí)試題及答案
- 建設(shè)施工合同內(nèi)部協(xié)議書
- 合同安全協(xié)議書范本大全
- C語言與硬件的直接交互試題及答案
- 跨界學(xué)習(xí)的2025年文學(xué)概論試題及答案
- 初三上學(xué)期自我陳述報(bào)告范文800字
- 2023年中考物理專題復(fù)習(xí):《電磁學(xué)》實(shí)驗(yàn)題
- 腹部CT斷層解剖結(jié)構(gòu)肝胰腺
- 建平磷鐵礦業(yè)有限公司磷(含磁鐵磷灰石)礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- DB22∕T 3181-2020 公路水路行業(yè)安全生產(chǎn)風(fēng)險(xiǎn)分級管控和隱患排查治理雙重預(yù)防機(jī)制建設(shè)通用規(guī)范
- GB/T 36713-2018能源管理體系能源基準(zhǔn)和能源績效參數(shù)
- GB/T 25068.1-2020信息技術(shù)安全技術(shù)網(wǎng)絡(luò)安全第1部分:綜述和概念
- “二級甲等婦幼保健院”評審匯報(bào)材料
- 《狼王夢》讀書分享PPT
- 三年級美術(shù)下冊第10課《快樂的節(jié)日》優(yōu)秀課件1人教版
- 電力市場交易模式
評論
0/150
提交評論