iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0
AI & Data

索引結構與機器學習的相遇系列 第 27

Day 27 - Learned Index實作(1)

  • 分享至 

  • xImage
  •  

前面實作初步的Learned Index並進行測試,今天我們要來實作出Learned Index的完全體!!XD
其實不是完全體,也只是模擬拉 XD
Learned Index 的架構可以分為 LIF、RMI、Search Method,但是,Kraska et al.說明LIF為測試框架,並無完整介紹實際架構為何,因此本次模擬實作Learned Index不包括LIF框架。

Learned Index

Learned Index的主要架構圍繞著 Recursive Model Index(RMI),疊帶式的模型索引架構,但是RMI的架構有幾層?每層有幾個模型?這是可以自行定義,根據 Kraska et al.測試2層的RMI架構,第一層的Model為1個,可以是0~2層神經網路模型,神經元數量8 or 16最好,第二層的架構則選擇簡單的線性回歸,可以有數個。

首先,我們要建置2層架構Learned Index,第二層的Model數量為自帶參數:

class Learned_Index():
    
    def __init__(self, model_num):
        self.RMI = [1, model_num]    # Learned Index RMI架構
        self.index = []              # 儲存模型的索引

再來就是建置模型,所謂的建置模型,就是依據我們設定的Learned Index架構來配置我們的模型與其數量:

def build(self):
    for m in RMI:
        if(m==1):

            # 第一層 => 建置 NN Model 8x8
            model = Sequential()
            model.add(Dense(8, input_dim=1, activation="relu"))
            model.add(Dense(8, activation="relu"))
            model.add(Dense(1))

            sgd=keras.optimizers.SGD(lr=0.000001)    # lr:學習率,可調參數
            model.compile(loss="mse", optimizer=sgd, metrics=["mse"])
            index.append(model)
        else:
            # 第二層 => 建置多個簡單線性回歸
            index.append([])
            for j in range(m):
                model = LinearRegression()
                index[1].append(model)

建置完後,我們就要來訓練資料嚕~
訓練資料有點麻煩,因為必須疊帶訓練,從第一層的1個Model到第二層的多個Models,除此之外,第一層的Model訓練完後,要將資料分配至第二層的各個Model,比較複雜一點,我們明天再來實作出剩餘的部分並詳細解釋!

掰鋪~~

https://ithelp.ithome.com.tw/upload/images/20201012/20129198fjrgWbruGz.png


上一篇
Day 26 - Lognormal 分布測試
下一篇
Day 28 - Learned Index實作(2)
系列文
索引結構與機器學習的相遇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言