目录
关注我【生物海洋计算机支线】,获得更多生物海洋学,数据处理,作图等相关知识
上一节我们说到数据标准化和归一化
其作用是为了统一量纲,
数据分析 | 数据预处理(归一化和标准化)_我起飞啦的博客-优快云博客_归一化 数据预处理
之后介绍了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()