はじめに
この実験では、SVM における重み付きデータセットの決定関数をプロットする方法を学びます。サンプルの重みを考慮するモデルと、サンプルの重みを考慮しないモデルを作成します。その後、2 つのモデルの決定関数をプロットすることで比較します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
必要なライブラリをインポートして始めましょう。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
データの作成
20 個のポイントからなるデータセットを作成します。最初の 10 個のポイントはクラス 1 に属し、最後の 10 個のポイントはクラス -1 に属します。
np.random.seed(0)
X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)]
y = [1] * 10 + [-1] * 10
サンプル重みの作成
2 セットのサンプル重みを作成します。最初のセットのサンプル重みはすべてのポイントで一定で、2 番目のセットのサンプル重みは一部のアウトライアーに対して大きくなります。
sample_weight_last_ten = abs(np.random.randn(len(X)))
sample_weight_constant = np.ones(len(X))
sample_weight_last_ten[15:] *= 5
sample_weight_last_ten[9] *= 15
モデルの学習
2 つの SVM モデルを作成します。最初のモデルはサンプル重みを考慮せず、2 番目のモデルは先ほど作成したサンプル重みを考慮します。
clf_no_weights = svm.SVC(gamma=1)
clf_no_weights.fit(X, y)
clf_weights = svm.SVC(gamma=1)
clf_weights.fit(X, y, sample_weight=sample_weight_last_ten)
決定関数のプロット
先ほど作成した 2 つのモデルの決定関数をプロットします。左に最初のモデルの決定関数を、右に 2 番目のモデルの決定関数をプロットします。点のサイズはその重みに比例します。
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500))
Z = clf_no_weights.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
axes[0].contourf(xx, yy, Z, alpha=0.75, cmap=plt.cm.bone)
axes[0].scatter(X[:, 0], X[:, 1], c=y, s=100 * sample_weight_constant, alpha=0.9, cmap=plt.cm.bone, edgecolors="black")
axes[0].axis("off")
axes[0].set_title("Constant Weights")
Z = clf_weights.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
axes[1].contourf(xx, yy, Z, alpha=0.75, cmap=plt.cm.bone)
axes[1].scatter(X[:, 0], X[:, 1], c=y, s=100 * sample_weight_last_ten, alpha=0.9, cmap=plt.cm.bone, edgecolors="black")
axes[1].axis("off")
axes[1].set_title("Modified Weights")
plt.show()
まとめ
この実験では、SVM における重み付きデータセットの決定関数をプロットする方法を学びました。サンプル重みを考慮するモデルと考慮しないモデルの 2 つを作成しました。その後、2 つのモデルの決定関数をプロットすることで比較しました。