sklearn中的数据预处理和特征工程----【3】方差过滤

Feature Engineering【VarianceThreshold】

  • Feature Extraction
    • 从文字,图像,声音等其他非结构化数据提取新信息作为特征
  • Feature Creation
    • 已有的特征进行组合,或者相互计算,得到新的特征
  • Feature Selection
    • 从所有特征中选择出有意义的,对模型有帮助的特征

达到降低计算成本的效果

Step

  • **step1 理解业务:**根据常识对项目的数据进行判断相关性从而理解数据
    • 无法理解特征
      • 过滤
      • 嵌入
      • 包装
      • 降维算法
维度:指的是特征的数量

如果维度过高,SVM或者神经网络直接算不出来(还要升维的算法),(42000,700+) 的数据,KNN也要跑半小时

过滤!

Filter

进行机器学习算法之前,利用过滤法(根据各种统计检验的分数和各种相关性指标 来 选择特征)

流程: 从全部特征提取出最佳特征子集。再进行机器学习算法使用。

  • 方差过滤
    • 使用 VarianceThreshold
      • 通过特征本身的方差来筛选特征的类
        • 方差小表示基本没啥差异:一整个特征的取值十分相近,这样的特征对于区分样本没有太大的作用(方差为0或者很小)
        • 这是要优先消除的
from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold()
X_var0 = selector.fit_transform(X)
# 直接写成下面的比较简便 
X_var0 =  VarianceThreshold().fit_transform(X)

**如何去除指定量的特征:**指定方差的中位数为多少

这前提是想要50%的方差

import numpy as np
X_fsvar = VarianceThreshold(np.median(X.var().values)).fit_transform(X)

"""
X.var()  获得每一列的方差 是 Series结构
X.var().values  每一列方差  是 array结构
np.median(x)  x是一堆数,这个方法选取中位数
"""

特征是二分类变量,特征的取值就是伯努利随机变量,计算方差公式可以为
V a r [ X ] = p ( 1 − p ) Var[X] = p(1-p) Var[X]=p(1p)
X是特征矩阵,p是二分类特征中的一类在这个特征中的占比。

这样的降维会使得模型更好吗?

  • 对于KNN来说,准确率相似,算法效率会高特别多;

    • 对于:**KNN,单棵决策树,SVM,神经网络,回归算法,**都需要遍历特征或者升维进行运算,本身运算量很大。
      • sklearn中的决策树自己也是随机选取的但是选的特征数量比随机森林多得多,所以特征多的时候时间也比较长
  • 对于随机森林来说,本身速度很快,所以时间没啥差别,准确率也没什么大的区别。

    • 对于:随机森林本身就是随机选取特征进行分枝。

阈值的选择:

  • 阈值比较大的时候,模型可能更好也可能不好,看为噪音还是为有贡献的特征;计算复杂度也会可能大幅下降
  • 通常选择阈值很小的,过滤基本无影响的数值
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JamePrin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值