【066】特征工程之 Fillter 法

本文介绍了特征工程中Filter方法的选择特征原理,包括方差选择法、相关系数法、卡方检验和互信息法。强调了Filter方法在计算效率和防止过拟合方面的优势,但也指出其可能丢失有价值特征的问题。内容涵盖了各种方法的实现原理、优缺点及应用场景。
摘要由CSDN通过智能技术生成

内容目录

一、概念及工作原理1、从哪些方面来选择特征呢2、为什么要进行特征选择3、处理高维数据的两大主流技术二、特征选择方法Filter 的四种基本方法1、Filter 之方差选择法2、Filter 之相关系数法3、Filter 之卡方检验4、Filter 之互信息法

一、概念及工作原理

1、从哪些方面来选择特征呢

  当数据处理好之后,我们需要选择有意义的特征输入机器学习的模型进行训练,通常来说要从两个方面考虑来选择特征,如下:
      (1)特征是否发散
  如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
      (2)特征与目标的相关性
  这点比较显见,首先,特征与目标相关性高的特征,应当优先选择,其次,特征与特征之间相关性高的,应当优先去除掉其中一个特征,因为它们是替代品。

2、为什么要进行特征选择

  (1)减轻维数灾难问题
  (2)降低学习任务的难度

3、处理高维数据的两大主流技术

  (1)特征选择
  (2)降维

二、特征选择之 Filter 的四种基本方法

Filter简介

  • 它主要侧重于单个特征跟目标变量的相关性。

  • 优点是计算时间上较高效,对于过拟合问题也具有较高的鲁棒性。

  • 缺点就是倾向于选择冗余的特征,因为他们不考虑特征之间的相关性,有可能

    某一个特征的分类能力很差,

  • 但是它和某些其它特征组合起来会得到不错的效果,这样就损失了有价值的

    特征。

# 加载 IRIS 数据集做演示
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import LabelEncoder


df = sns.load_dataset('iris')
print(df.head())
print(df.shape)
df['species'] = LabelEncoder().fit_transform(df.iloc[:, 4])
df.head()
df['species'].unique()   #array([0, 1, 2], dtype=int64)
sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa
(150, 5)
Out[5]:
  sepal_length  sepal_width  petal_length  petal_width  species
0           5.1          3.5           1.4          0.2        0
1           4.9          3.0           1.4          0.2        0
2           4.7          3.2           1.3          0.2        0
3           4.6          3.1           1.5          0.2        0
4           5.0          3.6           1.4          0.2        0

1、方差选择法

  为什么方差可以用于选择特征呢?先从方差的概念说起,方差是衡量一个变量的离散程度(即数据偏离平均值的程度大小),变量的方差越大,我们就可以认为它的离散程度越大,也就是意味着这个变量对模型的贡献和作用会更明显,因此要保留方差较大的变量,反之,要剔除掉无意义的特征。

      思路:先计算各个特征的方差,然后根据设定的阈值或待选择阈值的个数,选择方差大于阈值的特征,公式如下:

(1) 计算特征的方差。假设X=[x1,x2,...,xn],则方差为(其中是μ平均值,一般样本       方差(n-1)选择较好):

(2) 设定阈值,并筛选出大于阈值的特征或者筛选出待选择阈值的个数。

(3) 比如一个特征本身的方差很小,就表示样本在这个特征上基本没有差异,可能特征中的大      多数值都一样,甚至整个特征的取值都相同,那这个特征对于样本区分没有什么作用。所      以无论接下来的特征工程要做什么,都要优先消除方差为0的特征。VarianceThreshold      有重要参数threshold,表示方差的阈值,表示舍弃所有方差小于threshold的特征,不        填默认为0,即删除所有的记录都相同的特征。

# 方差选择法
#方法一
def VarianceThreshold(df, threshold=0.):
    dfc = df.iloc[:, :4].copy()
    print(dfc.shape)  #(150, 4)
    print('特征名:\n', dfc.columns.tolist())
    # 1 求方差
    var = np.sum(np.power(np.matrix(dfc.values)-np.matrix(dfc.mean()), 2), axis=0)/(dfc.shape[0]-1)
    print(var.shape)  #(1, 4)
    T = []
    # 2 筛选大于阈
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值