【问题标题】:Sklearn VarianceThreshold not removing low variance featuresSklearn VarianceThreshold 不删除低方差特征
【发布时间】:2021-05-01 21:55:53
【问题描述】:

这是我在这里的第一篇文章。如果您有关于更有效地提问的建议,我很想听听。

我正在使用梅赛德斯奔驰数据集,可以在 kaggle here 上找到它。该数据集有 369 个数值特征。删除目标方差和分类特征后,我希望删除低方差特征。我正在使用 Sklearn 的方差阈值。

我将包含代码,但这些步骤似乎很简单。我玩过阈值参数,但每次拉出转换后数据集的形状时,它都有相同的 369 个特征。

如果有人看到我哪里出错了,我感谢您的帮助!

    X = df.iloc[:, df.columns != 'y']
    Y = df.iloc[:, df.columns == 'y']
    print(X.shape)
    print(Y.shape)

(4209, 377)
(4209, 1)

X_cat = X.select_dtypes(include = 'object')
X_num = X.select_dtypes(include = 'int64')
print(X_cat.shape)
print(X_num.shape)

(4209, 8)
(4209, 369)

X_num.var().sort_values()

X268    0.000000e+00
X297    0.000000e+00
X290    0.000000e+00
X289    0.000000e+00
X330    0.000000e+00
            ...     
X191    2.492121e-01
X362    2.496467e-01
X337    2.497867e-01
X127    2.500357e-01
ID      5.941936e+06
Length: 369, dtype: float64

from sklearn.feature_selection import VarianceThreshold
VT = VarianceThreshold()
VT.fit_transform(X_num)
print(X_num.shape)

(4209, 369)

【问题讨论】:

  • 快点,你使用inplace = True吗?
  • fit_transform 适合然后转换并返回值。它不会就地修改它。试试:X_num = VT.fit_transform(X_num).

标签: python scikit-learn feature-selection variance


【解决方案1】:

您没有转换原始数据:

from sklearn.feature_selection import VarianceThreshold
# defining the function VT
VT = VarianceThreshold()
#Fit the function VT and transform, but not saving it
VT.fit_transform(X_num)

所以你必须把它改成:

from sklearn.feature_selection import VarianceThreshold
# defining the function VT
VT = VarianceThreshold()
#Fit the function VT and transform, and saving it in X_num
X_num = VT.fit_transform(X_num)

【讨论】:

  • 就是这样!感谢您的帮助!
猜你喜欢
  • 2015-05-31
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
  • 2017-05-10
  • 2018-12-25
  • 2017-04-06
相关资源
最近更新 更多