低方差过滤器在特征选择中的应用

数据科学领域,特征选择是一个重要的步骤,它可以帮助从大量数据中筛选出对模型预测最有帮助的特征。继缺失值比率之后,本文将介绍另一种特征选择技术——低方差过滤器。

假设有一个数据集,目标是预测租赁自行车的数量。在这个数据集中,假设没有缺失值。如果查看变量f5,会发现所有的值都是相同的——都是7。这样的变量会对计数变量产生影响吗?答案是不会,因为f5的方差为零。

方差是衡量数据分散程度的一个指标,它告诉数据点与均值之间的距离。方差的计算公式如下:

variance = Σ(xi - mean)^2 / n

使用这个公式计算f5变量的方差,结果为零,因为所有的值都是相同的。可以看到,方差低的变量对目标变量的影响较小。接下来,可以设置一个方差的阈值,如果变量的方差低于这个阈值,可以考虑删除该变量。但有一个非常重要的点需要记住:方差是范围依赖的,因此在应用这种技术之前,需要进行归一化处理。

低方差过滤器的实现

现在,让在Python中实现这个过滤器,并在一个实际场景中看看它是如何工作的。首先,需要导入所需的库:

import pandas as pd from sklearn.preprocessing import normalize

讨论了在计算方差时使用归一化。因此,将在这里的实现中导入它。不用担心,稍后会看到在哪里应用它。接下来,读取数据集:

data = pd.read_csv('low_variance_filter-200306-194411.csv')

假设将查看前五个观测值:

data.head()

可以看到一些独立的变量和一个目标变量,即自行车的数量。快速查看数据的形状:

data.shape

它确认正在使用6个变量或列,并有12,980个观测值或行。现在,让检查是否有缺失值:

data.isnull().sum()/len(data)*100

数据集中没有缺失值,这很好。让快速查看数据类型或变量。为什么要这样做?记住,只应该在数值变量上应用方差过滤器。如果有分类变量,可以查看类别的频率分布。如果一个类别的重复频率非常高,比如说95%或更高,那么可以删除那个变量。但在例子中,只有数值变量,如所见:

data.dtypes

因此,将应用低方差过滤器并尝试降低数据的维度。在继续之前,首先删除ID变量,因为它包含每个观测的唯一值,并且在这里对分析并不相关:

data = data.drop('ID', axis=1)

让验证一下否确实删除了ID变量:

data.shape

是的,剩下五列。完美!下一步是归一化变量,因为方差是范围依赖的。正如在数据集中看到的,变量的范围相当高,这将扭曲结果。所以,继续进行归一化处理:

normalize = normalize(data)

将结果保存在名为data_scaled的数据框中,然后使用.var()函数计算方差:

data_scaled = pd.DataFrame(normalize) data_scaled.var()

将方差结果存储在一个新的列中,列名存储在另一个变量中:

variance = data_scaled.var() columns = data.columns

接下来是for循环。将设置一个0.006的阈值。如果变量的方差大于阈值,将选择它并丢弃其余的。让继续实现这一点:

variable = [] for i in range(0,len(variance)): if variance[i] >= 0.006: #设置阈值为1% variable.append(columns[i])

好的,让看看有什么:

variable

temp变量已被丢弃。其余的根据阈值被选中。可以交叉检查,temp变量的方差为0.005,阈值是0.006。这就是为什么它在这里被丢弃的原因。让继续并将结果保存在一个新的数据框中,并查看前五个观测值:

new_data = data[variable] new_data.head()

一切按照计划进行。现在,计算剩余变量的方差:

new_data.var()

注意到有什么不同吗?是的,方差变大了,因为没有进行归一化。最后,验证新数据和原始数据的形状:

new_data.shape, data.shape

这基本上证实了在这种特征选择方法中所做的工作,以降低数据的维度。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485