質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

208閲覧

plot_surfaceで可視化された線形SVMの決定境界を求めるコード(式)が分からない

tku00779

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/08/10 22:27

質問

書籍でカーネル法を用いたサポートベクタマシンを学んでいたときに出てきたコードです。
XXとYYとZZのそれぞれの50個に分割した座標を結んで三次元空間に平面を描画しているというところまでは読み取れたのですが、なぜ高さ方向(Z軸)の座標を求める式はZZ = (coef[0] * XX + coef[1] * YY + intercept) / -coef[2]のように複雑なのでしょうか?
XXとYYそれぞれに係数をかけて足し、切片も足して、さらに3つ目の特徴量の係数で割る...?一体なぜこの式でZ座標が決まるのか全く分からなかったので、分かりやすく解説していただけたらありがたいです。

該当のソースコード

Python

1import numpy as np 2from sklearn.datasets import make_blobs 3from sklearn.svm import LinearSVC 4from mpl_toolkits.mplot3d import Axes3D, axes3d 5 6X, y = make_blobs(centers=4, random_state=8) 7y = y%2 8X_new = np.hstack([X, X[:, 1:] ** 2]) 9 10linear_svm_3d = LinearSVC().fit(X_new, y) 11coef, intercept = linear_svm_3d.coef_.ravel(), linear_svm_3d.intercept_ 12 13figure = plt.figure() 14ax = Axes3D(figure, elev=-152,azim=-26) 15xx = np.linspace(X_new[:, 0].min() - 2, X_new[:, 0].max() + 2, 50) 16yy = np.linspace(X_new[:, 1].min() - 2, X_new[:, 1].max() + 2, 50) 17 18XX, YY = np.meshgrid(xx, yy) 19ZZ = (coef[0] * XX + coef[1] * YY + intercept) / -coef[2] 20ax.plot_surface(XX,YY, ZZ, rstride=8, cstride=8, alpha=0.3) 21ax.scatter(X_new[mask, 0], X_new[mask, 1], X_new[mask, 2], c="b", cmap=mglearn.cm2, s=60) 22ax.scatter(X_new[~mask, 0], X_new[~mask, 1], X_new[~mask, 2], c="r", marker="^", cmap=mglearn.cm2, s=60) 23 24ax.set_xlabel("feature0") 25ax.set_ylabel("feature1") 26ax.set_zlabel("feature ** 2") 27

実行結果

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/08/10 23:05 編集

> 一体なぜこの式でZ座標が決まるのか https://manabitimes.jp/math/679 に書かれてるように、 ax + by + cz + d = 0 を満たす点(x, y, z)の集合が平面だからです 上記式から cz = -(ax + by + d) z = -(ax + by + d) / c
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.32%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問