最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python機(jī)器學(xué)習(xí)Sklearn實(shí)戰(zhàn)adaboost算法示例詳解

 更新時(shí)間:2021年11月27日 10:19:43   作者:Grateful_Dead424  
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)Sklearn實(shí)戰(zhàn)adaboost算法的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

pandas批量處理體測(cè)成績(jī)

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
data = pd.read_excel("/Users/zhucan/Desktop/18級(jí)高一體測(cè)成績(jī)匯總.xls")
cond = data["班級(jí)"] != "班級(jí)"
data = data[cond]
 
data.fillna(0,inplace=True)
data.isnull().any()   #沒(méi)有空數(shù)據(jù)了

結(jié)果:

班級(jí)? ? ? ?False

性別? ? ? ?False

姓名? ? ? ?False

1000米? ? False

50米? ? ? False

跳遠(yuǎn)? ? ? ?False

體前屈? ? ? False

引體? ? ? ?False

肺活量? ? ? False

身高? ? ? ?False

體重? ? ? ?False

dtype: bool

data.head()

#1000米成績(jī)有string 有int
def convert(x):
    if isinstance(x,str):
        minute,second = x.split("'")
        int(minute)
        minute = int(minute)
        second = int(second)
        return minute + second/100.0
    else:
        return x
data["1000米"] = data["1000米"].map(convert)

score = pd.read_excel("/Users/zhucan/Desktop/體側(cè)成績(jī)?cè)u(píng)分表.xls",header=[0,1])
score

def convert(item):
    m,s = item.strip('"').split("'")
    m,s =int(m),int(s)
    return m+s/100.0
score.iloc[:,-4] = score.iloc[:,-4].map(convert) 
def convert(item):
    m,s = item.strip('"').split("'")
    m,s =int(m),int(s)
    return m+s/100.0    
score.iloc[:,-2] = score.iloc[:,-2].map(convert)
score

data.columns = ['班級(jí)', '性別', '姓名', '男1000', '男50米跑', '跳遠(yuǎn)', '體前屈', '引體', '肺活量', '身高', '體重']
data["男50米跑"] = data["男50米跑"].astype(np.float)
for col in ["男1000","男50米跑"]:
    #獲取成績(jī)的標(biāo)準(zhǔn)
    s = score[col]
    def convert(x):
        for i in range(len(s)):
            if x<=s["成績(jī)"].iloc[0]:
                if x == 0:
                    return 0 #沒(méi)有參加這個(gè)項(xiàng)目
                return 100
            elif x>s["成績(jī)"].iloc[-1]:
                return 0  #跑的太慢
            elif (x>s["成績(jī)"].iloc[i-1]) and (x<=s["成績(jī)"].iloc[i]):
                return s["分?jǐn)?shù)"].iloc[i]
    data[col + "成績(jī)"] = data[col].map(convert)

for col in ['跳遠(yuǎn)', '體前屈', '引體', '肺活量']:
    s = score["男"+col]
    def convert(x):
        for i in range(len(s)):
            if x>s["成績(jī)"].iloc[i]:
                return s["分?jǐn)?shù)"].iloc[i]
        return 0
    data[col+"成績(jī)"] = data[col].map(convert)

data.columns

?結(jié)果:

Index(['班級(jí)', '性別', '姓名', '男1000', '男50米跑', '跳遠(yuǎn)', '體前屈', '引體', '肺活量', '身高',
       '體重', '男1000成績(jī)', '男50米跑成績(jī)', '跳遠(yuǎn)成績(jī)', '體前屈成績(jī)', '引體成績(jī)', '肺活量成績(jī)'],
      dtype='object')
#根據(jù)索引的順序,去data取值
cols = ['班級(jí)', '性別', '姓名', '男1000','男1000成績(jī)','男50米跑','男50米跑成績(jī)','跳遠(yuǎn)','跳遠(yuǎn)成績(jī)','體前屈','體前屈成績(jī)','引體','引體成績(jī)', '肺活量','肺活量成績(jī)','身高','體重']
data[cols]

#計(jì)算BMI
data["BMI"] = data["體重"]/data["身高"]
def convert(x):
    if x>100:
        return x/100
    else:
        return x
data["身高"] = data["身高"].map(convert)
data["BMI"] = data["體重"]/(data["身高"])**2
def convert_bmi(x):
    if x >= 26.4:
        return 60
    elif (x <= 16.4) or (x > 23.3 and x <= 26.3):
        return 80
    elif x >= 16.5 and x <= 23.2:
        return 100
    else:
        return 0
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成績(jī)"])["BMI_score"].count().plot(kind = "bar")

adaboost

?

?值

越大,特征越明顯,越被容易分開(kāi);越后面的學(xué)習(xí)器,權(quán)重越大

梯度提升樹(shù)沒(méi)有修改原來(lái)的數(shù)據(jù),使用的是殘差,最終結(jié)果就是最后一棵樹(shù)

上面的圖不是GBDT

Boosting與Bagging模型相比,Boosting可以同時(shí)降低偏差和方差,Bagging只能降低模型的方差。在實(shí)際應(yīng)用中,Boosting算法也還是存在明顯的高方差問(wèn)題,也就是過(guò)擬合。?

import numpy as np
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原理案例舉例

from sklearn.ensemble import AdaBoostClassifier
from sklearn import tree
import matplotlib.pyplot as plt
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ì)算第一棵樹(shù)權(quán)重
#隨機(jī)森林中每棵樹(shù)的權(quán)重是一樣的
#adaboost提升樹(shù)中每棵樹(shù)的權(quán)重不同
a1 = np.round(1/2*np.log((1-e1)/e1),4)
a1

結(jié)果:

0.4236

#樣本預(yù)測(cè)準(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ù)測(cè)準(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è)迭代過(guò)程可以看出:被誤分類(lèi)樣本的權(quán)值之和影響誤差率,誤差率影響基本分類(lèi)器在最終分類(lèi)器中所占的權(quán)重

分類(lèi)函數(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ù)測(cè)準(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])

樹(shù)劃分按照gini系數(shù);結(jié)果和按照誤差率是一致的~?

y_ = ada[2].predict(X)
e3 = (w3*(y_ != y)).sum()
a3 = 1/2*np.log((1-e3)/e3)
a3
#樣本預(yù)測(cè)準(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

弱分類(lèi)器合并成強(qiáng)分類(lèi)器

綜上,將上面計(jì)算得到的a1、a2、a3各值代入G(x)中

G(x) = sign[f3(x)] = sign[ a1 * G1(x) + a2 * G2(x) + a3 * G3(x) ]

得到最終的分類(lèi)器為:

G(x) = sign[f3(x)] = sign[ 0.4236G1(x) + 0.6496G2(x)+0.7514G3(x) ]

ada.predict(X)

結(jié)果:

array([ 1,  1,  1, -1, -1, -1,  1,  1,  1, -1])
y_predict = a1*ada[0].predict(X) +  a2*ada[1].predict(X) +a3*ada[2].predict(X)
y_predict
np.sign(y_predict).astype(np.int)
array([ 1,  1,  1, -1, -1, -1,  1,  1,  1, -1])

以上就是python機(jī)器學(xué)習(xí)Sklearn實(shí)戰(zhàn)adaboost算法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于機(jī)器學(xué)習(xí)Sklearn實(shí)戰(zhàn)adaboost算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Opencv+Python 色彩通道拆分及合并的示例

    Opencv+Python 色彩通道拆分及合并的示例

    今天小編就為大家分享一篇Opencv+Python 色彩通道拆分及合并的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python操作yaml的方法詳解

    python操作yaml的方法詳解

    這篇文章主要為大家介紹了python操作yaml的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 利用Python程序讀取Excel創(chuàng)建折線(xiàn)圖

    利用Python程序讀取Excel創(chuàng)建折線(xiàn)圖

    這篇文章主要介紹了利用Python程序讀取Excel創(chuàng)建折線(xiàn)圖,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Python2與Python3的區(qū)別點(diǎn)整理

    Python2與Python3的區(qū)別點(diǎn)整理

    在本篇文章里小編給大家整理的是關(guān)于Python2與Python3的區(qū)別點(diǎn)整理內(nèi)容,需要的朋友們可以參考下。
    2019-12-12
  • Python如何利用正則表達(dá)式爬取網(wǎng)頁(yè)信息及圖片

    Python如何利用正則表達(dá)式爬取網(wǎng)頁(yè)信息及圖片

    這篇文章主要給大家介紹了關(guān)于Python如何利用正則表達(dá)式爬取網(wǎng)頁(yè)信息及圖片的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python類(lèi)型強(qiáng)制轉(zhuǎn)換long to int的代碼

    python類(lèi)型強(qiáng)制轉(zhuǎn)換long to int的代碼

    python的int型最大值和系統(tǒng)有關(guān),32位和64位系統(tǒng)結(jié)果是不同的,分別為2的31次方減1和2的63次方減1,可以通過(guò)sys.maxint查看此值
    2013-02-02
  • python實(shí)現(xiàn)登錄密碼重置簡(jiǎn)易操作代碼

    python實(shí)現(xiàn)登錄密碼重置簡(jiǎn)易操作代碼

    這篇文章主要介紹了python實(shí)現(xiàn)登錄密碼重置簡(jiǎn)易操作,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • Python使用正則表達(dá)式實(shí)現(xiàn)文本替換的方法

    Python使用正則表達(dá)式實(shí)現(xiàn)文本替換的方法

    這篇文章主要介紹了Python使用正則表達(dá)式實(shí)現(xiàn)文本替換的方法,結(jié)合實(shí)例形式分析了Python使用正則表達(dá)式實(shí)現(xiàn)文本替換的具體操作步驟與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • 答題輔助python代碼實(shí)現(xiàn)

    答題輔助python代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了答題輔助python代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 深入分析Python中Lambda函數(shù)的用法

    深入分析Python中Lambda函數(shù)的用法

    lambda函數(shù)是Python中常用的內(nèi)置函數(shù),又稱(chēng)為匿名函數(shù)。和普通函數(shù)相比,它只有函數(shù)體,省略了def和return,使得結(jié)構(gòu)看起來(lái)更精簡(jiǎn)。本文將詳細(xì)說(shuō)說(shuō)Lambda函數(shù)的用法,需要的可以參考一下
    2022-12-12

最新評(píng)論

巴青县| 若尔盖县| 闽清县| 甘德县| 图木舒克市| 新余市| 景德镇市| 隆化县| 澄江县| 内丘县| 荆门市| 雅安市| 两当县| 行唐县| 定日县| 中超| 高平市| 新干县| 章丘市| 运城市| 高台县| 平顺县| 阳西县| 新丰县| 郓城县| 高青县| 灵山县| 韶关市| 邢台县| 塔城市| 萨迦县| 海林市| 镇宁| 庆城县| 阜宁县| 宝坻区| 盐亭县| 新乡市| 抚宁县| 正安县| 南通市|