Sklearn单变量选择:特征是常数

时间:2016-01-30 16:16:57

标签: python scikit-learn feature-selection

我在尝试对sklearn中的某些数据使用特征选择和f_classif(ANOVA测试)时收到以下警告消息:

C:\ Users \ Alexander \ Anaconda3 \ lib \ site-packages \ sklearn \ feature_selection \ univariate_selection.py:113:UserWarning:Features ...是常量。   UserWarning)

警告信息显示的功能显然是p值为0.我无法找到有关导致此警告的原因的任何信息。此特定函数的github文件位于:https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/feature_selection/univariate_selection.py

任何帮助都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

通过使用索引作为X中列数组的索引来获得功能: X_train.columns[yourindex]

然后,您可以手动删除此功能,也可以使用VarianceFilter删除所有零方差功能:

    from sklearn.feature_selection import VarianceThreshold
    constant_filter = VarianceThreshold(threshold=0)
    constant_filter.fit(X_train)
    constant_columns = [column for column in X_train.columns
                    if column not in
    X_train.columns[constant_filter.get_support()]]
    X_test = constant_filter.transform(X_train)
    X_test = constant_filter.transform(X_test)
    for column in constant_columns:
        print("Removed ", column)

您必须确定训练数据帧上的零方差特征,因为您的整个df可能多次包含该特征。然后从两个dfs中删除该功能。