決定木の予測値が天井や底に張り付いてしまう2019-07-22決定木の予測値が天井や底に張り付いてしまう。RandomForestやXGBoost、LightGBMなどの決定木ベースの予測モデルで数値予測をしたところ同じ値が出続けてしまう。このような事が起こるか。現象を確認しながら原因を解説する。決定木の予測値が天井や底に張り付いてしまう現象は再現ができる。graphplt.show()正常にデータができると以下のような線形のデータができる。このデータを前半70%を学習データ、残りをテストデータに分ける。label="y=0.5x(test)")plt.legend()plt.show()すると以下のように線形データが学習用とテスト用に分かれる。学習用のデータを決定木で学習させて、テストデータを使って予測結果を確認する。label="y_pred")plt.legend()plt.show()すると以下のような結果となる。予測結果が天井に張り付いてしまい、実際のテストデータと異なる結果になっていることがわかる。線形回帰モデルで予測すればこのような予測結果の固定化は起こらない。予測結果が固定値になってしまう原因は決定木の仕組みにある。決定木とは以下の仕組みを言う。RandomForestやXGBoostも木の形を変えたり、複数の木を作って組み合わせたりするが、基本の仕組みは同じだ。値をチェックして値の大小で分岐する分岐した先の値を予測値として採用する分岐に用いる閾値と分岐先の値を学習データに合うように決めるここで重要なのは、「分岐先の値を学習データで決まる」ということ。決定木の末端である予測値を実とするならば、枝の先の実の大きさは学習した時点で確定する。入力値である説明変数をどれだけ大きくしようと、決定木では常に学習データの最大値と同じルートを通り、常に同じ実(=予測値)を得ることになる。なっているわけである。テストデータや現実でのデータの範囲が、学習データの範囲に収まらない場合に決定木を使うと予測値が学習データの限界で止まってしまう。対処法では決定木は使えないかというとそうではない。予測対象である目的変数の変化する範囲を限定できないのであれば、変化の範囲がある程度決まっている値を目的変数とすれば良い。例ではxに対して一定の差分値が得られる。diff")plt.legend()plt.show()この差分値は学習データでもテストデータでも変動範囲は同じなので、目的変数として差分値を学習させる。以上の値も予測できることがわかる。label="y=0.5x(pred)")plt.legend()plt.show()まとめ予測結果が天井や底に張り付くのは決定木の特性によるもの決定木の予測結果は学習データの目的変数の最小値、最大値を超えない差分や変化率を目的変数とすることで変動幅がわからないデータの予測も可能KRSW駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。too.役に立ったらシェアしてくれると励みになります。IDがロックされています。人気記事ハードウェアHDDの付け替えが面倒ならNASがオススメPCのデータを保存するハードディスク(HDD)。デスクトップにポストイットのように貼り付けられるアプリ。Notes」で大きな文字を書きたい。文字サイズを変更する方法がわからない。新型コロナウイルス対策の予防グッズはコレ最近世界中で感染が広がっている新型コロナウイルス。感染を予防する為に多くの人がマスクを付けているが、マスクの他にも予防方法やグッズがある。CentOSやUbuntuなどのLinuxサーバーを初期設定する際、ssh接続がうまくいか...Pythonnumpyでboolean配列を反転させるnumpyでboolean配列を反転させる。pythonでよく使われるnumpyでのboolean配列の反転のさせ方を紹介する。データベースを扱う際、あるカラムに値が入っていなかった場合に処理を行うというケースがある。普段座りっぱなしのITエンジニア。運動せずに生活していれば当然だが太る。私もつい最近まで体重が78kgあった。