机器学习--低方差特征过滤法的巨大缺陷

引入

        机器学习中,一个重要的步骤就是特征工程。在特征降维中,对于一数据集,其中某些特征值与目标值的相关性并不大,因此对于这些特征值,往往需要进行处理(这里指的是去除),有一种常用的方法是--低方差特征过滤法。

        该方法的原理是:计算逐个计算所有特征值的方差,如果得到的方差值小于给定的超参数,则认为该特征大多样本的值比较接近,进而选择性的去除该特征。

        api为:sklearn.feature_selection.VarianceThreshold(X),参数X为方差阈值,若计算得出的特征方差小于该值,则去除该特征。

举例说明

        在最近的使用过程中,发现一个巨大的缺陷--低方差特征过滤法对特征值的大小极为敏感。

下面用一个例子来说明这个问题:

import numpy as np
import pandas as pd
from sklearn.feature_selection import VarianceThreshold

data = [
    [0.124, 1, 124],
    [0.576, 3, 576],
    [0.036, 4, 36],
    [0.796, 6, 796],
    [0.326, 5, 326],
    [0.148, 1, 148]
]
line_name = ['l1', 'l2', 'l3', 'l4', 'l5', 'l6']
col_name = ['feature1', 'feature2', 'target']
data = pd.DataFrame(data, line_name, col_name)
# print(data)
# print(np.var(data['feature1']), np.var(data['feature2']))

transfer = VarianceThreshold(threshold=1)
transfer_data = transfer.fit_transform(data.iloc[:, 0:2])
# print(data.iloc[:, 0:2])
# print(transfer_data)

        代码如上,data为数据集,其中data的前两列为特征值feature1和feature2,最后一列为特征值target。单从肉眼看,feature1明显与target有极大的线性相关性,而feature2基本没有。下面计算feature1与feature2的方差:

D1 = np.var(data['feature1'])
D2 = np.var(data['feature2'])

计算结果为:

D1 = 0.07326188888888889

D2 = 3.555555555555556

        那么根据低方差特征过滤法,代码中超参数的值为1(方差阈值),明显D1<1<D2,那么该算法将删除feature1特征,然而feature1的与特征值的线性相关度明显比feature2大。那么从这里不难看出,这种算法确实很容易受到特征值大小的影响

改进方法

预判数据相关性

        所谓预判数据相关性,就是在进行低方差特征过滤法之前,先对所有特征值,计算其与目标值之间的线性相关程度,记为K(可以拿损失函数的最小值作为K)。对于K的值,确定时应该尽量偏大(即我们有很大的把握对于某特征值,该特征是与目标值线性相关的)。而筛选后的那些,很可能相关、几乎不相关...的数据,则作为低方差特征过滤法的输入进一步筛选。

        在上面的例子中该过程可以理解为,先计算feature1和feature2与target之间的线性相关程度,得到结果为:feature1明显与特征值线性相关,feature2几乎不相关(feature2的值为其他也可以,只要feature2的值计算后,被认为不是有很大把握feature2与target线性相关,那么就应该与feature1区分开来)。之后,feature2作为低方差特征过滤法的输入(显然当超参数X设置为1时,feature2会被过滤掉),而feature1则被保护不参与低方差特征过滤法。

        经过这种操作,某些特征值大小较小,却与目标值有很大相关的特征会被“保护起来”,低方差特征过滤法的准确率会大大提升,具体的代码实践不会特别难,这里就不展示。

### 回答1: 方差过滤法(LDF)是一种机器学习算法,它通过计算数据样本的方差来确定最好的属性,从而提高机器学习模型的性能。它的过程如下:首先,使用某种统计指标(如信息增益或基尼不纯度)计算每个属性的信息量;其次,计算每个属性的方差,并按照方差从大到小的顺序对属性进行排序;最后,从排序后的属性中挑选最优的属性,并将其作为数据集中的有用特征。示例演示如下:假设有一个数据集,它包含四个属性:A,B,C和D。为了使用方差过滤法,我们首先要计算每个属性的方差,并按照从大到小的顺序进行排序。假设计算出的方差排序结果如下:B > A > C > D,则最优属性为B,它将作为数据集中的有用特征。 ### 回答2: 方差过滤法是一种特征选择方法,在机器学习中常用于选择对目标变量影响较大的特征。其过程如下: 1. 计算每个特征方差:首先计算每个特征方差方差表示数据的变异程度。方差较小的特征表示该特征的取值相对集中,变动较小。 2. 选择方差特征:根据预先设定的阈值,筛选出方差于阈值的特征,即方差特征。阈值的选择可以根据实际问题和经验进行。 3. 移除方差特征:将筛选出的方差特征从数据集中移除,得到一个新的特征集合,该特征集合中的特征方差较高,表示该特征的取值变动较大。 通过方差过滤法,可以减少特征空间的维度,提高模型的训练速度,并且过滤掉对目标变量影响较小的特征,避免噪声和冗余的特征对模型的干扰。 下面通过一个简单的演示来说明方差过滤法的作用: 假设有一个数据集包含4个特征:身高、体重、年龄和收入。首先计算这4个特征方差,发现身高和体重的方差较大,年龄和收入的方差较小。 设定阈值为0.1,筛选出方差于0.1的特征,即年龄和收入。将这两个特征从数据集中移除,得到一个新的特征集合,只包含身高和体重。 通过方差过滤法,我们得到了一个特征集合,其中的特征方差较高,表示身高和体重的取值变动较大,这两个特征对目标变量的影响更为显著。可以将这个特征集合用于进一步的模型训练和预测。 ### 回答3: 方差过滤法是一种用于特征选择的方法,它通过计算特征方差来评估特征的重要性,从而选择对目标变量影响较大的特征方差过滤法的过程如下: 1. 首先,我们需要准备一个训练集,其中包含一些样本和相应的目标变量。 2. 然后,对于每个特征,计算其在训练集中的方差。 3. 按照方差的大小,对特征进行排序。 4. 选择具有最小方差的前n个特征,作为最终的特征子集。 下面以一个简单的例子来演示方差过滤法: 假设我们有一个训练集,包含5个样本和3个特征(X1,X2,X3),以及目标变量(Y)。 样本矩阵如下所示: | X1 | X2 | X3 | Y | |----|----|----|---| | 1 | 2 | 3 | 0 | | 4 | 5 | 6 | 1 | | 7 | 8 | 9 | 0 | | 2 | 3 | 4 | 1 | | 5 | 6 | 7 | 0 | 首先,计算每个特征方差方差(X1) = 4.3 方差(X2) = 4.3 方差(X3) = 4.3 然后,按照方差的大小进行排序: 方差排序:X1 = X2 = X3 最后,选择方差最小的前2个特征,即X1和X2作为最终的特征子集。 方差过滤法的演示告诉我们,方差较小的特征对目标变量的影响较小,可能不具备区分不同样本的能力。通过选择方差较大的特征子集,我们可以更好地挖掘特征与目标变量之间的相关性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值