iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0

昨天,我們把基尼係數算完,那今天,我打算建立bagging算法函數:
對於有n個資料的資料集,我們取出m個資料(m<=n),這m個資料採用:自助抽樣法
(也就是每次從n筆資料中取出一筆,取完之後直接放資料裡那代表該資料有機會再次被選取)
而重複這件事m次,就會得到一個子資料集m1
而再重複這件事,就會得到資料集m1,m2…mk當成訓練集,再針對訓練集下去做模型來取得k個模型後,再針對這k個模型去做取平均值、取多數票等方法,如圖:

https://ithelp.ithome.com.tw/upload/images/20210918/201416542G5UWbDjp9.pnghttps://ithelp.ithome.com.tw/upload/images/20210918/20141654KghSKtyYvV.png
所以以下是關於bagging的程式碼實際執行:基本上會設定m和k,但在隨機森林裡,我們想要建立隨機樹,而樹的特徵也是隨機選取,所以再篩選樹的特徵時, 我們要用隨機方式選取d個特徵,程式碼如下(我先不用dataFrame來寫(比較好理解),在後面完整實作時,再改用dataFrame):

import random as rd
#一個5維資料,共5筆,data(第0維為y)
data=[[1,"a",0.852,5,1.5],[2,"b",0.31,8,8.1],[1,"b",0.589,9,5.6],[1,"c",0.01,8,2.3],[2,"c",0.258,10,1.1]]
#預設m=4:表示重複抽資料4次;k=5:表示5組資料;d=3:隨機選三個特徵
def bagging_k(data,m=4,k=5,d=3):
    n=len(data)
    #建立放全部資料的data_k
    data_k=[]
    for j in range(k):
        data_use1=[]
        #選取除目標以外d個特徵
        features = rd.sample(range(1,n), d)
        #把目標加回去
        features.insert(0,0) 
        features.sort()
        print("第",j+1,"組特徵:",features)
        for r in range(n):    
            data_use2=[]
            for q in features:
                data_use2.extend([data[r][q]])
            data_use1.append(data_use2)
        #data_use1其實就是data資料-->只是只選擇特徵下的資料
        data_m=[]
        #重複抽樣過程
        for i in range(m):
            rows=rd.randint(0, len(data_use1)-1)
            data_m.append(data_use1[rows])
        print("第",j+1,"組數據:",data_m)
        data_k.append(data_m)
    return data_k
print("全部數據:",bagging_k(data)) 

結果如下:

第 1 組特徵: [0, 1, 3, 4]
第 1 組數據: [[2, 'b', 8, 8.1], [2, 'b', 8, 8.1], [1, 'a', 5, 1.5], [1, 'b', 9, 5.6]]
第 2 組特徵: [0, 2, 3, 4]
第 2 組數據: [[1, 0.01, 8, 2.3], [1, 0.01, 8, 2.3], [2, 0.31, 8, 8.1], [2, 0.31, 8, 8.1]]
第 3 組特徵: [0, 1, 2, 3]
第 3 組數據: [[1, 'c', 0.01, 8], [2, 'c', 0.258, 10], [2, 'b', 0.31, 8], [1, 'b', 0.589, 9]]
第 4 組特徵: [0, 1, 2, 4]
第 4 組數據: [[2, 'b', 0.31, 8.1], [2, 'c', 0.258, 1.1], [2, 'c', 0.258, 1.1], [1, 'a', 0.852, 1.5]]
第 5 組特徵: [0, 1, 2, 4]
第 5 組數據: [[1, 'b', 0.589, 5.6], [2, 'c', 0.258, 1.1], [1, 'c', 0.01, 2.3], [2, 'b', 0.31, 8.1]]
全部數據: [[[2, 'b', 8, 8.1], [2, 'b', 8, 8.1], [1, 'a', 5, 1.5], [1, 'b', 9, 5.6]], [[1, 0.01, 8, 2.3], [1, 0.01, 8, 2.3], [2, 0.31, 8, 8.1], [2, 0.31, 8, 8.1]], [[1, 'c', 0.01, 8], [2, 'c', 0.258, 10], [2, 'b', 0.31, 8], [1, 'b', 0.589, 9]], [[2, 'b', 0.31, 8.1], [2, 'c', 0.258, 1.1], [2, 'c', 0.258, 1.1], [1, 'a', 0.852, 1.5]], [[1, 'b', 0.589, 5.6], [2, 'c', 0.258, 1.1], [1, 'c', 0.01, 2.3], [2, 'b', 0.31, 8.1]]]

好,今天實作部分就到這,明天再開始做分類動作

蒼蠅飛到了小屋內,停留在燈泡上,燈泡光芒慢慢的變亮,啪啦一聲,燈泡瞬間破裂並刺穿了蒼蠅的身體,一瞬間,蒼蠅化成了一攤紅水,灑向了地面,地面上突然冒出了一隻紅色手,正試圖撥開土,往外爬,但在那隻手碰觸到掉在地板玻璃碎片時,那隻手突然停了下來 

				--|你走了,我卻未曾離開過 |--     CS.MM

上一篇
DAY03隨機森林演算法
下一篇
DAY05隨機森林演算法(續2)
系列文
數據分析方法研究和理解演算法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言