一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python機(jī)器學(xué)習(xí)Sklearn實(shí)戰(zhàn)adaboost算法示例詳解

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

2022-03-09 00:14Grateful_Dead424 Python

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

pandas批量處理體測成績

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級高一體測成績匯總.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()

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

#1000米成績有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)

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

score = pd.read_excel("/Users/zhucan/Desktop/體側(cè)成績評分表.xls",header=[0,1])
score

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

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

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

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

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

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

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

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]

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

#計(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")

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

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

data.groupby(["男1000成績"])["BMI_score"].count().plot(kind = "bar")

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

 

adaboost

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

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

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

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

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

上面的圖不是GBDT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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])

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

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)

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

plt.figure(figsize = (9,6))
_ = tree.plot_tree(ada[1])

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

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])

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

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

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

y_ = ada[2].predict(X)
e3 = (w3*(y_ != y)).sum()
a3 = 1/2*np.log((1-e3)/e3)
a3
#樣本預(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, -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算法的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/Grateful_Dead424/article/details/121064899

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎影视在线影院在线观看观看 | 草久热 | 国产日韩欧美一区 | 99热这里只有精 | 国产91页 | 亚洲人和日本人hd | bl放荡受np双性 | 国产suv精品一区二区四区三区 | 91短视频在线免费观看 | 俄罗斯三级在线观看级 | 热99精品只有里视频最新 | 欧美又黄又激烈真实床戏 | 欧美操屁股| 青青青在线视频播放 | 免费一级毛片在线播放放视频 | 惩罚狠h调教灌满 | 日本高清在线播放 | 国产精品福利在线观看免费不卡 | 91精品婷婷国产综合久久8 | 四虎成人影院 | 四虎影视在线看免费 720p | futa巨大好爽好长 | 羞羞私人影院可以直接免费观影吗 | 国产成人a∨麻豆精品 | 91精品国产综合久久消防器材 | 近亲乱中文字幕 | 俄罗斯一级大片 | 美女日b视频 | 毛片一级免费 | 翁公与小莹在客厅激情 | 国产一卡2卡3卡四卡精品网 | 午夜宅男在线观看 | xxxx18日本视频xxxxx | 嘿嘿午夜 | 91桃色视频在线观看 | 欧美一区二区三区精品国产 | 男人狂擦女人的下面视频 | 天天舔天天干 | 丁香五香天堂 | 五月一区二区久久综合天堂 | 日本zzzzwww大片免费 |