部分依存性プロット(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を作成できます。あなたが尋ねたように、この方法はアルゴリズムに依存しません。それだけではスケールされません。
ロジック
- 機能についてあなたのユニークな値
- を取り、あなたが検討されている機能について
- あなたのトレーニングデータを取る
- すべての一意の値またはいくつかの分位数は、時間を短縮するために取得(3)
- すべての訓練観察を予測することを検討しています。
- あなたは今、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
質問の新しい部分に答えるように編集:あなたの質問に加えについて を、あなたは係数をもつ線形モデルを探しています。線形係数を使用してモデルを解釈する必要がある場合は、線形モデルを作成します。
場合によっては、モデルをどのように解釈する必要がありますかによって、作成するモデルの種類が決まります。
私はこの質問をするのに最適な場所ではないと思います。[stats.stackexchange.com](http://stats.stackexchange.com/questions) – Arman