前提
機械学習を用いて領域分類した結果を可視化するプログラムを書いています。
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
1import numpy as np 2import pandas as pd 3import seaborn as sns 4sns.set_style("whitegrid") 5import matplotlib.pyplot as plt 6%matplotlib inline 7from sklearn.model_selection import train_test_split, cross_validate 8 9df = pd.read_csv("iris.csv") 10df.head() 11 12X = df.loc[:, ["SepalLength","SepalWidth","PetalLength","PetalWidth"]] 13y = df.loc[:, "Name"] 14 15 16X_train, X_test, y_train, y_test = train_test_split(X, y) 17model = svm.SVC() 18model.fit(X_train,y_train) 19X_train.shape, X_test.shape 20 21#data_train = pd.DataFrame(X_train) 22#data_train["Name"] = y_train 23 24#sns.pairplot(data_train, hue='Name', palette="husl") 25 26#X_train = data_train[["SepalLength","SepalWidth","PetalLength","PetalWidth"]].values 27#y_train = data_train["Name"].values 28 29 30pre = model.predict(X_test) 31 32ac_score = metrics.accuracy_score(y_test,pre) 33print("正解率=", ac_score) 34 35 36 37#ここからデータ可視化 38import matplotlib.pyplot as plt 39from mlxtend.plotting import plot_decision_regions 40%matplotlib inline 41 42x_combined = X_train.iloc[:, [0,1]].values 43y_combined = y_train.values 44 45 46d = {'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2} 47y = np.array(list(map(lambda i : d[i], y_combined))) 48 49model.fit(x_combined, y) 50 51print(np.unique(np.array(y))) 52 53fig = plt.figure(figsize=(13,8)) 54plot_decision_regions( x_combined, y, clf=model) 55plt.show()
試したこと
他のサイトにあるグラフを出力するプログラムも同じエラーが出ました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
> plot_decision_regions( x_combined, x_combined, clf=model)
「x_combined」が2つですか?記入ミスではないですか?
すみません、記入ミスでした。
plot_decision_regions( x_combined, y_combined, clf=model)が正しいです。
エラーは修正しても同様に出ています。
プログラムの動作には影響ないかもしれませんが、コードの先頭部分が重複しているようなのでご確認ください。
clfの定義も追記いただけますか?
> y_combined = y_test.values
のすぐ下に下記を追加して実行したら、何て表示されますでしょうか?
print(np.unique(np.array(y_combined)))
>プログラムの動作には影響ないかもしれませんが、コードの先頭部分が重複しているようなのでご確認ください。
修正しました、ご指摘ありがとうございます。
>clfの定義も追記いただけますか?
質問の意味があまりわかっておりませんが、作成してモデルを入れてます
https://3pysci.com/python-sklearn-4/
可視化部分のプログラムは上記ページを参考にしました
>y_combined = y_test.values のすぐ下に下記を追加して実行したら、何て表示されますでしょうか?
['Iris-setosa' 'Iris-versicolor' 'Iris-virginica']
と表示されます。
> 質問の意味があまりわかっておりませんが、作成してモデルを入れてます
clf = ....
というコードを作成されているはずですが、質問のコード中に見当たらないのでどんなモデルかを質問しました。
> 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ではこのターゲットの値に文字は使えない」
と書かれてます
>clf = .... というコードを作成されているはずですが、質問のコード中に見当たらないのでどんなモデルかを質問しました。
clf = ....というのは書いておらず、plot_decision_regionsの引数のテンプレート?です
https://3pysci.com/python-sklearn-4/
上記のサイトには、
>plot_decision_regionの基本的な使い方は、plot_decision_region(X値のデータ、Y値のデータ、clf=モデル)です。
とあります。
> ['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]と表示されているのですが、、、
> clf = ....というのは書いておらず、plot_decision_regionsの引数のテンプレート?です
質問のコード中の「pre = clf.predict(X_test)」にある「clf」について聞きました。
質問のコードを実行すると”NameError: name 'clf' is not defined”が発生したためです。
今回のエラーとは直接は関係ないので返信不要ですが一応補足しておきます。
すみません、ずっとplot_decision_regionsのclfと勘違いしておりました。
大変申し訳ありません。
ご指摘の通りそこではclfではなく、
pre = model.predict(X_test)
が正しいです。
> y must be a NumPy array. Found <class 'list'>
y = np.array(list(map(lambda i : d[i], y_combined)))
で、どうでしょうか?
修正したところ、グラフが出力されました!
本当に助かりました。
何度もありがとうございました。
回答1件
あなたの回答
tips
プレビュー