Sklearn VarianceThreshold 不删除低方差特征

Sklearn VarianceThreshold not removing low variance features

这是我第一次 post 来这里。如果您有关于更有效地提问的建议,我很想听听。

我正在使用 Mercedez-benz 数据集,可以在 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)

您没有转换原始数据:

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)