Scikit learn 将sklearn RFE与另一个包中的估计器一起使用

Scikit learn 将sklearn RFE与另一个包中的估计器一起使用,scikit-learn,statsmodels,rfe,Scikit Learn,Statsmodels,Rfe,是否可以将sklearn递归特征消除(RFE)与另一个包中的估计器一起使用 具体来说,我想使用statsmodels包中的GLM并将其包装在sklearn RFE中 如果是,你能举一些例子吗?是的,这是可能的。您只需要创建一个继承sklearn.base.BaseEstimator的类,确保它有fit和predict方法,并确保其fit方法通过coef或feature\u importances\u属性公开特征重要性。下面是一个类的简化示例: import numpy as np from sk

是否可以将sklearn递归特征消除(RFE)与另一个包中的估计器一起使用

具体来说,我想使用statsmodels包中的GLM并将其包装在sklearn RFE中


如果是,你能举一些例子吗?

是的,这是可能的。您只需要创建一个继承
sklearn.base.BaseEstimator
的类,确保它有
fit
predict
方法,并确保其
fit
方法通过
coef
feature\u importances\u
属性公开特征重要性。下面是一个类的简化示例:

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_)