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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

Q&A

1回答

1015閲覧

Kerasで二値分類:fit,evaluateの正答率が高いのに実際に予想させると出力がおかしい

Shiro_Kuro

総合スコア4

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

1グッド

1クリップ

投稿2020/01/18 07:43

前提・実現したいこと

Kerasを用いて二値の分類問題に取り組んでおりますが結果に対して不明なことが発生したので困っています。

発生している問題

Kerasで作った二値分類のネットワークを用いて学習をさせ、fit→evaluateと学習から評価までを行なった結果、学習中の正解率と、評価時点での正答率がどちらも約90%となかなかの数字が出ているのに、
実際にデータを用いてpredictさせると全く答えとは異なるような結果が帰ってきてしまいます。
どうしてこのような現象が起きるのか、このような経験をされた方、対処方法がわかる方にお聞きしたいです。

ここで、前提としてevaluateで用いているテストーデータは学習では用いていないデータを用いています。

該当のソースコード

modelの定義の部分のみです

python

1model = models.Sequential() 2model.add(layers.Dense(128,input_dim=11,activation='relu')) 3model.add(layers.Dense(256,activation='relu')) 4model.add(layers.Dense(128,activation='relu')) 5model.add(layers.Dense(64,activation='relu')) 6model.add(layers.Dense(2, activation='softmax')) 7 8model.compile(loss='categorical_crossentropy', 9 optimizer=optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False), 10 metrics=['acc']) 11 12

試したこと

  • 今回のデータはラベルが1のものよりも0のものが圧倒的に多いので、学習時にはラベル0のものと1のものを同数用いています
  • 学習は1と0の値がランダムに入力されるようにシャッフルを行なっています
  • 教師データは約40000個まで増やしましたが、結果は改善されませんでした
  • predictの結果をグラフとして見たところ、入力データの上から1/3約のものは出力が0、残った後ろから2/3のものは出力が1と出ていました。学習時には入力をシャッフルしているのでどうしてこのような結果が得られているのかがわかりません。
  • 0,1の分類問題なので

一度結果が0のみのデータと1のみのデータを用意し予測させたところ
0のみを予想させようとした場合は正答率が約20%
1のみを予想させようとした場合は正答率が約80%
と出てきて、奇妙なことに様々なパラメータを変えて実験を行なってもその確率の和が必ず1になるように出力されました

退会済みユーザー👍を押しています

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

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

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

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

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

meg_

2020/01/18 11:03

ラベルには関係しない変数が含まれていたりはしませんか?(それでオーバーフィットしている可能性)
Shiro_Kuro

2020/01/18 15:17

返信ありがとうございます。 ラベルには単なるone-hot表現の配列があるだけで余計なものなど見られませんでした。。。 fitで正答率が高く、evaluateで正答率が低いなら過学習だとわかるんですが、、そうではないので困ったものです。。考えてくださりありがとうございます!
meg_

2020/01/19 00:36

「ラベルには関係しない変数」ですよ。余分な説明変数が含まれたデータで訓練することにより、その変数に引っ張られることがあります。また、訓練データ(テストデータ含む)と現実(実際)のデータのかい離が大きい場合にも予測は困難でしょう。
guest

回答1

0

fit→evaluateで、どちらも正答率は高くデータも重複しないということなので、
modelではなく、predictに使用しているデータに問題があるのではないでしょうか。

投稿2020/01/23 00:03

Hagasuke

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問