标签传播学习复杂结构#

标签传播学习复杂内部结构的示例,以演示“流形学习”。外圈应标记为“红色”,内圈应标记为“蓝色”。由于两个标签组都位于各自的独特形状内,我们可以看到标签在圆圈周围正确传播。

# Authors: Clay Woolam <[email protected]>
#          Andreas Mueller <[email protected]>
# License: BSD

我们生成一个包含两个同心圆的数据集。此外,每个数据集样本都与一个标签相关联,该标签为: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 生成的画廊