sklearn特征选择 保留特征名称

经过特征选择后,数据变成了array类型,并失去了特征名称,查询资料后没有找到直接保留特征名称的方法。但是有一个get_support函数,可以保留提取出来的特征索引。
于是就通过这个方法自己加几句代码,取出特征选择后的特征名称。

1.方差过滤

from sklearn.feature_selection import VarianceThreshold  # 方差过滤
selector = VarianceThreshold()
x_train1 = selector.fit_transform(x_train1)  # 方差过滤
x_test1 = selector.transform(x_test1)  

此时数据变成了array类型,没有保留特征名称。

 保留特征名称
all_name = data.columns.values.tolist()  # 获得所有的特征名称
select_name_index0 = selector.get_support(indices=True)  # 留下特征的索引值,list格式
select_name0 = []
for i in select_name_index0:
    select_name0.append(all_name[i])

2.互信息法

互信息
mic = mutual_info_classif(x_train1, y_train1, random_state=0)
k = mic.shape[0] - sum(mic <= 0)   # 获得与标签列相关的特征列个数
skb = SelectKBest(mutual_info_classif, k=k)  # 特征选择
x_train1 = skb.fit_transform(x_train1, y_train1)
x_test1 = skb.transform(x_test1)
保留特征名称
select_name_index = skb.get_support(indices=True)
select_name = []
for i in select_name_index:
    select_name.append(select_name0[i])
print(select_name)

最终结果便是select_name。
这样就可以把select_name传入graphviz函数里画图啦。

你可能感兴趣的:(机器学习)