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

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

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

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

Python

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

Q&A

解決済

1回答

17699閲覧

scikit-learn(svm)のエラーについて

python_newbie

総合スコア13

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2017/04/01 17:29

###質問内容

python、機械学習共に初学者です。
自分で適当なcsvファイルをデータセットとして作成し
下記のソースコードを実行したところ、下記のようなエラーが発生しました。

その後、いくつか手を加えて見たのですが
エラーメッセージが下記試したこと1エラー、試したこと2エラーのように変化するだけで
最後まで実行できませんでした。

これはcsvの中身が原因なのでしょうか?
それともソースコードのいずれかに誤りがあるのでしょうか?
何をどのように修正すれば実行可能になるか教えて頂きたいです。
また、もしよろしければそれぞれのエラーメッセージの意味も教えて頂ければと思います。
お手数をおかけいたしますが、何とぞご教授頂ければと思います。

###testx.csvの中身
0.2
-0.03
0.01

(取り込み後のprint出力)
[[ 0.2 -0.03 0.01]]

###testy.csvの中身
0.01
0.01
0.01

(取り込み後のprint出力)
[[ 0.01 0.01 0.01]]

###該当のソースコード

from sklearn import svm import numpy as np def main(): test_x = np.loadtxt( "testx.csv", delimiter="," ) test_y = np.loadtxt( "testy.csv", delimiter="," ) test_x = test_x.reshape(1,-1) test_y = test_y.reshape(1,-1) print(test_y) clf = svm.SVC(gamma=0.001, C=100.) clf.fit(test_x,test_y) print(clf) if __name__ == "__main__": main()

###エラーメッセージ

ValueError: bad input shape (1, 3)

###試したこと1
test_y.reshape(1,-1)が不要なのかと思い、この行を削除したところ、エラーメッセージが下記のように変化しました。

  • 試したこと1による変化後のエラーメッセージ1

Found input variables with inconsistent numbers of samples: [1, 3]

###試したこと2
test_x.csvが1次元なのがそもそもおかしいのかと思い、下記のようなtest_x_csvに変更し
test_x.reshape(1,-1)およびtest_y.reshape(1,-1)を削除したところ、エラーメッセージが下記のように変化しました。

変更後のtest_x_csvの中身
1,0.2
2,-0.03
3,0.01

(取り込み後のprint出力)
[[ 1. 0.2 ]
[ 2. -0.03]
[ 3. 0.01]]

  • 試したこと2による変化後のエラーメッセージ2

ValueError: Unknown label type: 'continuous'

###補足情報(使用環境)
Python 3.6.0 |Anaconda 4.3.1 (64-bit)|
jupyter notebook 4.3.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

やりたいこと(何をどうしたい)が不明ですが、分類元のデータの個数とその分類結果の個数を合わせる必要があります。

たとえば以下のような感じです。

Python

1from sklearn import svm,datasets 2import numpy as np 3 4# x,y座標を第1~4象限に分類する 5data = np.array([[1,1],[-1,1],[-1,-1],[1,-1]]) # x,y座標の組 6target = np.array([1,2,3,4]) # 分類先 第1~4象限 7print(data) 8print(target) 9 10clf = svm.SVC(gamma=0.001, C=100.) 11clf.fit(data,target) # 学習 12 13p_data = np.array([[10,10]]) # x,y = (10,10) 14c = clf.predict(p_data) # 予測 15print(c) # 第一象限

投稿2017/04/02 02:06

can110

総合スコア38262

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

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

python_newbie

2017/04/02 07:48

ご回答ありがとうございます。 やりたいことを明記しておらず、よくわからない質問をしてしまって申し訳ありません。 今回やりたいことは、ある入力値を入力した際に ノイズを含んだ形で出力される出力値のノイズを除去し 入力値に近づけた値を出力値として出力させる デジタルフィルタのようなものを作成することです。 なので識別ではなく回帰をしたいのでsvmではなく、svrで試して見るべきかと思いましたが まずは識別にかけてみるとどうなるのか試してみたかったので、svmで試してみました。 そしてご教授いたただいたソースコードを下記のように変更しましたら 次のようなエラー文言が出てきました。 【変更部分】 data = np.array([[0.1,0.01],[0.2,-0.05],[0.3,2.06],[0.4,2.41]]) target = np.array([0.01,0.01,2.01,2.01]) ※data = (時間,ノイズを含んだ出力値) ※target = (入力値) 【実行結果(エラー文言) ValueError: Unknown label type: 'continuous' 自分のやりたいことにおいて、dataやtargetとして小数点を含んだ値が考えられるのですが targetの中身は全て整数でなければいけない、ということでしょうか? 上記のような制約であれば、入出力を共に等倍し targetの小数点をなくせばよいという理解でよろしいのでしょうか? また、もし可能ならばdata = [出力値]、target = [入力値]として 1次元同士による学習で精度の良いノイズに対するデジタルフィルタのようなものを作成できる 手法やライブラリを探しているのですが、そういったものはありますでしょうか?
can110

2017/04/02 09:51

>targetの中身は全て整数でなければいけない、ということでしょうか? エラー内容からそのとおりだと思います。 >手法やライブラリを探しているのですが、そういったものはありますでしょうか? については分かりません。
python_newbie

2017/04/02 13:18

ご回答ありがとうございます。 内容、承知しました。 こちらの回答をベストアンサーとして本質問をクローズさせて頂きます。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問