前提・実現したいこと
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になるように出力されました