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

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

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

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

深層学習

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

機械学習

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

Python

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

Q&A

解決済

1回答

2035閲覧

CNNでの2値分類 不均衡データの分類問題について

---stax---

総合スコア148

Keras

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

深層学習

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

機械学習

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

Python

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

0グッド

1クリップ

投稿2019/03/26 07:37

かなり初歩的な質問なのですが不均衡なデータセットを用いてモデルを作成する際に疑問に感じたので質問させてください。

データセットが全部で1000件あったとして
正常画像データが900件、不良画像データが100件の不均衡なデータセットがあるとします

不均衡なデータセットに対する問題点としては評価指標としてAccuracyを算出したときに
全てを正常と判定してしまうと精度90%というような数値上はよいモデルと判断しかねないことだと解釈しています。

画像データが少ない場合はData Augmentationを行う事が多いと思うのですが
データ件数は増えてもデータの均衡という点では大きな変化はないのかなと感じます。

こういった問題に対しては評価指標を適切な物(PR曲線、ROC曲線など)を扱えば不均衡なデータに関しては特に意識せずモデルの学習に使っても良いのか、それとも上記の例でいうところの不良データに対してのみデータ数を何らかの手法で均衡になることを目指して別のアプローチをする必要があるのでしょうか?

※素人的な考えですが訓練データ、検証データ、テストデータを作成する際に、訓練データが不均衡なデータのまま学習させると例えば正常だけを学習する機会が多くなってしまうので訓練データだけでも出来るだけ均等にするべきなのかなと考えます。

初歩的な質問で申し訳ありませんがアドバイス頂けたら幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ご質問の通り、クラスに不均衡があると少数派の予測精度が極端に悪化することが知られており、imbalanced data classificationと呼ばれていろいろな対策が考案されています。難しいことを考えなければ、多数派を削減して均衡させる方法があります。ご質問のケースだとトータル件数が200ほどになるので都合悪いかもしれません。
そういう場合はSMOTEと呼ばれるパッケージを使ってオーバーサンプリング(少数派を増幅させる)するといいかと思います。これであれば、単純コピー増幅による過学習が回避できるのでいいのではないでしょうか。
ほかにもアルゴリズムで対策する方法など、imbalanced data classificationで検索するといろいろと情報が見つかるので好みの方法を使うといいでしょう

投稿2019/03/26 12:20

R.Shigemori

総合スコア3376

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

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

---stax---

2019/03/27 01:25

回答ありがとうございます。 返答遅くなり申し訳ありません。 今まで不均衡なデータに対して特に意識していなかったのでアドバイス頂いた手法も試してみます。 やはり予測精度の悪化という問題点があることからも不均衡なままデータを学習には使わない、というのが基本的な認識という事でしょうか? どうしてもデータ数が拡張できない場合はそのまま学習させるしかないのかと思うのですが、そういった場合は精度指標の見極めなどで対応するしかないということになるのでしょうか?
R.Shigemori

2019/03/28 13:38

データの均衡を図るべきかどうかは、モデルの目的に依存します。多数派の識別がモデル構築のメインテーマなのであれば、そのままの状態でもいいかもしれません。しかしながら、少数派の識別が重要なのであれば。何らかの対応が必須だと思います。 データで対応することが難しいのであれば、アルゴリズムレベルの対策を検討してはいかがでしょう。 sklearnであれば、大抵のモデルにclass_weightパラメータがあるはずです。これを調整することで少数派の予測精度をより重く評価するようになります。tensorflowの場合は自力で実装する必要がありますが、それほど難しくないと思います。
---stax---

2019/03/29 07:52

回答ありがとうございます。 現在取り組んでいる問題は少数派の検出なので擬似的にNG画像を作成してデータ数を均衡にしてみました。 今はkerasを使っているのですが途中でscikit-learnやnumpyを使用した処理を組み込む方法が分からずフレームワークの成すがままになっているのでアドバイス頂いた内容も調べてみます。 また重ねて質問して申し訳ないのですが、今回データを増やして正常900枚、異常900枚の訓練データセットが出来上がりました。 各エポックで最もロスの小さかったモデルを保存し、そのモデルに対してテストデータを評価させるとロスは限りなく0に近く、accuracy、roc_aucともに1.0と異様に高い評価になりました。 不思議に思ってテストデータを1枚1枚評価すると確かに正常、異常は正確に判別するのですが、正常画像に自分でペイントで検出物に見立てたものを書くと正常と判断する場合がありました。 ただ自分で書いた画像でも学習に使った異常データに近いものは異常と判定しました。 これは過学習が原因だと思うのですが、評価指標は高い値が出ておりどのように汎化性能を上げるアプローチをすればよいのか分かりません・・・。 異常のパターンを増やすべきなのでしょうか?それも過学習に繋がる気がして手詰まりになってしまいました。 実画像が乗せれないので回答しづらいと思いますがアドバイスいただければ幸いです。
R.Shigemori

2019/03/30 19:22

記載されている情報だけだと何とも言えません。学習データのバリエーションがほとんどなく、実質的に2パターンしかないようだとデータをもっと増やすしか対策はないと思います。 ちなみに、トレーニング時の評価値(例えば、accuracy)とテスト時の評価値はどのくらいの差違でしょうか?いずれも1.0だとデータに問題があると考えるべきでしょうし、テスト時が大きく落ちるようだと過学習を疑ってノード数を削減するなどのモデルをシンプルにする方向にチューニングしてはいかがでしょう。
---stax---

2019/04/01 06:28

回答ありがとうございます。 答えにくい質問で申し訳ありません。 定点撮影画像なので正常データに関してはほとんど変化がなく、異常に関しては異物が不特定な位置に付着しているという画像でした。 異常のデータも異物の位置こそは変わりますが大きさや形はあまり変化がなかったので、疑似的に異物の個数を増やしたり大きさを変えた画像を作成して学習させてみました。 まだ結果が出ていませんが少しでも変化していることを祈ります・・・。 また評価値に関しては訓練時、検証時共に1.0となっています。 これも5エポック未満の初期段階でこの結果が出ています。 やはり訓練データのバリエーションが少なく早い段階で適合しすぎているという事でしょうか・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問