はじめに
このチュートリアルでは、scikit-learn を使って重み付きデータセットの決定関数をプロットする方法を学びます。また、データセット内のサンプルに異なる重みを割り当てる方法を学び、重みが決定関数にどのように影響するかを示します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
まず、プロジェクトに必要なライブラリをインポートします。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
重み付きデータセットを作成する
numpy ライブラリを使って重み付きデータセットを作成します。ランダムな値を持つ 20 個の点を生成し、最後の 10 個のサンプルにより大きな重みを割り当てます。
np.random.seed(0)
X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)]
y = [1] * 10 + [-1] * 10
sample_weight = 100 * np.abs(np.random.randn(20))
sample_weight[:10] *= 10
重み付きデータセットをプロットする
matplotlib ライブラリを使って重み付きデータセットをプロットします。点のサイズはその重みに比例します。
xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500))
fig, ax = plt.subplots()
ax.scatter(
X[:, 0],
X[:, 1],
c=y,
s=sample_weight,
alpha=0.9,
cmap=plt.cm.bone,
edgecolor="black",
)
重みなしモデルをフィットさせる
scikit-learn ライブラリの SGDClassifier アルゴリズムを使って重みなしモデルをフィットさせます。その後、重みなしモデルの決定関数をプロットします。
clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X, y)
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
no_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["solid"])
重み付きモデルをフィットさせる
ステップ 4 と同じアルゴリズムを使って重み付きモデルをフィットさせますが、今回はサンプル重み(sample_weight)引数を fit メソッドに渡します。その後、重み付きモデルの決定関数をプロットします。
clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X, y, sample_weight=sample_weight)
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
samples_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["dashed"])
凡例を追加してプロットを表示する
重みなしモデルと重み付きモデルを区別するために凡例をプロットに追加します。その後、プロットを表示します。
no_weights_handles, _ = no_weights.legend_elements()
weights_handles, _ = samples_weights.legend_elements()
ax.legend(
[no_weights_handles[0], weights_handles[0]],
["no weights", "with weights"],
loc="lower left",
)
ax.set(xticks=(), yticks=())
plt.show()
まとめ
このチュートリアルでは、scikit-learn を使って重み付きデータセットの決定関数をプロットする方法を学びました。また、データセット内のサンプルに異なる重みを割り当てる方法を学び、重みが決定関数にどのように影響するかを示すことができました。