数据分析 | 特征提取

本文介绍了使用sklearn库进行数据特征筛选的三种常见方法:方差过滤(VarianceThreshold)、卡方检验(SelectKBest with chi2)和F检验(SelectKBest with f_classif),针对不同数据类型和线性关系,有效剔除无效特征以提升模型效率和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

特征提取

1 方差过滤(VarianceThreshold)

2 卡方过滤(chi2;SelectKBest)

3 F检验(f_classif;SelectKBest)

关注我【生物海洋计算机支线】,获得更多生物海洋学,数据处理,作图等相关知识


上一节我们说到数据标准化和归一化

其作用是为了统一量纲,

数据分析 | 数据预处理(归一化和标准化)_我起飞啦的博客-优快云博客_归一化 数据预处理

之后介绍了PCA降维

其目的在于减少特征数,多指标变为综合指标

数据分析 | PCA(主成分分析)从入门到数学_我起飞啦的博客-优快云博客_pca数据分析

虽说是大数据时代了

但是很难遇到包含大量特征的数据

又但是,


特征提取

对特征进行筛选是十分必要的

过滤掉无效的信息,一方面能在后续的分析中节约计算时间,提高模型效率,一方面恰当的筛选可以提高模型的准确率。

以下介绍常用的筛选(删减)特征的方法

处理方法均来自sklearn库


1 方差过滤(VarianceThreshold)

通过特征本身进行筛选,方差小表示样本在这个特征上基本没有差异,甚至整个特征的取值都相同,那整个特征对样本基本没用,消除方差较小的特征有较高的优先级。

import pandas as pd 
data = pd.read_csv("E:\recognizor.csv") #783列特征
x = data.iloc[:,1:]   #特征列
y = data.iloc[:,0]    #目标列
x.shape 

from sklearn.feature_selection import VarianceThreshold 
selector = VarianceThreshold() #实例化,不填参数默认方差为0 
x_var = selector.fit_transform(x) #获取删除不合格特征之后的新特征矩阵 

x_var.shape

2 卡方过滤(chi2;SelectKBest)

对于分类型的数据,卡方检验可以计算每个非负特征和标签之间的卡方统计量,选择出前K个分数最高的特征。

其本质是推测两组数据间的差异,原假设(H0)为“数据之间相互独立”当P值<=0.05/0.01时,

拒绝原假设,即两组数据相关,或者说数据差异不是自然形成的样本误差。

from sklearn.ensemble import RandomForestClassifier as RFC 
from sklearn.model_selection import cross_val_score 
from sklearn.feature_selection import SelectKBest 
from sklearn.feature_selection import chi2 

#假设在这里需要100个特征 
x_fschi = SelectKBest(chi2, k=100).fit_transform(x, y) 
x_fschi.shape 

#或者通过查看特征和目标之间关系值进行筛选
chivalue, pvalues_chi = chi2(x,y) 
chivalue 
pvalues_chi 
#k取多少?我们想要消除所有p值大于设定值,比如0.05或0.01的特征: 
k = chivalue.shape[0] - (pvalues_chi > 0.05).sum() 

3 F检验(f_classif;SelectKBest)

F检验用来捕捉特征和目标之间的线性关系,当数据服从正态分布时效果更好。

F检验的原假设(H0)为“特征和目标之间不存在显著的线性关系”当P值<=0.05/0.01时,

拒绝原假设,即两组数据存在显著线性相关关系,无显著关系的则不考虑

from sklearn.feature_selection import f_classif

F,pvalues_f = f_classif(x,y)
F
pvalues_f
K = F.shape[0] - (pvalues_f>0.05).sum()

关注我【生物海洋计算机支线】,获得更多生物海洋学,数据处理,作图等相关知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值