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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

Q&A

解決済

1回答

543閲覧

複数データの散布図においてSVMを利用

k2r

総合スコア10

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

0グッド

0クリップ

投稿2020/01/17 03:17

編集2020/01/17 10:40

#実現したいこと
4次元データ(iris_learn2)を2次元データ×6にわけ、プロットしました。
その2次元データを用いてSVMをして決定境界を可視化したいと思ってます。
それぞれのグラフ6つ全てにSVMを利用するのはできないのでしょうか。

#データ
SepalLength SepalWidth PetalLength PetalWidth Name
0 7.0 3.2 4.7 1.4 Iris-versicolor
1 6.4 3.2 4.5 1.5 Iris-versicolor
2 6.9 3.1 4.9 1.5 Iris-versicolor
3 5.5 2.3 4.0 1.3 Iris-versicolor
4 6.5 2.8 4.6 1.5 Iris-versicolor
5 6.3 3.3 6.0 2.5 Iris-virginica
6 5.8 2.7 5.1 1.9 Iris-virginica
7 7.1 3.0 5.9 2.1 Iris-virginica
8 6.3 2.9 5.6 1.8 Iris-virginica
9 6.5 3.0 5.8 2.2 Iris-virginica

#テキストエディタのデータ
SepalLength,SepalWidth,PetalLength,PetalWidth,Name
7,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
6.3,3.3,6,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3,5.9,2.1,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
6.5,3,5.8,2.2,Iris-virginica

#コード

python

1import pandas as pd 2import matplotlib.pyplot as plt 3import itertools 4from sklearn.svm import LinearSVC 5from sklearn.svm import SVC 6import mglearn 7import numpy as np 8import matplotlib.pyplot as plt 9import pandas as pd 10from IPython.display import display 11 12def main(): 13 iris = pd.read_csv("iris_learn2.csv") 14 print(iris) 15 plt.figure(figsize=(12, 8)) 16 17 for i, (x, y) in enumerate(itertools.combinations(range(4), 2)): 18 plt.subplot(2, 3, i + 1) 19 20 for (name, d), marker, c in zip(iris.groupby('Name'), '>ox', 'rgb'): 21 plt.scatter( 22 d.iloc[:, x], 23 d.iloc[:, y], 24 marker=marker, 25 c=c 26 ) 27 28 linear_svm = LinearSVC().fit(x, y) 29 mglearn.plots.plot_2d_separator(linear_svm, x) 30 mglearn.discrete_scatter(X[:, 0], X[:, 1], y) 31 32 plt.xlabel(iris.columns[x]) 33 plt.ylabel(iris.columns[y]) 34 plt.autoscale() 35 plt.grid() 36 37 38 plt.tight_layout() 39 plt.show() 40 41if __name__ == '__main__': 42 main() 43

#発生している問題・エラーメッセージ

python

1ValueError Traceback (most recent call last) 2<ipython-input-30-78b8e7553d68> in <module> 3 38 4 39 if __name__ == '__main__': 5---> 40 main() 6 7<ipython-input-30-78b8e7553d68> in main() 8 25 c=c 9 26 ) 10---> 27 linear_svm = LinearSVC().fit(x, y) 11 28 mglearn.plots.plot_2d_separator(linear_svm, x) 12 29 mglearn.discrete_scatter(X[:, 0], X[:, 1], y) 13 14C:\ProgramData\Anaconda3\lib\site-packages\sklearn\svm\classes.py in fit(self, X, y, sample_weight) 15 227 X, y = check_X_y(X, y, accept_sparse='csr', 16 228 dtype=np.float64, order="C", 17--> 229 accept_large_sparse=False) 18 230 check_classification_targets(y) 19 231 self.classes_ = np.unique(y) 20 21C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator) 22 754 ensure_min_features=ensure_min_features, 23 755 warn_on_dtype=warn_on_dtype, 24--> 756 estimator=estimator) 25 757 if multi_output: 26 758 y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False, 27 28C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator) 29 543 "Reshape your data either using array.reshape(-1, 1) if " 30 544 "your data has a single feature or array.reshape(1, -1) " 31--> 545 "if it contains a single sample.".format(array)) 32 546 # If input is 1D raise error 33 547 if array.ndim == 1: 34 35ValueError: Expected 2D array, got scalar array instead: 36array=0.0. 37Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

#試したこと

linear_svm = LinearSVC().fit(x, y) mglearn.plots.plot_2d_separator(linear_svm, x) mglearn.discrete_scatter(X[:, 0], X[:, 1], y)

上記のコードを付け加えたところエラーがおきました。

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

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

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

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

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

hayataka2049

2020/01/17 04:36

質問を編集して、コードは<code>ボタンで挿入できるコードブロック内に入れるようにしてください。 ```python コード ``` のようにすれば適切に表示されます。 また、エラーメッセージもこのままでは見づらいので同様にしてください。
k2r

2020/01/17 04:41

ありがとうございます。訂正させていただきます。
guest

回答1

0

ベストアンサー

xとyは

python

1 for i, (x, y) in enumerate(itertools.combinations(range(4), 2)):

で作られたxとyですから、単なる整数値です。そもそも学習データではないのでfitメソッドに渡しても結果は得られません。

やりたいことはいまいちよくわかりませんが、こんな感じかな。

python

1 # そもそもコード内でXを定義していないのに動くのが問題。 2 # ipythonなので以前に定義されたXがそのまま残っている可能性がある 3 X = iris.iloc[:, [x, y]].values 4 5 # 上でループ用の変数名をyにしてしまったので、かぶらない名前にしないといけない 6 # 教師ラベルをどう取るのかわかりませんが、(n_samples, )のshapeになるものを取ってください 7 target = # なにか 8 9 linear_svm = LinearSVC().fit(X, target) 10 mglearn.plots.plot_2d_separator(linear_svm, X) 11 mglearn.discrete_scatter(X[:, 0], X[:, 1], target)

投稿2020/01/17 05:16

編集2020/01/17 11:03
hayataka2049

総合スコア30933

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

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

k2r

2020/01/17 05:46

targetを用いてはだめでした。 (n_samples, )のshapeになるものを取ってください の部分が分からないのですが、なにをすればよいのですか・・・?
hayataka2049

2020/01/17 07:03

目的変数(教師ラベル)に相当するarray likeなデータをtargetに代入してください。
k2r

2020/01/17 07:53

csvから読み込みしているデータのnameが教師ラベルになると思うのですが、 上手に代入できません。 target = iris.loc[:, "Name"].value ではエラーが出てきます。
hayataka2049

2020/01/17 07:57

単にiris["Name"]でいいのではないでしょうか。 その方法で取るなら iris.loc[:, "Name"]までにしておくか、属性名を取るならvaluesにする(この場合はSeriesのままでも良いかと)。
k2r

2020/01/17 08:12

なんどもなんども申し訳ございません。 iris["Name"]とiris.loc[:, "Name"]の両方を試させていただきましたが、そろって TypeError: '(slice(None, None, None), 0)' is an invalid key のエラーがでてきます。 これはどのように対処すればいいのですが・・・?
hayataka2049

2020/01/17 09:06 編集

再現できないとお答えのしようがありません。 iris_learn2.csvの内容をテキスト形式で質問に掲載してみてください。
k2r

2020/01/17 09:30

iris_learn2.csvの内容を、上記のデータ枠で貼らさせていただきました。 Excelで保存していてこの様な形になっております。 御手数ですがお願い致します。
hayataka2049

2020/01/17 09:58

csvファイルをテキストエディタで開いたものをそのままコピペしてください。
k2r

2020/01/17 10:40

テキストエディタのデータにて掲載させていただきました。
hayataka2049

2020/01/17 11:02

同じエラーは再現できませんでしたが、 TypeError: '(slice(None, None, None), 0)' is an invalid key のエラーメッセージの全文をコメントに貼ってみてください(tracebackから)。
hayataka2049

2020/01/17 11:04 編集

私の回答に一箇所ミスがあったので修正しました(XがDataFrameのままではスライスが適当に動作しないのでnumpy配列に変換)。こちらで動作すればエラーの提示は不要です。
k2r

2020/01/17 11:10

正常に動作することができました! 大変長らくありがとうございました。深く感謝申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問