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

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

新規登録して質問してみよう
ただいま回答率
85.36%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

機械学習

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

Python

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

Q&A

解決済

2回答

2514閲覧

sckit-learn学習させている途中でエラーが発生しました。

erisawa

総合スコア12

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

機械学習

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

Python

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

0グッド

1クリップ

投稿2020/04/21 02:18

編集2020/04/21 06:32

#前提・実現したいこと
メーターの数字をsckit-learnを用いて行いたいと考えており、
自分でデータセットを作り学習させる途中でエラーが発生しました。
言語はpython3です。
自作したデータセットを用いて、test.pyで実行すると、以下のようなエラーが出てきます。
発生している問題・エラーメッセージ

#出力内容(最後のほうにエラーがでています)

---------2の画像をnumpy形式に変換し、Listに格納中--------- ---------7の画像をnumpy形式に変換し、Listに格納中--------- ---------8の画像をnumpy形式に変換し、Listに格納中--------- ------------リストをnumpy形式に変換中----------- Iteration 1, loss = 175.43883525 Iteration 2, loss = inf Iteration 3, loss = inf Iteration 4, loss = inf Iteration 5, loss = inf Iteration 6, loss = inf Iteration 7, loss = inf Iteration 8, loss = inf Iteration 9, loss = inf Iteration 10, loss = inf Iteration 11, loss = inf Iteration 12, loss = inf Training loss did not improve more than tol=0.000100 for 10 consecutive epochs. Stopping. 精度 0.7 Traceback (most recent call last): File "<ipython-input-8-a639f0b2b1f0>", line 1, in <module> runfile('C:/Users/erifu/Desktop/data0417/test.py', wdir='C:/Users/erifu/Desktop/data0417') File "C:\Users\erifu\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile execfile(filename, namespace) File "C:\Users\erifu\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile exec(compile(f.read(), filename, 'exec'), namespace) File "C:/Users/erifu/Desktop/data0417/test.py", line 32, in <module> print(metrics.confusion_matrix(data_test,p)) File "C:\Users\erifu\Anaconda3\lib\site-packages\sklearn\metrics\classification.py", line 253, in confusion_matrix y_type, y_true, y_pred = _check_targets(y_true, y_pred) File "C:\Users\erifu\Anaconda3\lib\site-packages\sklearn\metrics\classification.py", line 81, in _check_targets "and {1} targets".format(type_true, type_pred)) ValueError: Classification metrics can't handle a mix of multiclass-multioutput and binary targets

#該当のソースコード(test.py)

from sklearn.model_selection import train_test_split import suuji_0420 import numpy as np データの読み込み number=suuji_0420.load_Suuji() data,target=number.data,number.target 学習とテストに分ける data_train,data_test,target_train,target_test=train_test_split(data,target,train_size=0.8,random_state=1) 学習器の作成 from sklearn.neural_network import MLPClassifier mlp=MLPClassifier(verbose=True) mlp.fit(data_train,target_train) 評価 p=mlp.predict(data_test) print("精度",np.mean(p==target_test))#正解率 間違った文字の確認 from sklearn import metrics print(metrics.confusion_matrix(data_test,p)) from sklearn.externals import joblib joblib.dump(mlp,"model.pkl",compress=True)#モデルの保存

#データセット作成コード(suuuji0420)

from PIL import Image import numpy as np import os,glob 画像フォルダのへの絶対パス ROOT_DIR="/Users/erifu/Desktop/data0417/" 画像フォルダー名 categories=["2","7","8"] クラス class Number(): def __init__(self,data,target,target_names,images): self.data=data self.target=target self.target_names=target_names self.images=images キー(インスタンス変数)を取得するメソッド def keys(self): print("[data,target,target_names,images]") 画像データをnumpy形式に変換してデータセットを作成 def load_Suuji(): data=[]#画像の一次元データを格納するリスト target=[]#ラベル(正解)の情報を格納するリスト target_names=["2","7","8"] images=[]#画像の二次元データを格納するリスト for label,category in enumerate(categories): file_dir=ROOT_DIR + category すべての画像をとってくる files=glob.glob(file_dir + "/*.jpg") print("---------{}の画像をnumpy形式に変換し、Listに格納中---------".format(category)) for i,f in enumerate(files): img=Image.open(f) img=img.convert('L')#画像をフレースケールに変換 img=img.resize((84,84)) imgdata=np.asarray(img)#numpy配列に変換 images.append(imgdata)#画像データの二次元配列 data.append(imgdata.flatten())#画像データの一次元配列 target.append(label)#正解ラベルを格納 print("------------リストをnumpy形式に変換中-----------") data=np.array(data) target=np.array(target) target_names=np.array(target_names) images=np.array(images) インスタンスを生成 suuji=Number(data, target, target_names, images) return suuji

#備考
データセット作成時点で問題があるのかそれとも学習時点で問題があるのかすらよくわかりません。
ご回答のほどよろしくお願いいたします。

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

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

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

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

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

Luke02561

2020/04/21 02:21

エラー文をすべて見せていただけますか?
erisawa

2020/04/21 02:32

エラー分すべてあげました。一応、出力に精度まで出ているようなのですがエラーが気になるのと誤差の部分が175.43883525というのはおかしい値でしょうか。
hayataka2049

2020/04/21 05:37

コードが全然読めないので編集してコードブロックを使うようにしてください。 """ではなく```で囲まないと読めるようになりません。
erisawa

2020/04/21 05:52

コードブロックを使って修正いたしました。よろしくお願いいたします。
hayataka2049

2020/04/21 05:55

使っている記号が違います。'''ではなく```です。 shift+@で入力できますし、私のコメントからコピペしていただいても構いません。
erisawa

2020/04/21 06:32

修正しました。
guest

回答2

0

ベストアンサー

たぶん学習が上手く行っていないので、データがおかしい可能性はあります。適当にデータの形式がわかるような情報があるとなにかわかるかもしれません。

直接のエラー原因は

metrics.confusion_matrix(data_test,p)

の部分で、data_testの代わりにtarget_testを渡す必要があります。

投稿2020/04/21 07:29

hayataka2049

総合スコア30935

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

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

erisawa

2020/04/21 07:57

target_testにするとエラーがでなくなりましたが、誤差のところでinfとでてきます。データの形式はjpgです。現在は画像をグレースケールに変換してるのですが、2値化処理したほうが良いのでしょうか。
guest

0

誤差にinfとあるので、それが原因だと思います。
それを避けられるように、ネットワークを変えてみたり、データセットを変えたりするといいと思います

投稿2020/04/21 04:45

Luke02561

総合スコア404

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

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

erisawa

2020/04/21 05:04

ご回答ありがとうございます。データ数もかなり少ないのも原因かと思っております。ところで誤差のinfとはどういった意味なのでしょうか。
Luke02561

2020/04/21 05:08

「inf」は「infinity」の略で、数が大きすぎて表示できないときに発生します。 今回の場合は、誤差がとてつもなく大きな値になってしまっているために起こっていると考えられます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問