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

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

新規登録して質問してみよう
ただいま回答率
86.12%
機械学習

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

Python

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

解決済

SVMでのデータ分類可視化の際にエラーが出ます

seriko
seriko

総合スコア29

機械学習

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

Python

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

1回答

0リアクション

0クリップ

207閲覧

投稿2022/09/25 03:26

編集2022/09/26 02:07

前提

機械学習を用いて領域分類した結果を可視化するプログラムを書いています。

https://qiita.com/Yatsupon/items/ec5d1003a2a108534128

上記のページを参考に少し手を加えて書いているのですが、グラフを出力する段階でエラーが出てしまいます。
何がご教授いただければ幸いです。

実現したいこと

・plot_decision_regionsを使い、データ分類のグラフを出力する

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

plot_decision_regions( x_combined, y, clf=model)と書いている行で can only concatenate str (not "int") to str というエラーが出ています。

該当のソースコード

python

import numpy as np import pandas as pd import seaborn as sns sns.set_style("whitegrid") import matplotlib.pyplot as plt %matplotlib inline from sklearn.model_selection import train_test_split, cross_validate df = pd.read_csv("iris.csv") df.head() X = df.loc[:, ["SepalLength","SepalWidth","PetalLength","PetalWidth"]] y = df.loc[:, "Name"] X_train, X_test, y_train, y_test = train_test_split(X, y) model = svm.SVC() model.fit(X_train,y_train) X_train.shape, X_test.shape #data_train = pd.DataFrame(X_train) #data_train["Name"] = y_train #sns.pairplot(data_train, hue='Name', palette="husl") #X_train = data_train[["SepalLength","SepalWidth","PetalLength","PetalWidth"]].values #y_train = data_train["Name"].values pre = model.predict(X_test) ac_score = metrics.accuracy_score(y_test,pre) print("正解率=", ac_score) #ここからデータ可視化 import matplotlib.pyplot as plt from mlxtend.plotting import plot_decision_regions %matplotlib inline x_combined = X_train.iloc[:, [0,1]].values y_combined = y_train.values d = {'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2} y = np.array(list(map(lambda i : d[i], y_combined))) model.fit(x_combined, y) print(np.unique(np.array(y))) fig = plt.figure(figsize=(13,8)) plot_decision_regions( x_combined, y, clf=model) plt.show()

試したこと

他のサイトにあるグラフを出力するプログラムも同じエラーが出ました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

meg_

2022/09/25 04:15 編集

> plot_decision_regions( x_combined, x_combined, clf=model) 「x_combined」が2つですか?記入ミスではないですか?
seriko

2022/09/25 04:33

すみません、記入ミスでした。 plot_decision_regions( x_combined, y_combined, clf=model)が正しいです。 エラーは修正しても同様に出ています。
meg_

2022/09/25 05:35

プログラムの動作には影響ないかもしれませんが、コードの先頭部分が重複しているようなのでご確認ください。
meg_

2022/09/25 05:42

clfの定義も追記いただけますか?
jbpb0

2022/09/25 10:35

> y_combined = y_test.values のすぐ下に下記を追加して実行したら、何て表示されますでしょうか? print(np.unique(np.array(y_combined)))
seriko

2022/09/25 11:33

>プログラムの動作には影響ないかもしれませんが、コードの先頭部分が重複しているようなのでご確認ください。 修正しました、ご指摘ありがとうございます。 >clfの定義も追記いただけますか? 質問の意味があまりわかっておりませんが、作成してモデルを入れてます https://3pysci.com/python-sklearn-4/ 可視化部分のプログラムは上記ページを参考にしました
seriko

2022/09/25 11:34

>y_combined = y_test.values のすぐ下に下記を追加して実行したら、何て表示されますでしょうか? ['Iris-setosa' 'Iris-versicolor' 'Iris-virginica'] と表示されます。
meg_

2022/09/25 11:47

> 質問の意味があまりわかっておりませんが、作成してモデルを入れてます clf = .... というコードを作成されているはずですが、質問のコード中に見当たらないのでどんなモデルかを質問しました。
jbpb0

2022/09/25 14:02 編集

> y must be an integer array. 「y_combined」は整数(integer)じゃないといけないようですが、 > ['Iris-setosa' 'Iris-versicolor' 'Iris-virginica'] そうなってないですね 参考 https://stackoverflow.com/questions/66314673/valueerror-y-must-be-an-integer-array-found-object-try-passing-the-array-as-y 【追記】 https://3pysci.com/python-sklearn-4/ の「前回のSVM機械学習のまとめて可視化の準備」にも、 「可視化するmlxtendではこのターゲットの値に文字は使えない」 と書かれてます
seriko

2022/09/25 15:16

>clf = .... というコードを作成されているはずですが、質問のコード中に見当たらないのでどんなモデルかを質問しました。 clf = ....というのは書いておらず、plot_decision_regionsの引数のテンプレート?です https://3pysci.com/python-sklearn-4/ 上記のサイトには、 >plot_decision_regionの基本的な使い方は、plot_decision_region(X値のデータ、Y値のデータ、clf=モデル)です。 とあります。
seriko

2022/09/25 15:22

> ['Iris-setosa' 'Iris-versicolor' 'Iris-virginica'] そうなってないですね 載せていただいた参考サイトの通りに d = {'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2} y = list(map(lambda i : d[i], y_combined)) を追加してyを整数にしましたが、以下のエラーが出てしまいます。 y must be a NumPy array. Found <class 'list'> print(np.unique(np.array(y)))では、 [0 1 2]と表示されているのですが、、、
meg_

2022/09/25 15:30 編集

> clf = ....というのは書いておらず、plot_decision_regionsの引数のテンプレート?です 質問のコード中の「pre = clf.predict(X_test)」にある「clf」について聞きました。 質問のコードを実行すると”NameError: name 'clf' is not defined”が発生したためです。 今回のエラーとは直接は関係ないので返信不要ですが一応補足しておきます。
seriko

2022/09/25 15:43

すみません、ずっとplot_decision_regionsのclfと勘違いしておりました。 大変申し訳ありません。 ご指摘の通りそこではclfではなく、 pre = model.predict(X_test) が正しいです。
jbpb0

2022/09/25 21:20

> y must be a NumPy array. Found <class 'list'> y = np.array(list(map(lambda i : d[i], y_combined))) で、どうでしょうか?
seriko

2022/09/26 02:06

修正したところ、グラフが出力されました! 本当に助かりました。 何度もありがとうございました。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

機械学習

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

Python

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