Label Propagation 学習

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、LabelPropagation を使ってラベル付きサンプルから未知のサンプルのラベルを学習する方法を学びます。2 つの同心円からなるデータセットを生成し、各サンプルにラベルを割り当てます。そして、LabelPropagation を使って未知のサンプルのラベルを学習します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、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を使って 2 つの同心円からなるデータセットを生成します。データセットには、それぞれ外側と内側の円に属する 2 つのサンプルを除いてすべてのサンプルが未知のままであるようにラベルを割り当てます。

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)")

LabelPropagation を使ってラベルを学習する

未知のサンプルのラベルを学習するために、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 をどのように使用するかを学びました。2 つの同心円からなるデータセットを生成し、各サンプルにラベルを割り当てました。そして、LabelPropagation を使って未知のサンプルのラベルを学習し、学習したラベルの精度を視覚化しました。