決定木の仕組みを理解するには簡単なモデルの例で考えるの一番良い方法です。次に簡単な例で考えてみます。「熊、鷹、ペンギン、イルカ」の4種類の動物がいます。少ない質問で正確に、この動物を分類したいとします。その時に次のようなTreeを描くことができます。これが即ち決定木です。否か、ヒレの有る無し)で識別するモデルを作ったことになります。ノードの描き方は、最上部の深さ0から始めます。この最上部のことをルートノードといいます。木のノード(分岐点、接点)は「質問」か「答え」です。答えは終点となり葉(leaf)と言われます。Trueは左側に描くようにします。データを分割する基準を決定するには、「情報利得」と「不純度」を使います。情報利得とは、分割の良さを表したものです。不純度とは、どれだけごちゃごちゃしているか、つまりノードの中に同じクラスのものばかりだと不純度は0になります。式で表すと次のようになります。頂点にあるノード(root)はデータ全体つまりclass0:10とclass1:10を示します。X[1]とは説明変数の0から数えて1番目のものということ。X[1]=0.0596で水平にデータセットを分割することで、最も情報量が多く、class0とclass1を分割できます。説明変数0番目のものは、0.0596という数字でy軸をほぼ半分に2等分するデータと考えてみるとわかりやすいです。今度はX[0]番目の説明変数を使い今度はx軸方向のある数値を活用します。深く分離していくと最終的にはきれいに分離できるが、明らかに過学習になります。決定木の弱点はあまり深く木を作ると過学習になることです。それを防止するためには2つの方法が考えられます。事前枝刈り:木の成長を早めに止める事後枝刈り:木を構築後に情報の少ないノードを削除ただし、Scikit-learnには事前枝刈りしか実装されていません。max_depth=4のようなハイパーパラメータを使用します。エントロピーエントロピーはノードの不純度を図ることができます。エントロピーは次の式で表されます。p(i|t)\\ただし,p(i|t)=\frac{n_i}{N}$$cは目的変数のクラス数,tは現在のノード,Nはトレーニングデータのサンプル数,$n_i$はクラスiに属するトレーニングデータの数を示しています。不純度が最も低ければエントロピーの値は0,不純度が高くなればなるほどエントロピーの値が大きくなることになります。エントロピーを使った方法は目的変数が離散値の場合で分類に対応しています。ジニ係数を使った不純度ジニ係数を使ったアルゴリズムをCARTと言います。p(i|t)^2\\ただし,p(i|t)=\frac{n_i}{N}$$cは目的変数のクラス数,tは現在のノード,Nはトレーニングデータのサンプル数,niはクラスiに属するトレーニングデータの数を示しています。不純度が最も低ければジニ係数の値は0,不純度が高くなればなるほどジニ係数の値が1に漸近します。ジニ係数を使った方法は目的変数が離散値、または連続値で分類と回帰に対応しています。[‘setosa’]max_depthを調べてい場合は次のようにします。gini”)スプリットの品質を測定する機能。サポートされる基準は、Gini不純物の「gini」と情報ゲインの「エントロピー」です。best”)各ノードで分割を選択するために使用される戦略。サポートされている戦略は、最適な分割を選択する「最良」と、最適なランダム分割を選択する「ランダム」です。None)ツリーの最大の深さ。Noneの場合、すべてのリーフが純粋になるか、すべてのリーフにmin_samples_splitサンプル未満が含まれるまで、ノードが展開されます。2)内部ノードを分割するために必要なサンプルの最小数:intの場合min_samples_split、最小数と見なされます。あり、各分割の最小サンプル数です。1)リーフノードにあるために必要なサンプルの最小数。任意の深さの分割ポイントmin_samples_leafは、左右のブランチのそれぞれに少なくともトレーニングサンプルが残っている場合にのみ考慮されます。これは、特に回帰において、モデルを平滑化する効果があるかもしれません。intの場合min_samples_leaf、最小数と見なされます。あり、各ノードの最小サンプル数です。0)リーフノードにある必要がある(すべての入力サンプルの)重みの合計の最小重み付き割合。sample_weightが指定されていない場合、サンプルの重みは等しくなります。int型で指定、float、strまたはNone、オプション(デフォルト=なし)最適な分割を探すときに考慮する機能の数:intの場合max_features、各分割で機能を検討します。フィーチャは各分割で考慮されます。n_features)そして、「自動」の場合max_features=sqrt(n_features)。「SQRT」の場合max_features=sqrt(n_features)。「LOG2」の場合max_features=log2(n_features)。その後、なしの場合max_features=n_features。注:複数のmax_features機能を効果的に検査する必要がある場合でも、ノードサンプルの有効なパーティションが少なくとも1つ検出されるまで、分割の検索は停止しません。None)intの場合、random_stateは乱数ジェネレーターが使用するシードです。RandomStateインスタンスの場合、random_stateは乱数ジェネレーターです。Noneの場合、乱数ジェネレーターはによって使用されるRandomStateインスタンスnp.randomです。None)max_leaf_nodes最高の方法で木を育てます。最良のノードは、不純物の相対的な減少として定義されます。なしの場合、リーフノードの数に制限はありません。0)この分割がこの値以上の不純物の減少を引き起こす場合、ノードは分割されます。重み付き不純物減少方程式は次のとおりです。left_impurity)ここNで、はサンプルの合計数、N_tは現在のノードN_t_Lのサンプル数、は左の子N_t_Rのサンプル数、は右の子のサンプル数です。N、N_t、N_t_RとN_t_Lあればすべて、加重和を参照してくださいsample_weight渡されます。1e-7木の成長の早期停止のしきい値。不純物がしきい値を超える場合、ノードは分割されます。それ以外の場合、ノードはリーフです。min_impurity_decrease。min_impurity_split0.23で1e-7から0に変わり、0.25で削除されます。min_impurity_decrease代わりに使用してください。Noneフォーム内のクラスに関連付けられた重み。指定しない場合、すべてのクラスに重み1が割り当てられます。複数出力の問題の場合、辞書のリストをyの列と同じ順序で提供できます。weight}マルチ出力(マルチラベルを含む)の場合、独自の辞書のすべての列のクラスごとに重みを定義する必要があることに注意してください。[{1:1}、{2:5}、{3:1}、{4:1}]の代わりに。「平衡」モードでは、yの値を使用して、入力データのクラス頻度に反比例する重みを自動的に調整します。np.bincount(y))マルチ出力の場合、yの各列の重みが乗算されます。sample_weightが指定されている場合、これらの重みはsample_weightで乗算されることに注意してください(fitメソッドを介して渡されます)。‘deprecated’このパラメーターは非推奨であり、v0.24で削除されます。バージョン0.22から非推奨。0.0)最小コスト複雑性プルーニングに使用される複雑性パラメーター。ccp_alpha選択されるよりも小さい最大のコスト複雑度を持つサブツリー。デフォルトでは、プルーニングは実行されません。最小コストの複雑さのプルーニングを参照してください。値検出にも使える非常に優秀な機械学習モデルです。マージン最大化と言われる基本概念に基づき2値分類問題に使われます。計算コストが大きいため中小規模のデータセットで使われます。マージン最大化とは、カテゴリを識別する境界線を、1本の線ではなく、マージンが最大になるように引く手法です。線形分離可能:2クラス分類する場合、1本の直線で完全分離できるもの線形分離不可能:2クラス分類する場合。1本の直線で完全分離することができないもの線形分離可能なSVM2クラスのデータを分類する場合1本の直線で分類する方法です。1本の直線を引くときにより多くマージンが取れる引き方を選択します。マージンに対して直接接するようなデータのことをサポートベクトルと呼びます。サポートベクトルマシンの呼び方はここから来ています。i=1,2,...,n$$ちなみに、クラスAかクラスBかはっきり分かれることを前提としたマージンを「ハードマージン」と呼びます。線形不可能な場合2クラスのデータを分類する場合1本の直線で分類することができない場合、つまり、線形不可能な場合はソフトマージンを使います。ソフトマージンは以下の2つを満たすようにします。境界線とデータとはなるべく離れていたほうがいい誤判別はなるべく少ないほうがいい数式で簡単に書くと次のようになります。$$\min{\frac{1}{マージン(サポートベクトルと境界線の距離)+C×誤判別数}}$$パラメタ「C」は「誤判別をどこまで許容するか」を現すパラメタです。パラメタCが大きければ、少しの誤判別も許さないし、逆にCが小さければ、誤判別に寛容になります。パラメタCが∞に大きかった場合はハードマージンと変わらなくなります。パラメタCはハイパーパラメータなので、あらかじめ決めてやる必要があります。今後学習するグリッドサーチなどを使って「最も予測精度が高くなるようにパラメタをチューニングする」技術もあります。Classification)は標準的なソフトマージン(エラーを許容する)SVMです。LinearSVCはカーネルが線形カーネルの場合に特化したSVMです。線形で分離できない場合はソフトマージンを活用します。1.0)正則化パラメーター。正則化の強度はCに反比例します。厳密に正でなければなりません。ペナルティは2乗のl2ペナルティです。‘rbf’)アルゴリズムで使用されるカーネルタイプを指定します。‘precomputed’またはcallableのいずれかでなければなりません。何も指定しない場合、「rbf」が使用されます。callableが与えられた場合、それはデータ行列からカーネル行列を事前計算するために使用されます。その行列はshapeの配列でなければなりません。3)多項式カーネル関数の次数(「poly」)。他のすべてのカーネルでは無視されます。‘scale’)「rbf」、「poly」、および「sigmoid」のカーネル係数。n_featuresを使用します。バージョン0.22でgamma変更:デフォルト値が「auto」から「scale」に変更されました。0.0)カーネル関数の独立した用語。「ポリ」と「シグモイド」でのみ重要です。True)縮小ヒューリスティックを使用するかどうか。bool型で指定、オプション(デフォルト=偽)確率推定を有効にするかどうか。詳細については、ユーザーガイドをご覧ください。1e-3)停止基準の許容範囲。float型で指定、オプションカーネルキャッシュのサイズ(MB単位)を指定します。指定しない場合、すべてのクラスに重み1が割り当てられます。「平衡」モードでは、yの値を使用して、入力データのクラス頻度に反比例する重みを自動的に調整します。bool型で指定、デフォルト:False詳細出力を有効にします。この設定は、libsvmのプロセスごとのランタイム設定を利用することに注意してください。この設定を有効にすると、マルチスレッドコンテキストで適切に動作しない場合があります。-1)ソルバー内の反復のハード制限、または制限なしの場合は-1。1対1(「ovo」)は常にマルチクラス戦略として使用されます。decision_function_shapeはデフォルトで「ovr」です。‘ovr’が推奨されます。‘ovo’およびNone。それ以外の場合、関連付けられたクラスの最初のクラスが返されます。単純な予測と比較して、関係を壊すには比較的高い計算コストがかかることに注意してください。None)確率推定のためにデータをシャッフルするときに使用される擬似乱数ジェネレーターのシード。intの場合、random_stateは乱数ジェネレーターが使用するシードです。RandomStateインスタンスの場合、random_stateは乱数ジェネレーターです。Noneの場合、乱数ジェネレーターはによって使用されるRandomStateインスタンスnp.randomです。SNSで共有しましょう。