首頁  >  文章  >  科技週邊  >  sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

王林
王林轉載
2023-04-12 19:28:041103瀏覽

標籤傳播演算法是一種半監督機器學習演算法,它將標籤分配給先前未標記的資料點。要在機器學習中使用這種演算法,只有一小部分範例具有標籤或分類。在演算法的建模、擬合和預測過程中,這些標籤被傳播到未標記的資料點。

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading


LabelPropagation

LabelPropagation是一種在圖中尋找社群的快速演算法。它只使用網路結構作為指導來檢測這些連接,不需要預先定義的目標函數或關於群體的先驗資訊。標籤傳播透過在網路中傳播標籤並基於標籤傳播過程形成連結來實現。

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

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

LabelPropagation演算法以下列方式運作:-

    ##每個節點都使用唯一的標籤進行初始化。
  • 這些標籤透過網路傳播。
  • 在每次傳播迭代中,每個節點都會將其標籤更新為最大鄰居數所屬的標籤。
  • 當每個節點具有其鄰居的多數標籤時,標籤傳播演算法達到收斂。
  • 如果達到收斂或使用者定義的最大迭代次數,則標籤傳播演算法停止。
為了示範LabelPropagation演算法的工作原理,們使用Pima Indians 的資料集,建立程式時,我匯入了執行它所需的函式庫

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

複製一份資料並且將lable列當作訓練目標

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

使用matplotlib視覺化:

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading##使用隨機數產生器隨機化資料集中70%的標籤。然後隨機標籤被分配-1:-

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading在對資料進行預處理之後,定義因變數和自變量,分別為y和X。 y變數是最後一列,X變數是剩下的所有部分:-

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading#使用sklearn的LabelPropagation數來標記所有未標記的資料點:-

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading#準確率為發現它是76.9%。

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading#下面我們來看看另外一個演算法LabelSpreading。

LabelSpreading

LabelSpreading也是一種流行的半監督學習方法。建立一個連接訓練資料集中樣本的圖,並透過圖的邊緣傳播已知的標籤來標記未標記的範例。

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

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

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

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

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

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

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

  • Numpy執行數值計算並建立Numpy陣列
  • Pandas處理資料
  • #Sklearn執行機器學習操作
  • Matplotlib和seaborn來視覺化數據,為視覺化資料提供統計資料
  • Warning,用於忽略程式執行期間​​出現的警告

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

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

我使用seaborn創建了熱圖:-

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

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

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

##然後對資料進行打亂重排,這樣在打亂的資料集中預測通常更準確,複製一個資料集的副本,並將y_orig 定義為訓練目標:

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

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

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

使用隨機數產生器隨機化資料集中60%的標籤。然後隨機標籤被分配-1:-

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

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

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

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

使用此方法,能夠達到87.98%的準確率:-

sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading

#簡單對比

1、labelspreading中含有alpha= 0.2,alpha稱為夾緊係數,指的是採用其鄰居的信息而不是其初始標籤的相對量,若為0,表示保留初始標籤信息,若為1,表示替換所有初始信息;設置alpha=0.2 ,意味著始終保留80%的原始標籤資訊;

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

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

以上是sklearn 中的兩個半監督標籤傳播演算法 LabelPropagation和LabelSpreading的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除