我想做监督学习。
到目前为止,我知道要对所有特征进行监督学习。
然而,我也想进行实验与K最好的功能。
我阅读了文档,发现在Scikit中学习到了SelectKBest方法。
不幸的是,我不知道在找到这些最佳特性后如何创建新的 Dataframe :
让我们假设我想用5个最佳特性进行实验:
from sklearn.feature_selection import SelectKBest, f_classif
select_k_best_classifier = SelectKBest(score_func=f_classif, k=5).fit_transform(features_dataframe, targeted_class)
现在,如果我添加下一行:
dataframe = pd.DataFrame(select_k_best_classifier)
我将收到一个没有特征名称的新 Dataframe (只有从0到4开始的索引)。
我应该将其替换为:
dataframe = pd.DataFrame(fit_transofrmed_features, columns=features_names)
我的问题是如何创建features_names列表??
我知道我应该用途:
select_k_best_classifier.get_support()
返回布尔值数组。
数组中的true值表示右列中的索引。
我应该如何将这个布尔数组与我可以通过方法获得的所有功能名称的数组一起使用:
feature_names = list(features_dataframe.columns.values)
8条答案
按热度按时间xyhw6mcr1#
这不需要循环。
sauutmhj2#
对我来说,这段代码运行良好,而且更像是“Python”:
zsohkypk3#
您可以执行以下操作:
然后更改要素的名称:
ecbunoof4#
下面的代码将帮助你找到前K个特征及其F-分数。令,X是Pandas Dataframe ,其列是所有特征,y是类标签列表。
pu82cl6c5#
根据chi 2选择最佳10个特征;
使用get_support()获取功能
创建名为X_new的新df;
eblbsuwk6#
在Scikit-learn 1.0中,转换器有
get_feature_names_out
方法,这意味着你可以写zbq4xfa07#
还有另一种替代方法,然而,该方法不如上述解决方案快。
mrfwxfqh8#