来自sklearn管道的功能名称:未安装错误

Bam*_*mbi 5 python names feature-selection scikit-learn

我正在使用scikit学习文本分类实验.现在我想获得性能最佳,所选功能的名称.我尝试了类似问题的一些答案,但没有任何效果.最后一行代码是我尝试过的一个例子.例如,当我打印时feature_names,我收到此错误:sklearn.exceptions.NotFittedError: This SelectKBest instance is not fitted yet. Call 'fit' with appropriate arguments before using this method. 任何解决方案?

scaler = StandardScaler(with_mean=False) 

enc = LabelEncoder()
y = enc.fit_transform(labels)

feat_sel = SelectKBest(mutual_info_classif, k=200)  
clf = linear_model.LogisticRegression()

pipe = Pipeline([('vectorizer', DictVectorizer()),
                 ('scaler', StandardScaler(with_mean=False)),
                 ('mutual_info', feat_sel),
                 ('logistregress', clf)])

feature_names = pipe.named_steps['mutual_info']
X.columns[features.transform(np.arange(len(X.columns)))]
Run Code Online (Sandbox Code Playgroud)

mak*_*kis 3

您首先必须安装管道,然后调用feature_names

解决方案

scaler = StandardScaler(with_mean=False) 

enc = LabelEncoder()
y = enc.fit_transform(labels)

feat_sel = SelectKBest(mutual_info_classif, k=200)  
clf = linear_model.LogisticRegression()

pipe = Pipeline([('vectorizer', DictVectorizer()),
                 ('scaler', StandardScaler(with_mean=False)),
                 ('mutual_info', feat_sel),
                 ('logistregress', clf)])

# Now fit the pipeline using your data
pipe.fit(X, y)

#now can the pipe.named_steps
feature_names = pipe.named_steps['mutual_info']
X.columns[features.transform(np.arange(len(X.columns)))]
Run Code Online (Sandbox Code Playgroud)

一般信息

从这里的文档示例中您可以看到

anova_svm.set_params(anova__k=10, svc__C=.1).fit(X, y)
Run Code Online (Sandbox Code Playgroud)

这设置了一些初始参数(anova 的 k 参数和 svc 的 C 参数)

然后调用fit(X,y)以适应管道。

编辑

对于新错误,由于您的 X 是字典列表,所以我看到了一种调用您想要的 columns 方法的方法。这可以使用 pandas 来完成。

X= [{'age': 10, 'name': 'Tom'}, {'age': 5, 'name': 'Mark'}]

df = DataFrame(X) 
len(df.columns)
Run Code Online (Sandbox Code Playgroud)

结果:

2
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助