2017-02-08 11 views
0

データセットに私のモデルを訓練しました。私はモデルを訓練するために意思決定ツリーを使用しました.3つの出力クラス - はい、完了、いいえがあります。分類器の特徴の重要性をチェックすることによって決定を下す最も決定的な特徴を知ることができる。私は私のMLライブラリとしてpythonとsklearnを使用しています。今私は最も決定的な特徴を見つけたので、その特徴がどのように寄与しているか知りたいのですが、その関係が正の場合、特徴値が増加すればYesになり、否定的であればいいえ、私は同じものの大きさを知りたいと思うでしょう。特徴がモデルの予測に影響を及ぼす要因を知る方法

私はこの問題に対する解決策があるかどうかを知りたいと思っています。また、選択アルゴリズムに依存しない解決策を知りたいと思っています。決定木に固有の解決策ではなく、アルゴリズム。私が好き言うだろういくつかの方法がある場合は

:フィーチャーX1用

関係が機能×2のための0.8 * X1^2 ですが、関係は、-0.4の*×2

ですちょうど私がなるように、出力を分析できるかどうかは、入力フィーチャx1、x2などに基づいて決まります。

特定のクラスの値が高いかどうか、またはその値が低いかどうかを調べることは可能ですか?

+0

私はこの質問をするのに最適な場所ではないと思います。[stats.stackexchange.com](http://stats.stackexchange.com/questions) – Arman

答えて

0

一般的に - いいえ。決定木はそれとは異なった働きをします。例えば、機能X> 100またはX < 10であり、答えが「ある値」である場合、50 < X < 70 - 答えがNoであるなどのルールがフードの下にある可能性があります。決定木のインスタンスその結果を視覚化してルールを分析することができます。 RFモデルでは、私が知る限り、たくさんの木がフードの下で働いているので、それぞれ独立した決定ルールがあります。

1

部分依存性プロット(PDP)を使用することができます。 Scikitにはフリードマン貪欲関数近似論文http://statweb.stanford.edu/~jhf/ftp/trebst.pdf pp26-28で作成されたGBM-http://scikit-learn.org/stable/modules/ensemble.html#partial-dependence用の内蔵PDPがあります。

scikit-learn GBMを使用した場合は、PDP機能を使用してください。別の見積もりを使用した場合は、数行のコードで独自のPDPを作成できます。あなたが尋ねたように、この方法はアルゴリズムに依存しません。それだけではスケールされません。

ロジック

  1. 機能についてあなたのユニークな値
  2. を取り、あなたが検討されている機能について
  3. あなたのトレーニングデータを取る
  4. すべての一意の値またはいくつかの分位数は、時間を短縮するために取得(3)
  5. すべての訓練観察を予測することを検討しています。
  6. あなたは今、1ウェイPDPを持っていない複数の値

まで、次のユニークな値をとることを繰り返し3-7

  • プロットポイント(ユニークな値、平均値)
  • すべての予測のを意味します。フィーチャが増加すると(X軸)、平均で予測(Y軸)に何が起こりますか?変化の大きさは?

    分析をさらに進めると、スムーズなカーブまたはスプラインをPDPに合わせることができ、その関係を理解するのに役立ちます。 @Maximは言ったように、完全なルールはないので、ここで傾向を探していて、関係を理解し​​ようとしています。私たちはあなたが興味を持っている最も重要な機能や機能についてこれを実行する傾向があります。

    上記のscikit-learnリファレンスにはさらに多くの例があります。

    ディシジョンツリーでは、Friedmanの説明に従ってアルゴリズムのショートカットを使用し、scikit-learnで実装できます。コードがパッケージとアルゴリズムに結びついているように、ツリーを歩かなければならないので、あなたの質問には答えられません。私はそれを説明しません。しかし、私が参照したscikit-learnページと論文にあります。

    def pdp_data(clf, X, col_index): 
        X_copy = np.copy(X) 
    
        results = {} 
    
        results['x_values'] = np.sort(np.unique(X_copy[:, col_index])) 
        results['y_values'] = [] 
    
        for value in results['x_values']: 
         X_copy[:, col_index] = value 
         y_predict = clf.predict_log_proba(X_copy)[:, 1] 
         results['y_values'].append(np.mean(y_predict)) 
    
        return results 
    

    質問の新しい部分に答えるように編集:あなたの質問に加えについて を、あなたは係数をもつ線形モデルを探しています。線形係数を使用してモデルを解釈する必要がある場合は、線形モデルを作成します。

    場合によっては、モデルをどのように解釈する必要がありますかによって、作成するモデルの種類が決まります。

    +0

    私は一般的に役立つもの、アルゴリズムのすべて/ほとんど –

    +0

    私は自分の質問に対する最新の追加を解決するために私の答えを更新しました。 –

    +0

    しかし、線形モデルがデータに適合しない場合はどうなりますか? –

    関連する問題