天天看點

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

作者:deephub

标簽傳播算法是一種半監督機器學習算法,它将标簽配置設定給以前未标記的資料點。要在機器學習中使用這種算法,隻有一小部分示例具有标簽或分類。在算法的模組化、拟合和預測過程中,這些标簽被傳播到未标記的資料點。

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

LabelPropagation

LabelPropagation是一種在圖中查找社群的快速算法。它隻使用網絡結構作為指導來檢測這些連接配接,不需要預定義的目标函數或關于群體的先驗資訊。标簽傳播通過在網絡中傳播标簽并基于标簽傳播過程形成連接配接來實作。

接近的标簽通常會被賦予相同的标簽。單個标簽可以在密集連接配接的節點組中占主導地位,但在稀疏連接配接的區域中會遇到麻煩。标簽将被限制在一個緊密連接配接的節點組中,當算法完成時,那些最終具有相同标簽的節點可以被視為同一連接配接的一部分。該算法使用了圖論,具體如下:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

LabelPropagation算法以下列方式工作:-

  • 每個節點都使用唯一的标簽進行初始化。
  • 這些标簽通過網絡傳播。
  • 在每次傳播疊代中,每個節點都會将其标簽更新為最大鄰居數所屬的标簽。
  • 當每個節點具有其鄰居的多數标簽時,标簽傳播算法達到收斂。
  • 如果達到收斂或使用者定義的最大疊代次數,則标簽傳播算法停止。

為了示範LabelPropagation算法的工作原理,們使用 Pima Indians 的資料集,建立程式時,我導入了運作它所需的庫

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

複制一份資料并且将lable列作為訓練目标

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

使用matplotlib可視化:

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

使用随機數生成器随機化資料集中70%的标簽。然後随機标簽被配置設定-1:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

在對資料進行預處理之後,定義因變量和自變量,分别為y和X。y變量是最後一列,X變量是剩下的所有部分:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

使用sklearn的LabelPropagation數來标記所有未标記的資料點:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

準确率為發現它是76.9%。

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

下面我們看看另外一個算法LabelSpreading。

LabelSpreading

LabelSpreading也是一種流行的半監督學習方法。建立一個連接配接訓練資料集中樣本的圖,并通過圖的邊緣傳播已知的标簽來标記未标記的示例。

LabelSpreading是由 Dengyong Zhou 等人在他們 2003 年題為“Learning with Local and Global Consistency”的論文中提出的的。 半監督學習的關鍵是一緻性的先驗假設,這意味着:附近的點可能具有相同的标簽,并且同一結構上的點(通常稱為簇流形)很可能具有相同的标簽。

LabelSpreading可以認為是LabelPropagation的正則化形式。在圖論中,拉普拉斯矩陣是圖的矩陣表示,拉普拉斯矩陣的公式為:

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

L是拉普拉斯矩陣,D是度矩陣,A是鄰接矩陣。

下面是一個簡單的無向圖示記的例子和它拉普拉斯矩陣的結果

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

本文将使用sonar資料集示範如何使用sklearn的LabelSpreading函數。

這裡的庫比上面的多,是以簡單解釋一下:

  • Numpy執行數值計算并建立Numpy數組
  • Pandas處理資料
  • Sklearn執行機器學習操作
  • Matplotlib和seaborn來可視化資料,為可視化資料提供統計資訊
  • Warning,用于忽略程式執行期間出現的警告

導入完成後使用pandas将讀入資料集:

我使用seaborn建立了熱圖:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

先做一個就簡單的預處理,删除具有高度相關性的列,這樣将列數從 61 減少到 58:

然後對資料進行打亂重排,這樣在打亂的資料集中預測通常更準确,複制一個資料集的副本,并将 y_orig 定義為訓練目标:

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

使用matplotlib來繪制資料點的2D散點圖:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

使用随機數生成器随機化資料集中60%的标簽。然後随機标簽被配置設定-1:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

在對資料進行預處理之後,定義因變量和自變量,分别為y和X。y變量是最後一列,X變量是剩下的所有部分:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

然後使用sklearn的LabelSpreading算法對未标記的行進行訓練和預測。

使用這種方法,能夠達到87.98%的準确率:-

兩個半監督标簽傳播算法 LabelPropagation和LabelSpreading

簡單對比

1、labelspreading中含有alpha=0.2,alpha稱為夾緊系數,指的是采用其鄰居的資訊而不是其初始标簽的相對量,若為0,表示保留初始标簽資訊,若為1,表示替換所有初始資訊;設定alpha=0.2,意味着始終保留80%的原始标簽資訊;

2、labelpropagation使用從資料中構造的原始相似矩陣,不做修改;labelspreading最小化具有正則化特性的損失函數,對噪聲更加穩健,疊代了原始圖的修改版,并通過計算歸一化拉普拉斯矩陣來标準化邊權重。

3、同時LabelSpreading非常占用CPU,實體記憶體占用率還好;LabelPropagation 的CPU占用率還好,非常占用實體記憶體,高緯度資料可能會有一些問題。

作者:Tracyrenee

繼續閱讀