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