標籤傳播學習複雜結構#

LabelPropagation學習複雜內部結構以展示「流形學習」的範例。外圈應標記為「紅色」,內圈應標記為「藍色」。由於兩個標籤組都位於它們各自不同的形狀內,我們可以觀察到標籤在圓圈周圍正確傳播。

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

我們生成一個包含兩個同心圓的數據集。此外,每個數據集樣本都關聯一個標籤,該標籤是:0(屬於外圈)、1(屬於內圈)和 -1(未知)。在這裡,除兩個標籤外,所有標籤都被標記為未知。

import numpy as np

from sklearn.datasets import make_circles

n_samples = 200
X, y = make_circles(n_samples=n_samples, shuffle=False)
outer, inner = 0, 1
labels = np.full(n_samples, -1.0)
labels[0] = outer
labels[-1] = inner

繪製原始數據

import matplotlib.pyplot as plt

plt.figure(figsize=(4, 4))
plt.scatter(
    X[labels == outer, 0],
    X[labels == outer, 1],
    color="navy",
    marker="s",
    lw=0,
    label="outer labeled",
    s=10,
)
plt.scatter(
    X[labels == inner, 0],
    X[labels == inner, 1],
    color="c",
    marker="s",
    lw=0,
    label="inner labeled",
    s=10,
)
plt.scatter(
    X[labels == -1, 0],
    X[labels == -1, 1],
    color="darkorange",
    marker=".",
    label="unlabeled",
)
plt.legend(scatterpoints=1, shadow=False, loc="center")
_ = plt.title("Raw data (2 classes=outer and inner)")
Raw data (2 classes=outer and inner)

LabelSpreading的目標是將標籤與最初未知的標籤的樣本關聯起來。

from sklearn.semi_supervised import LabelSpreading

label_spread = LabelSpreading(kernel="knn", alpha=0.8)
label_spread.fit(X, labels)
LabelSpreading(alpha=0.8, kernel='knn')
在Jupyter環境中,請重新執行此儲存格以顯示HTML表示或信任筆記本。
在GitHub上,HTML表示無法渲染,請嘗試使用nbviewer.org載入此頁面。


現在,我們可以檢查在標籤未知時,哪些標籤已與每個樣本關聯。

output_labels = label_spread.transduction_
output_label_array = np.asarray(output_labels)
outer_numbers = np.where(output_label_array == outer)[0]
inner_numbers = np.where(output_label_array == inner)[0]

plt.figure(figsize=(4, 4))
plt.scatter(
    X[outer_numbers, 0],
    X[outer_numbers, 1],
    color="navy",
    marker="s",
    lw=0,
    s=10,
    label="outer learned",
)
plt.scatter(
    X[inner_numbers, 0],
    X[inner_numbers, 1],
    color="c",
    marker="s",
    lw=0,
    s=10,
    label="inner learned",
)
plt.legend(scatterpoints=1, shadow=False, loc="center")
plt.title("Labels learned with Label Spreading (KNN)")
plt.show()
Labels learned with Label Spreading (KNN)

腳本的總運行時間:(0 分 0.162 秒)

相關範例

DBSCAN 分群演算法的演示

DBSCAN 分群演算法的演示

譜雙聚類演算法的演示

譜雙聚類演算法的演示

親和力傳播分群演算法的演示

親和力傳播分群演算法的演示

標籤傳播數字:展示效能

標籤傳播數字:展示效能

由Sphinx-Gallery生成的圖庫