特征选择与降维1--特征选择

特征选择与降维1–特征选择

什么是特征?
特征其实就是之前我在数据挖掘中提到的属性,在特征选择中叫做特征。
所以特征和属性两种说法一直是等同的,之所以出现不同的说法,源自不同出处或者翻译版本,已经逐步成为一种约定俗成。如特征选择说法,不再强调也是属性选择;如后续学习到的决策树算法有属性度量概念,不再适宜叫特征度量。在数据挖掘的技术中,等同概念不同叫法的情况会经常出现,与这是一门汇聚多专业、来源且仍在持续发展的学科有关。

特征的来源?
特征一般会在数据挖掘时出现。一般特征有两种来源:
来源1:业务已经整理好各种特征数据,即业务指标,有时称为属性,我们需要去找出适合我们问题需要的特征。
来源2:从业务特征中自己去寻找高级数据特征,如若干原始特征的组合后形成一个新特征,即特征衍生。
对于上述两种来源,来源1通常是挖掘遇到的最初数据来源,是已有特征,也称原始特征。

什么是特征选择?
特征选择(feature selection)也被称为变量选择、属性选择或属性子集选择。它是为了构建模型而选择相关特征子集的过程。
特征选择是指从原始特征中挑选出一组最有代表性、分类性能好的特征。
特征选择没有确定的步骤,更多是工程上的经验和权衡,一般需要耗费较多的时间和精力,掌握常用的经验和权衡方法,可以极大提高挖掘建模的效率和效果。根据给定不同的挖掘任务,需要的特征组合可能不同。

我们为什么要进行特征选择?
使用特征选择技术有三个目的:
1.减少特征的数量
2.缩短模型训练时间
3.改善通用性、降低过拟合
现实中大数据挖掘任务,往往特征属性过多,而一个普遍存在的事实是,大数据集带来的关键信息只聚集在部分或少数特征上,因此需要从中选择出重要的特征使得后续的建模过程只在一部分的特征上构建,减少维数灾难出现的可能;去除不相关的特征,留下关键因素,降低学习任务难度,更容易挖掘数据本身带有的规律;同时在特征选择的过程中,会对数据特征的理解更加充分。
这里需要注意:一个特征选择方法,往往很难同时完成这两个目的

特征选择的原则:
1.特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分作用不明显,区分度不高。
2.特征之间的相关性:特征与特征之间的线性相关性,去除相关性比较高的特征。
3.特征与目标的相关性:与目标相关性高的特征,应当优先选择。
也就是说特征选择的原则也可以理解成获取尽可能小的特征子集,不显著降低分类精度、不影响类分布以及特征子集应具有稳定适应性强等特点。
总结地说,特征选择实际也是抽样的思想

常见特征选择的方法:
特征选择方法有很多,主要包含特征减少和特征扩增。
特征减少:
单变量特征选择方法:
单变量特征选择的原理是分别单独的计算每个变量的某个统计指标,根据该指标来判断哪些指标重要,剔除那些不重要的指标。这种方法比较简单,易于运行,易于理解,通常对于理解数据有较好的效果,但对特征优化、提高泛化能力来说不一定有效。包括:
Filter(过滤法)
基于模型的特征选择方法:
Wrapper(包装法)
Embedded(嵌入法)

特征扩增:
在原有基础上构造新的特征

1.Filter(过滤法)
俗称“飞刀法”。
Filter是一种启发式方法,基本思想是:制定一个准则,用来衡量每个特征对目标属性的重要性,以此对所有特征进行排序,或优选操作,特征选择的过程和后续的学习器无关(区别另外两个方法)。
过滤法是一类单变量特征选择的方法,独立地衡量每个特征与响应变量之间的关系,根据某一准则来判断哪些指标重要,剔除那些不重要的指标。

具体技术:
Filter - 方差选择法
方差越大的特征,对于分析目标影响越大,就越有用。如果方差较小,比如小于1,那么这个特征可能对算法作用比较小。最极端的,如果某个特征方差为0,即所有的样本该特征的取值都是一样的,那么对模型训练没有任何作用,可以直接舍弃。
注意:方差选择只能用于连续变量

Filter - 相关系数法
也称为Pearson相关系数,是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关。
注意:相关系数适用于特征类型均为数值特征的情况,且只对线性关系敏感。
在这里插入图片描述
Filter - 卡方检验
可以检验某个特征分布和输出值之间的相关性
卡方检验比方差选择要好用!
在这里插入图片描述
小结:
Filter方法总结起来就是利用不同的打分规则,如卡方检验、相关系数等规则对每个特征进行打分,即相当于给每个特征赋予一个权重,按照权重排序,对不达标的特征进行过滤

如果说要理解数据,或者理解数据结构,或者是数据分布,单变量特征选择是很好的方法,是最适合的选择。但是这种方法有一个缺点就是他是不能发现冗余的。比如不能避免选择的最优特征组合冗余等问题。

基于模型的特征选择方法目前主流的有两种:Wrapper(包装法),Embedded(嵌入法)
2.Wrapper(包装法)
也形象地称为“弯刀法”,其解决思路没有过滤法直接,在确认算法模型后,把模型本身的性能作为评价准则:
包装法需要结合后续选择的机器学习算法,一起选择出能使最终算法达到较高性能的特征子集。根据目标函数,每次选择部分特征,或者排除部分特征。
也可以理解为包装法就是给后续学习器量身定做的子集合。

常用包装法:
递归特征消除法:RPE
使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练。
RFE具体思路:
指定一个有n个特征的数据集。
选择一个算法模型来做RFE的基模型。
指定保留的特征数量 k(k<n)。
第一轮对所有特征进行训练,算法会根据基模型的目标函数给出每个特征的 “得分”或排名,将最小“得分”或排名的特征剔除,这时候特征减少为n-1,对其进行第二轮训练,持续迭代,直到特征保留为k个,这k个特征就是选择的特征。

3.Embedded(嵌入法)
相比前两种方法要更加复杂,它利用机器学习算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。
它类似过滤法,但它是通过机器学习训练来确定特征的优劣,而不是直接从特征的统计学指标来确定特征的优劣。
和包装法相比,嵌入法也是用机器学习的方法来选择特征,区别是不通过不停的筛掉特征来进行训练,每次迭代使用的都是特征全集。
嵌入式特征选择方法是将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动完成了特征选择。

三种方法对比:
在这里插入图片描述
特征选择过滤法中的方差选择法的实现
利用开源的鸢尾花数据集完成过滤法的练习,鸢尾花数据集是开源的并且来自于网络,是在数据挖掘练习中最常使用的数据集。
实验环境:
3.6以上版本的Python环境,并且需要安装numpy,pandas,scipy、scikit-learn(以下简称sklean),matplotlib第三方库

实验的思路:
鸢尾花数据集分别有4个特征表征花的不同特点,目标变量target是3种不同的鸢尾花类型。4个特征分别是:sepal length (cm)(花萼长度)、sepal width (cm)(花萼宽度)、petal length (cm)(花瓣长度)、petal width(cm)(花瓣宽度)。目标变量target是三种鸢尾花:setosa(山鸢尾)、versicolor(杂色鸢尾)、virginica(维吉尼亚鸢尾)。
首先要导入数据集
第二步对数据进行简单解读和整合
第三步通过调用sklearn中的子模块中feature_selection的不同方法或函数分别对鸢尾花数据的特征进行方差选择法(调用VarianceThreshold方法)进行计算
1.导入数据集

import pandas as pd
from pandas import DataFrame as df
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

2.查看鸢尾花数据集

iris = load_iris()
X, y = iris.data, iris.target
#以数据框形式查看数据,先定义一个数据框类型的变量	
Iris_df=pd.concat([df(X,columns=iris.feature_names),df(y,columns=['target'])],axis=1)
# 随机按列查看数据框的5行
Iris_df.sample(5,axis=0)

3.利用方差选择计算

from sklearn.feature_selection import VarianceThreshold
X_var=VarianceThreshold(threshold=0.5).fit_transform(X, y) #使用阈值 0.5进行选择
X_var[0:5]#输出方差选择后特征的前5行

4.输出结果

array([[5.1, 1.4, 0.2],
       [4.9, 1.4, 0.2],
       [4.7, 1.3, 0.2],
       [4.6, 1.5, 0.2],
       [5. , 1.4, 0.2]])
发布了30 篇原创文章 · 获赞 19 · 访问量 2211

猜你喜欢

转载自blog.csdn.net/qiaoqiaomanman/article/details/104759896