简介
在本实验中,我们将学习如何使用标签传播(LabelPropagation)从有标签样本中学习未知样本的标签。我们将生成一个包含两个同心圆的数据集,并为每个样本分配标签。然后,我们将使用标签传播来学习未知样本的标签。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”(Notebook)标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入所需库
我们首先导入本实验所需的库。
import numpy as np
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt
from sklearn.semi_supervised import LabelSpreading
生成数据集
接下来,我们使用 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
绘制原始数据
我们绘制原始数据,以可视化这些圆和标签。
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)")
使用标签传播学习标签
我们使用“标签传播”(LabelSpreading)来学习未知样本的标签。
label_spread = LabelSpreading(kernel="knn", alpha=0.8)
label_spread.fit(X, labels)
绘制学习到的标签
最后,我们绘制学习到的标签,以可视化标签传播(LabelPropagation)的准确性。
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()
总结
在本实验中,我们学习了如何使用标签传播(LabelPropagation)从有标签的样本中学习未知样本的标签。我们生成了一个包含两个同心圆的数据集,并为每个样本分配了标签。然后,我们使用标签传播来学习未知样本的标签,并可视化了学习到的标签的准确性。