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

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

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

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

Python

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

Q&A

解決済

1回答

5773閲覧

ランダムフォレストにおける過学習の解消

nouken

総合スコア369

機械学習

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

Python

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

0グッド

0クリップ

投稿2018/06/28 06:17

RandomForestClassifier(n_estimators= 1000)による二値分類に取り組んでいます。
特徴量は250程度です。

max_depth=Noneで行ったところ、トレーニングでの正解率が1.0、テストが0.65ほどになりました。

過学習と判断し、max=depthを下げていきましたが、max_depth=5でもトレーニング正解率が0.8ほどに下がり、テスト正解率も上がるどころか、0.62に下がっていしまいした。

どのような原因が可能性として考えられるのでしょうか?

ランダムフォレストはかなり過学習しにくいということなのですが。

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

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

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

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

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

tachikoma

2018/06/28 06:24

各treeの表現力が下がった結果なんじゃないかなぁ。n_extimatorsを100, 200などで試すとどうでしょう。
nouken

2018/06/28 06:27

回答ありがとうございます。抜けておりましたが、n_estimatorsについては1000でやっております。
nouken

2018/06/28 06:38

すみません、勘違いしていました。試してみましたが、あまりかわりませんでした。。
tachikoma

2018/06/28 06:48

それだったらmax_depthは最初のままで維持して、n_estimatorを5とか10から増やして、どこでover-fittingしてそうか見るといいかもです。
nouken

2018/06/28 06:51

試してみます。ありがとうございます。
nouken

2018/06/28 07:02

n_estimators=5の時点でtrain_acc=0.9, test_acc=0.6程度になるので、まったく意味が分からなくなってきてしまいました。。。
hayataka2049

2018/06/28 07:04 編集

回答にも書きましたが、機械学習的な方法論ではそのままではうまく分類できないデータを入れているような気がします。差し支えなければどういう性質のものなのか教えてください
tachikoma

2018/06/28 07:09

データ分割の問題も絡んでそうな。
nouken

2018/06/28 07:10

ご回答ありがとうございました。医薬品などを含む化合物の記述子(物理的、構造上、化学的特性などの特徴量)から毒性を予測するQSAR研究です。
hayataka2049

2018/06/28 07:13

たとえば、専門知識のある人がその特徴量だけ見せられたとして、(十分な検討時間さえあれば)正しく予測できますか? 人間にできないことを機械学習にやらせるのは困難です
hayataka2049

2018/06/28 07:16 編集

あと、データ数と「特徴量がスパースか否か」も気になるといえば気になる。データ数が足りなくて過学習というのもよくある話なので。スパースの方は(それこそカテゴリデータから変換したような)すかすかな特徴量だと、なかなかうまく扱うのが難しいからです
nouken

2018/06/28 07:20

正直毒性がなかなかよそくできないために機械学習の力を借りたいというところですので、ある程度まではわかるかもですが正しく予測できるかは不明です。データ数につきましては約6000ありますが、不均衡データですので約400(各クラス200ずつ程度)にアンダーサンプリングしてモデルの学習をしております。
nouken

2018/06/28 07:21

特徴量については一部を除いてスパースです。
hayataka2049

2018/06/28 07:49 編集

真っ先に思いつくのは、前処理でPCAかけるPipeline組んで、不均衡データ対策した上で6000件を入れて評価指標はF1値、というのですが、それでもどうだろうというくらいの厳しいデータな気がします
nouken

2018/06/28 09:00

なるほど。まあ厳しいというのはある程度わかってはいたのですが、とりあえずもう少し粘ってみようかなと思います。ご丁寧にありがとうございました。
guest

回答1

0

ベストアンサー

ランダムフォレストなら、訓練データに対してほぼ100%の正解率が得られるのは正常です。
決定木の過学習を、データのブートストラップサンプリングと説明変数のランダムサンプリング、木の本数で薄めているのがランダムフォレストの本質と言えます。
二次元平面上のデータを入れて学習させ、グリッド状のデータで確率を予測してプロットするとよくわかりますが(こういうの)、外れデータのごく近くだけは外れデータのラベルに分類し、その外側の領域は正しく分類できるような決定境界が描かれます。
正しく分類される空間の領域の方が圧倒的に大きくなるのを指して「過学習しづらい」と言っているだけです。


木の複雑さを減らす方向にチューニングしていっても、性能が悪くなるだけで汎化性能はあまり稼げない気がします。
木の本数をがばっと増やし、max_featuresをいじると多少よくあることはあります。デフォルトはsqrt(n)ですが、これから減らしたり増やしたりしてみましょう。


あるいは、単にデータの問題なのかもしれません。
たとえばナイーブベイズに入れて0.6くらいの評価指標になるデータを0.8とか0.9で分類するのは至難の業です。原理的に分離超平面がうまく引けないようなデータだと、0.65でもけっこう頑張ってる、みたいな可能性もあります。
また、分類器との相性もあります。PCAかけてSVMに入れた方が有利とかは普通にあると思うので、色々試してみるしかありません。

投稿2018/06/28 07:02

編集2018/06/28 07:09
hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問