1

我使用SKlearn的管道模型来提取并构建一个联合特征,然后将其发送到随机森林分类器,而某些特征提取器可以在以后删除或添加,请考虑结构如下:ScikitLearn从管道内的FeatureUnion中提取特征名称

model = Pipeline([ 
        ('feature_extract', 
        FeatureUnion([ 
            ('feature A', extracorA()), 
            ('feature B', ExtractorB()), 
            ('feature C', FeatureUnion([ 
                 ('c1', C1Extractor()) 
                 ('c2', C2Extractor())])) 
                       )]), 
        ('random_forest', RandomForestRegressor(...)))]) 

我想通过检查RandomForstRegressor

feature_importances_ 

属性来提高随机森林的预测0

我设法使用列表:

model._final_estimator.feature_importances_ 

现在,我想在feature_importances_索引中的列数之间动态链接到在管道中的功能名称/步。

有没有一种首选的方式来保存/检索特征联合内的特征名称?你会如何解决这个问题?

回答

-1

要使所有内容保持动态形式,可以使用下面的函数作为单独类的变换实现,并将类的对象作为管道的一部分。你甚至可以改变评分参数。我认为网格搜索作为管道的一部分是你正在寻找的...

def best_config(model, parameters, train_instances, judgements): 
    clf = GridSearchCV(model, parameters, cv=5, 
         scoring="accuracy", verbose=5, n_jobs=4) 
    clf.fit(train_instances, judgements) 
    best_estimator = clf.best_estimator_ 

    return [str(clf.best_params_), clf.best_score_, 
      best_estimator] 
+1

这有助于解决问题吗?我想知道Avi是如何实施这个答案的,或者使用了不同的方法。谢谢! – wsankey

+1

这似乎没有回答问题 – joc