经过特征选择后,数据变成了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函数里画图啦。