回帰問題のテキストフィーチャーについて、いくつかのフィーチャー選択をしようとしています。現在、トレーニングセットには〜200Kの機能があります。私はscikit-learnの中で機能選択ツールのいくつかを使用したいが、f_regression
スコアリング機能をSelectKBest
変圧器に渡そうとするときには、scipyの疎な行列で作業することに問題がある。Scipy Sparse Arraysを使用したF-Regressionのフィーチャーの選択
f_regression
スコアリング関数は、引数としてX
機能行列、y
応答ベクトルと、デフォルトでTrueに設定されているオプションのcenter
引数を取ることが表示されます。
f_regressor = f_regression(X, y, center=False)
feature_selector = SelectKBest(f_regressor, k=k)
selected_features = feature_selector.fit_transform(X, y)
私はスコアリング関数が呼び出すことはできませんというエラーが出ます:私は私のような何かをしようとした場合しかし、SelectKBest
変圧器へcenter=False
でf_regression
を渡すことができれば、問題がある解決するだろうかと考えています。私はそれがf_regress
として初期化するとき、すぐに機能のp値とfスコアを返すので、これを仮定しています。
さらに、SelectKBest
変圧器のソースコードでは、それがフィット関数のように見えないことは、このcenter
引数のいずれかのチェックを行いますので、私はへcenter=False
で、このスコアリング関数を渡す任意の簡単な方法が表示されません変圧器:
# Abbreviated from the sklearn source
def fit(self, X, y):
X, y = check_X_y(X, y, ['csr', 'csc'])
# Error I've been getting when instantiating the f_regressor - not callable
if not callable(self.score_func):
raise TypeError("The score function should be a callable, %s (%s) "
"was passed."
% (self.score_func, type(self.score_func)))
self._check_params(X, y)
"""Score func gets called here - only on X and y, assuming center=True.
Maybe some argument checking could happen here in the future?
Not sure if `center` argument could be passed as attribute via
the constructor?
"""
score_func_ret = self.score_func(X, y)
if isinstance(score_func_ret, (list, tuple)):
self.scores_, self.pvalues_ = score_func_ret
self.pvalues_ = np.asarray(self.pvalues_)
else:
self.scores_ = score_func_ret
self.pvalues_ = None
self.scores_ = np.asarray(self.scores_)
return self
近い将来この問題を回避する方法があれば、それは大歓迎です。読んでいただきありがとうございます。
これは 'f_regressor'の代わりに' f_regression'を渡すと機能しますか? '' X、y'を取るが、あなたが望むように 'center'をセットするカバー関数やラムダを作るのはどうでしょうか?それを評価する代わりに、新しい機能を作りましょう。 – hpaulj
@hpaulj:私を遅くして考えるのに感謝します。 (もちろん) 'functools'ライブラリには完全にエレガントなソリューションがあります。カバー/ラムダ関数の提案をありがとう。 – kylerthecreator