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)
这是我第一次 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)