Decision Trees


Pipelines


複数のモデルを同じ前処理プロセスに接続する方法
from category_encoders import OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline


pipe = make_pipeline(
    OneHotEncoder(), 
    SimpleImputer(), 
    StandardScaler(), 
    LogisticRegression(n_jobs=-1)
)
pipe.fit(X_train, y_train)        # 한번에 모델을 학습시킬 수 있음
pipe.score(X_val, y_val)          # 검증세트의 정확도 점수
y_pred = pipe.predict(X_test)     # 테스트세트를 통한 예측

けっていじゅモデル


特徴に基づいてサンプルを分類する
ノードノードノードに質問または下部の答えを送信
接続ノードの線をedgeに切り取る
  • 決定ツリーの各ノードは、ルートノード/中間ノード/エンドノード
  • に分ける.
  • 決定ツリーは、分類/回帰問題
  • に使用することができる.
  • 決定ツリーデータを分割するためのアルゴリズム
  • 分類プロセスは、新しいデータがあるエンドノードに属する情報を決定した後、エンドノードの周波数が最も高いカテゴリにデータを分類する.

    𘅾▼決定ツリーモデルは1つのツリーしか使用しないため、1つのノードで発生するエラーは、下位ノードでも影響を及ぼし続ける特性がある

    ツリーモデル学習アルゴリズム

  • 決定ツリーを学習する場合、ノードをどのように分割するかが重要です.
  • ノードの分割方法により、異なる形状のツリー構造
  • が生成する.
  • 決定ツリーの費用関数を定義し、最小ツリーモデル学習アルゴリズム
  • に分割する.

  • Gini Impurity/Gini Index
    IG(p)=∑i=1Jpi(1−pi)=1−∑i=1Jpi2{\displaystyle {I}{G}(p)=\sum _{i=1}^{J}p{i}(1-p_{i})=1-\sum {i=1}^{J}{p{i}}^{2}}IG(p)=i=1∑J​pi(1−pi​)=1−∑i=1Jpi2
    ※不純度:各種カテゴリが混在している程度
    ノードが重要であるほど、不一致は小さくなります.
    a:bが45:55の試料は80:20の試料より不純度が低い

  • エントロピー
    H(T)=I⁡E(p1,p2,...,pJ)=−∑i=1Jpilog⁡2pi{\displaystyle\mathrm {H} (T)=\operatorname {I} {E}\left(p{1},p_{2},...,p_{J}\right)=-\sum {i=1}^{J}{p{i}\log {2}p{i}}}H(T)=IE(p1,p2​,...,pJ​)=−∑i=1Jpilog2pi
  • スーパーパラメータ

  • min samples split:ノードを分割するための最小サンプルデータ数
    ▼▼▼▼設定が小さいほど分割ノードが多くなり、過負荷↑
  • min samples leaf:エンドノードに少なくとも存在するべきサンプル数
  • max depth:ツリーの最大深さ
    ⚠▼深さが深い場合に過負荷↑

  • ※決定木モデルはリニアモデルと異なり、非線形、非単調、特性相互作用の特徴を持つデータの分析が容易
    from sklearn.tree import DecisionTreeClassifier
    
    pipe = make_pipeline(
        OneHotEncoder(),  
        SimpleImputer(), 
        DecisionTreeClassifier(max_depth=5, min_samples_leaf=10, random_state=1)
    )
    ⚠️ 과적합을 방지하기 위해 파라미터 조정을 잘해야한다