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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

2回答

2426閲覧

scikit-learnを用いたSVMのテストコードについて

kkkmokotan

総合スコア45

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2016/09/12 09:45

pythonのscikit-learnを用いてサポートベクターマシンを動かしてみようと思い以下のようなコードでテストしてみました。

python

1from sklearn import svm 2X = [[0, 0, 0], [1, 1, 1],[1, 0, 0],[0, 1, 0],[1, 0, 0], [1, 0, 1],[1, 1, 0],[1, 0, 1],[1, 0, 0], [0, 0, 1],[0, 1, 0],[1, 0, 1],[1, 0, 0], [1, 0, 1],[1, 1, 1]] 3y = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] 4clf = svm.SVC() 5clf.fit(X, y) 6print(clf.predict([[1, 1, 1]]))

ところが、このプログラムの結果は0になってしまいました。
これはプログラミングのテストコードの書き方が悪かったのか、SVMの精度的にこの程度ではダメなのかがわかりませんので教えていただきたく質問いたしました。
個人的には直接[1,1,1]は1だと二度学習しているのでなぜこれで0なのか疑問に思います。

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

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

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

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

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

guest

回答2

0

ベストアンサー

svm.SVCのデフォルト設定は
kernel='rbf'
C=1.0
となっています。kernelとしてrbfを使うのであれば、まずはCの値を1より大きめに設定して学習させてみればよいでしょう。
また線形カーネルを指定すれば( kernel='linear')C=1.0でも正しく分類できるはずです。
(線形分離できることはデータを可視化してみれば明らかですね。)

kernelやパラメータのCが何を意味しているのかわからないようならば、まずはSVMの基礎理論を習得されるのがよいでしょう。そうすればなぜ上記のような結果になるのか、何がよくなかったのか、自分で解決できるようになるはずです。

投稿2016/09/15 03:43

WathMorks

総合スコア1582

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

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

0

SVMについて詳しいわけではないのですが、

Python

1y = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] # ---①

Python

1y = [0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1] # ---②

に変えると
[1]
が返って来ます。

推測でしかないのですが、学習させるyが極端なのではないかと。

①では15回中13回も「0」を学習させているので
ほぼ何が来ても「[0]を返しておけばいいや」と言う学習をする事になる。
なので、[1, 1, 1]をpredictしても
[0]
と答えてしまうのではないでしょうか?

②では15回中5回「1」を学習させているので、
それなりに[0]と[1]を判断しやすくなり、
[1, 1, 1]をpredictした時にそれにマッチした
[1]
が出力されるのではないでしょうか?

なので、間違いではなく正常な動きだと思います。

投稿2016/09/12 13:47

taro_nii_chan

総合スコア207

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問