【问题标题】:Sklearn Univariate Selection: Features are ConstantSklearn 单变量选择:特征是恒定的
【发布时间】:2016-05-08 08:07:59
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你发现了吗?我也收到了这个
  • 这意味着Features [indices of features] 是不变的。使用 X[indice] 查看发生了什么。我相信这些特征对于所有样本都是 0。
  • 您能更具体地了解一下这里的“X[indice]”是什么吗?
  • @Long 我猜 seralouk 建议检查该功能的值,以查看是否有不同的值或整个列由相同的值组成。 X 表示数据集。所以 X[indice] 是数据集中的一个特征。如果您发现所有值都相同,则该特征本身在您的模型中将具有 0 效果。

标签: python scikit-learn feature-selection


【解决方案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 中删除该功能。

【讨论】:

    猜你喜欢
    • 2014-02-27
    • 2017-04-06
    • 2017-04-26
    • 2014-09-21
    • 2019-01-12
    • 2016-01-02
    • 2020-08-10
    • 2021-04-27
    • 2018-02-27
    相关资源
    最近更新 更多