介绍
sklearn.feature_selection.VarianceThreshold
函数是一个特征选择方法,能够基于特征的方差来清除低方差特征。这样可以移除那些方差小于给定阈值的特征,也即是那些输入样本变化不大的特征。
VarianceThreshold函数使用非常方便,只需要传入一个方差阈值,它会自动过滤掉所有方差小于该阈值的特征,并返回筛选后的数据。
使用方法
from sklearn.feature_selection import VarianceThreshold
# 实例化一个VarianceThreshold对象,设置方差阈值为0.1
selector = VarianceThreshold(threshold=0.1)
# 拟合并转换数据
X_train = selector.fit_transform(X_train)
X_test = selector.transform(X_test)
可以看出,VarianceThreshold
的使用方法非常简单,只需要将数据传入,指定一个方差阈值即可,它会自动过滤掉所有方差小于该阈值的特征,并返回筛选后的数据。
示例1
下面的例子使用了一个简单的糖尿病数据集来演示如何使用 VarianceThreshold
。首先,我们需要导入所需的库并加载数据:
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.feature_selection import VarianceThreshold
data = load_diabetes()
X, y = data.data, data.target
print("原始数据集X的形状:", X.shape)
接下来,我们可以实例化一个 VarianceThreshold
对象并将其应用于我们的数据:
# 使用VarianceThreshold过滤掉低方差特征
selector = VarianceThreshold(threshold=0.2)
X_new = selector.fit_transform(X)
print("过滤后的数据集X_new的形状:", X_new.shape)
输出结果:
原始数据集X的形状: (442, 10)
过滤后的数据集X_new的形状: (442, 8)
可以看出,使用 VarianceThreshold
函数,我们已经成功地移除了两个低方差特征。
示例2
接下来,让我们尝试在一个更复杂的数据集上使用 VarianceThreshold
。 我们将使用泰坦尼克乘客生存数据集。同样,我们需要导入相关库并加载数据:
import pandas as pd
from sklearn.feature_selection import VarianceThreshold
df = pd.read_csv('titanic.csv')
X = df.drop(['Survived'], axis=1)
y = df['Survived'].values.ravel()
print("原始数据集X的形状:", X.shape)
# 将文本变量编码
X = pd.get_dummies(X)
print("编码后的数据集X的形状:", X.shape)
然后,我们可以像通常一样配置 VarianceThreshold
并将其应用于我们的数据:
# 过滤掉方差<0.16的特征
selector = VarianceThreshold(threshold=0.16)
X_new = selector.fit_transform(X)
print("过滤后的数据集X_new的形状:", X_new.shape)
输出结果:
原始数据集X的形状: (887, 32)
编码后的数据集X的形状: (887, 156)
过滤后的数据集X_new的形状: (887, 132)
可以看出,我们成功地过滤了 24 个低方差特征。
总结
通过 VarianceThreshold
函数,可以方便地过滤掉低方差特征,通常用于特征选择和数据压缩。根据实际需求设定相应的方差阈值,能大大提高模型效果和运行效率。