半監督學習文章:https://zhuanlan.zhihu.com/p/37747650
自我學習 (self-training)
自我訓練就是通過一系列的步驟,用已有的有標籤的數據(labelled data),去對剩下的還未標記的數據打標籤。從而使得訓練數據(training data)更多。具體步驟如下:
- 初始化有標籤數據和無標籤數據
- 重複
- a) 用有標籤的數據去訓練一個模型
b) 用這個模型來對沒有標籤的數據做預測
c) 只選取最有把握的預測結果來標記數據(unlabelled data)
d) 把新標記好的數據加入到原來的標記好的數據集中,同時把他們從原來的數據集中刪除
- 直到數據集不發生變化
注意不發生變化的可能性有兩種,一種是所有的數據最終都被打了標籤,另一種是該模型找不到“有把握”的預測結果了。
下面以KNN (K-Nearest Neighbour) 爲例:每一次都只找一個最有把握的預測結果。三角形表示爲未做標記的數據集。圓形和正方形就是2類數據。
協同學習 (co-training)
和自我學習一樣,協同學習的目的也是爲了用現有的有標籤的數據去標記其他數據。具體步驟如下:假設現在有數據集,每組數據有2個特徵(feature): x1 和 x2。我們把其中有標籤的那部分數據集稱爲L (表示爲[x1,x2,y]),沒有標籤的數據集稱爲U (表示爲[x1,x2])。
- 初始化數據,把L 分爲L1 ([x1,y]) 和L2 ([x2,y])。這裏注意,L 是一個數據集,裏面包涵了很多數據,我就順便提醒一下。
- 重複:a) 分別用L1和L2訓練出一個模型 F1和F2
b) 分別用模型F1和F2去預測U (給U打標籤),同樣這裏也是隻選出最有把握的一些結果。
c) 把F1預測的結果放入L2,把F2預測的結果放入L1 (交叉放置)
d) 更新L 和 U
3. 直到數據集不發生變化 (和自我學習一樣)