Sklearn 单变量选择:特征是恒定的

Ale*_*lex 8 python feature-selection scikit-learn

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

C:\Users\Alexander\Anaconda3\lib\site-packages\sklearn\feature_selection\univariate_selection.py:113:UserWarning:功能...是不变的。用户警告)

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

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

小智 8

您可以通过使用索引作为 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)
Run Code Online (Sandbox Code Playgroud)

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