論文閱讀 (六):Scalable Algorithms for Multi-Instance Learning (miVLAD & miFV 2016)

引入

  論文地址:https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tnnls16miFV.pdf
  論文應用:處理大規模數據。
  論文場景:標準多示例。
  論文方法:

  • miVLAD (MIL based on the VLAD representation)
  • miFV (MIL based on the Fisher Vector representation)

1 算法描述

  本文的符號系統如下:

符號 含義
{(X1,y1),,(Xi,yi),,(XNB,yNB)}\{ (X_1, y_1), \dots, (X_i, y_i), \dots, (X_{N_B}, y_{N_B}) \} 數據集
NBN_B 數據集大小
Xi={xi1,,xij,,xi,ni}X_i = \{ \boldsymbol{x}_{i1}, \dots, \boldsymbol{x}_{ij}, \dots, \boldsymbol{x}_{i, n_i} \}
nin_i 包大小
yiY={1,+1}y_i \in \mathcal{Y} = \{ -1, +1 \} 包標籤
xij=[xij1,,xijl,,xijd]TX\boldsymbol{x}_{ij} = [x_{ij1}, \dots, x_{ijl}, \dots, x_{ijd}]^T \in \mathcal{X} 實例
dd 實例維度
xijlx_{ijl} 實例屬性
Ni=i=1NBN_i = \sum_{i = 1}^{N_B} 實例總數

1.1 miVLAD

  這個算法的僞代碼和miFV太像了,這裏就說明一下他如何進行codebook (第4步)和映射 (第6步)。
在這裏插入圖片描述

1.1.1 codebook學習

  步驟如下:
  1)使用kMeans找到訓練集中所有實例的KK個重心:C={c1,,ck,,cK}\mathcal{C} = \{ \boldsymbol{c}_1, \dots, \boldsymbol{c}_k, \dots, \boldsymbol{c}_K \}C\mathcal{C}被稱爲codebook;
  2)將每一個實例xij\mathcal{x}_{ij}分配到最近的重心:ck=NN(xij)\boldsymbol{c}_k = NN (\mathbf{x}_{ij})

  這不就是kmeans嗎。。。
在這裏插入圖片描述

1.1.2 映射

  映射過程如下:
  1)for i=1:Ki = 1 : K
  1.1)對於每一個包XiX_i,計算包中的實例xi\boldsymbol{x}_ick\boldsymbol{c}_k的差異vik\boldsymbol{v}_{ik}vik\boldsymbol{v}_{ik}屬性值的計算如下:
vikl=xijΩxijlckl,(1) v_{ikl} = \sum_{\boldsymbol{x}_{ij \in \Omega}} x_{ijl} - c_{kl}, \tag{1} 其中Ω={xijNN(xij)=ck}\Omega = \{ \boldsymbol{x_{ij}} | NN (\boldsymbol{x}_{ij}) = \boldsymbol{c}_k \},即實例xij\boldsymbol{x}_{ij}是與同一簇的ck\boldsymbol{c}_k進行計算。
  2)KK個差異組合成一個新的向量。

  舉個例子:
  1)找到了3個重心,如下表:

重心 ck1c_{k1} ck2c_{k2} ck3c_{k3}
c1\boldsymbol{c}_1 1 0 0.1
c2\boldsymbol{c}_2 0 1 0
c3\boldsymbol{c}_3 0 0 1

  2)給定包XiX_i

實例 xij1x_{ij1} xij2x_{ij2} xij3x_{ij3}
xi1\boldsymbol{x}_{i1} 1.2 0 0
xi2\boldsymbol{x}_{i2} 0.9 0 0.1
xi3\boldsymbol{x}_{i3} 0 1.1 0
xi4\boldsymbol{x}_{i4} 0 0 0.8

  3)由於xi1\boldsymbol{x}_{i1}xi2\boldsymbol{x}_{i2}和重心c1\boldsymbol{c}_1爲一類,因此vi10=(1.21)+(0.91)=0.1v_{i10} = (1.2 - 1) + (0.9 - 1) = 0.1,最終vi1=[0.1,0,0.1]\boldsymbol{v}_{i1} = [0.1, 0, -0.1]
  4)最終一個包可以由以下三個向量表示:

vi\boldsymbol{v}_i vik1v_{ik1} vik2v_{ik2} vik3v_{ik3}
vi1\boldsymbol{v}_{i1} 0.1 0 -0.1
vi2\boldsymbol{v}_{i2} 0 0.1 0
vi3\boldsymbol{v}_{i3} 0 0 -0.2

  5)vi\boldsymbol{v}_i延展成一個KdK * d的向量:
vi=[0.1,0,0.1,0,0.1,0,0,0,0.2].(1*) \boldsymbol{v}_i = [0.1, 0, -0.1, 0, 0.1, 0, 0, 0, -0.2]. \tag{1*}   6)使用以下公式對vi\boldsymbol{v}_i的每一個值進行處理:
vil=sign(vil)vil.(2*) v_{i \cdot l} = sign(v_{i \cdot l}) \sqrt{| v_{i \cdot l} |}. \tag{2*} 這時將得到:
vi=[0.32,0,0.32,0,0.32,0,0,0,0.45].(3*) \boldsymbol{v}_i= [0.32, 0, -0.32, 0, 0.32, 0, 0, 0, -0.45]. \tag{3*}   7)對vi\boldsymbol{v}_i進行二範式處理:
vi=vivi2(4*) \boldsymbol{v}_i = \frac{\boldsymbol{v}_i}{\| \boldsymbol{v}_i \|_2} \tag{4*}   8)最終使用以下向量對包XiX_i進行描述:
vi=[0.45,0,0.45,0,0.45,0,0,0,0.63].(3*) \boldsymbol{v}_i= [0.45, 0, -0.45, 0, 0.45, 0, 0, 0, -0.63]. \tag{3*}

1.2 miFV

  該算法與Scalable Multi-Instance Learning基本一致,不做贅述。

2 實驗

  論文使用到的數據集信息如下:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章