将 sklearn RFE 与来自另一个包的估算器一起使用
Using sklearn RFE with an estimator from another package
是否可以将 sklearn 递归特征消除 (RFE) 与来自另一个包的估计器一起使用?
具体来说,我想使用 statsmodels 包中的 GLM 并将其包装在 sklearn RFE 中?
如果是,能否请您举一些例子?
是的,这是可能的。您只需要创建一个继承 sklearn.base.BaseEstimator
的 class,确保它具有 fit
和 predict
方法,并确保其 fit
方法通过coef_
或 feature_importances_
属性。这是 class:
的简化示例
import numpy as np
from sklearn.datasets import make_classification
from sklearn.base import BaseEstimator
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE
class MyEstimator(BaseEstimator):
def __init__(self):
self.model = LogisticRegression()
def fit(self, X, y, **kwargs):
self.model.fit(X, y)
self.coef_ = self.model.coef_
def predict(self, X):
result = self.model.predict(X)
return np.array(result)
if __name__ == '__main__':
X, y = make_classification(n_features=10, n_redundant=0, n_informative=7, n_clusters_per_class=1)
estimator = MyEstimator()
selector = RFE(estimator, 5, step=1)
selector = selector.fit(X, y)
print(selector.support_)
print(selector.ranking_)
是否可以将 sklearn 递归特征消除 (RFE) 与来自另一个包的估计器一起使用?
具体来说,我想使用 statsmodels 包中的 GLM 并将其包装在 sklearn RFE 中?
如果是,能否请您举一些例子?
是的,这是可能的。您只需要创建一个继承 sklearn.base.BaseEstimator
的 class,确保它具有 fit
和 predict
方法,并确保其 fit
方法通过coef_
或 feature_importances_
属性。这是 class:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.base import BaseEstimator
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE
class MyEstimator(BaseEstimator):
def __init__(self):
self.model = LogisticRegression()
def fit(self, X, y, **kwargs):
self.model.fit(X, y)
self.coef_ = self.model.coef_
def predict(self, X):
result = self.model.predict(X)
return np.array(result)
if __name__ == '__main__':
X, y = make_classification(n_features=10, n_redundant=0, n_informative=7, n_clusters_per_class=1)
estimator = MyEstimator()
selector = RFE(estimator, 5, step=1)
selector = selector.fit(X, y)
print(selector.support_)
print(selector.ranking_)