DecisionTreeRegressorのパラメータを調べた

scikit-learn の DecisionTreeRegressor のパラメータを調べた。

整理のために各パラメータをまとめる。

APIリファレンスに正式な情報があるので、正しい情報や詳細な情報はそちらを参照してください。

パラメータの種類

criterion

  • 木を分割していくときの品質の種類
  • squared_error、friedman_mse、absolute_error、poisson から選ぶ
  • デフォルトは squared_error
  • squared_error
    • 二乗誤差
    • 予測と実際の値に誤差があったときは誤差を二乗して平均をもとめる
    • 二乗するので、誤差が大きいときにより大きな値となるので、大きな誤差を避けたいときに使用する
  • friedman_mse
    • フリードマンの平均二乗誤差
    • squared_error に基づいているが、フリードマンさんが開発した改良版
    • 大きなデータセットだとこっちのほうが良いのかも?
  • absolute_error
    • 絶対誤差
    • 誤差があったときに二乗せずにそのまま判定する
    • 外れ値の影響を受けにくい (二乗するのに比べると)
  • poisson
    • ポアソン誤差
    • 数回など、予測値が小さな値になるときに向いているらしい

splitter

  • ノードを伸ばすときの戦略
  • best、random から選ぶ
  • デフォルトは best
  • best
    • criterion で設定した分割の品質により、誤差が最も少なくなるものを条件として分岐する
  • random
    • criterion 関係なくランダムで分岐する

max_depth

  • ツリーの最大深度
  • デフォルトなし
  • なしの場合、すべてのリーフが純粋になるまで、またはすべてのリーフに含まれるサンプルが min_samples_split 未満になるまで、ノードが拡張される

min_samples_split

  • ツリーを伸ばすのに判断するサンプル数
  • デフォルト 2
  • ツリーを深くしていくと、そこまでの分岐によって最終的なところに集まるサンプル数がどんどん少なくなるが、何個残っていたらさらに分割するか、の値
  • 小さいほど細かく分類できるが、小さすぎるとそこいいくための条件が細かくなりすぎるので、ちょっとした違いのものを判断できなくなってしまう可能性もある

min_samples_leaf

  • 最終的な分岐にいくつ集まることを許容するか
  • デフォルト 1
  • min_samples_split の値によってさらにツリーを伸ばそうとはするが、結果、ここの値より少ない数のサンプルしか集まらなかった場合はツリーを伸ばさない、という設定
  • min_samples_split と同じく値が少ないほど細かい条件分岐できるが、細かすぎてあいまいな部分を判断できなくなってしまう可能性もある

min_weight_fraction_leaf

  • 最終的な分岐に全体のどのぐらいの割合まで集まることを許容するか(min_samples_leaf とほぼ同じで、数値で指定するか割合で指定するかの違いだけっぽい)
  • デフォルト 0.0
  • min_samples_split の値によってさらにツリーを伸ばそうとはするが、結果、ここの値より少ない数のサンプルしか集まらなかった場合はツリーを伸ばさない、という設定
  • min_samples_split と同じく値が少ないほど細かい条件分岐できるが、細かすぎてあいまいな部分を判断できなくなってしまう可能性もある

max_features

  • ノードを伸ばすときに、全体の項目のうち、何種類の項目を条件の候補として選ぶかの値
  • 候補として選ぶだけで、実際に条件分岐となるのはその中の最も良い条件にあてはまる1項目のみ
  • sqrt、log2、None、か、具体的な整数小数の値を設定できる
  • sqrt は全体の項目数の平方根
  • log2 は全体の項目数のlog2 (2の何乗で全体の項目数の値になるか)
  • None だと毎回全項目をつかう
  • デフォルトは None

random_state

  • 毎回木がランダムに生成されるが、この値を指定することによって、木の生成を再現させることができる
  • デフォルトは None (毎回ランダム)
  • 0 か 42 がよく使われるらしい

max_leaf_nodes

  • 最終的な分岐の末端部分をいくつまで用意するかの最大値
  • デフォルトは None (無制限)

min_impurity_decrease

  • ツリーを深くするときに、不純度がこの値以上減るなら深くする、という設定値
  • デフォルト 0.0
  • 数値を大きくすると、はっきりと見分けられない分岐は行われなくなる

ccp_alpha

  • 枝刈り(プルーニング)という技術を使って純粋度があまりさがらないようなら枝を伸ばすのをやめる
  • デフォルトは 0.0 (無制限)
  • 数が大きいほど判断基準が厳しい(より大きく純粋にならないと枝を伸ばさないようにする)
  • min_impurity_decrease と似ているが、こちらは木が出来上がってからの判断に使われるみたい

monotonic_cst

  • 予測に使う各項目に対して単調性を指定する (各項目ごとに指定する)
  • デフォルトは None (指定しない)
  • 項目ごとに指定する値は下記となっている
    • 1 : 単調増加 (項目の値が増えれば結果の値も増える(部屋の数と家賃のような関係))
    • -1 : 単調減少 (項目の値が増えれば結果の値は減る (駅からの距離と家賃のような))
    • 0 : 制約なし
  • 学習する項目に対していのドメイン知識があり、単調増加がある、とわかっている項目などに指定すると結果が不自然にならなくてよさそう
  • 逆に、気づいてなかった法則とか知りたいなら無い方がよさそう

コメント

タイトルとURLをコピーしました