python相关性分析后怎样删除特征_震惊!数据分析还能这样
做?
原标题:震惊!数据分析还能这样做?
数据分析概述
数据分析完整⼯作流程
关于数据分析的⼤体流程这⾥以图形的形式展现给⼤家,就不做过多的讲述。
数据探索与相关性分析
这⼀部分是直接从数据分析⼯作流程中的数据整理与清洗开始。
数据探索,探索性数据分析(Exploratory Data Analysis),简称EDA。传统的统计⽅法是先假定数据服从某种分布,然后运⽤这种模型进⾏预测,以概率论为基础,做参数检验。⽽EDA则是强调数据,“抛开”概率的理论,从数据出发,主要⼿段是汇总统计,可视化。
在进⾏EDA时,我们可以分为三个阶段,分别是:
数据概况分析
单变量分析
多变量分析
⽤图形来展⽰如下:
接下来跟⼤家简单的分享⼀下数据探索性分析的流程,下⾯的所有过程都会使⽤到Python的pandas包。
数据概况分析
在数据概况分析阶段,我们主要了解数据整体的基本情况,⽐如数据的离散程度,数据的分布等,以及数据中是否存在异常值/缺失值。这⾥以⼆⼿车价格预测的数据来做个例⼦。(代码看不懂没关系,看结果就好,不妨碍理解)
结果如下图所⽰。
count:该属性下数据的总数;
mean:平均数;
std:标准差,数据的偏离均值程度;
min~max:中间是四分位数,⽤于判断样本数据的分布情况和离值等;
注:上⾯的描述统计针对的是数值型的变量,不包含类别型变量。
对于类别型的属性,⾸先查看⼀下这个属性有什么类别,如果类别数量不多的话,后⾯可以考虑将它转变为哑变量⽅便分析和建模。
类别型的统计描述与数值型的数据不⼀样,具体如下图所⽰。
类别型数据描述统计的参数含义是:
unique: 唯⼀值数
top: 频数最⾼者
freq: 最⾼频数
单变量分析
连续型数值变量分析
这⾥我们拿⼆⼿车数据的price字段来举个例⼦,见下图。
⽆论是单变量分析还是多变量分析阶段,都需要做⼤量的图对变量进⾏分析,因为通过图形的展⽰能够更加的直观看到问题所在。除了上⾯的直⽅图,我们还可以采⽤箱线图对数据进⾏可视化分析。
通过可视化分析后,如果数据存在离值,我们可以看看它在数据中的占⽐,再酌情删除,避免其对后续的模型构建造成影响。
如果变量数据存在缺失值,我们会看看缺失值占⽐,如果占⽐不⾼,我们可以通过填充均值的⽅式(适⽤于数值型(连续型)变量)来对缺失值进⾏填充。
离散型变量分析造访的意思
对于离散型变量,我们可以⽤value_counts()函数来统计各类别数量和占总数⽐,也可以⽤直⽅图来进⾏可视化分析,如下图所⽰,X轴即为离散型变量的值。
如果离散型数据的类别过多,我们可以⽤先验知识查看各类别型数据,到其区分点,对其进⾏⼀个特征衍⽣。
举个例⼦,如下,是邮箱属性下的类别数值。
假设通过先验知识,我们得知到某个邮箱类别是匿名的,那么我们就可以将这个邮箱属性⾥的类别分为两类,⼀类是⽆匿名的,⼀类是匿名的,经过处理后,便衍⽣除了⼀个新的特征——邮箱是否匿名,同时也⽅便了对值多的离散型变量的处理。
相关性分析
⼀般来说,相关性分析是我们建模前的最后⼀个步骤。为什么要相关性分析呢?
当特征(属性)间的相关性达到0.99甚⾄1这种程度时,需要对特征(属性)进⾏删除处理。当特征(属性)相关性⾼时,模型会偏向采样这些⾼相关的特征,导致最后模型会依赖这些相关性⾼的特征,最终结果就是降低模型的泛化性能。
通过删除⾼相关性的数据,⼀⽅⾯可以节约内存,另⼀⽅⾯可以提⾼算法模型的泛化能⼒。
关于计算相关性的⼀个问题
最好使⽤全量数据进⾏相关性计算。
Pandas的corr函数(采⽤的是⽪尔逊相关系数)计算相关性存在⼀个问题,就是如果两个特征存在较多的缺失值,那么计算出来的结果的偏差是很⼤的。举个例⼦:
相关系数只会计算⼆者都不缺失的位置,对于上⾯的相关性计算来说,也就是5,那么算出来的结果是1。
显然这是错误的,所以我们要先进⾏缺失值的搜索,把缺失值恰好完全相同的特征放在⼀起,这样后续我们进⾏相关性的计算才是合理的
类别型数据的相关性⽆法使⽤⽪尔逊相关系数去计算,需要使⽤⼀些特殊的指标去衡量。
相关性分析的可视化结果如下,采⽤的是热⼒图。
关于相关性⾼特征删除的⼀个问题
当两个特征,假设C1和C2两个特征相关性达到0.97,那么此时该删除哪个特征呢?
看C1和C2完全不相同的取值有多少个。
这⾥选择删除C4,对于数来说,取值不同的越多,相对来说可能分裂的地⽅也就越多,也就意味着这个特征包含的信息量越多。
当然也可以看特征的IV值,但是较为⿇烦,计算耗费时间,还不如⽤上⾯的⽅法,更加⽅便快速。
建模
⼀般情况下,在经过探索性数据分析和相关性分析后,我们就可以利⽤数据进⾏建模分析了。在建模分析或者说数据分析开始前,我们第⼀个需要明确的,就是我们为什么要进⾏数据分析,我们数据分析的⽬的是什么?
拿⼆⼿车价格预测举个例⼦,我们对⼆⼿车的数据进⾏分析,⽬的就是为了预测某种类型的⼆⼿车它⼤概能卖多少钱?这就是我们建模中的因变量——价格。⽽⼆⼿车的型号、品牌、使⽤年限等数据就是⾃变量。
对于建模来说,我们不需要⼀股脑的把所有的⾃变量都加⼊模型当中,并不是喂给模型的⾃变量越多出来的模型就越壮,它可能会被“撑死”,即表现为训练出来的模型效果不好,跟瞎猜没两样。
我们⾃变量的投喂是要依据前⾯的相关性的分析,去除⾼度⼀致(相关性⾼)的⾃变量中的⼀个,选取与因变量的相关性⾼的⾃变量,来进⾏建模。
⽽对于建⽴的模型的选择,根据你的⽬的,如果你是对⼀连串数值的预测,你可以选择线性回归模型,也可以选择CART算法的回归树模型。
如果你是想预测分类数据,且是⼆分类的问题,⽐如预测⽤户是否购买,则采⽤⼆元逻辑回归模型,当然,也可以采⽤使⽤CART算法的分类树模型。
如果你是想建模解决多分类问题,则也可以采取建⽴多个决策树模型来解决当然也可以采⽤多元逻辑回归模型。
如果你是想解决空间数据的分类问题,那么SVM算法模型是个不错的选择。
当然以上都只是我个⼈的建议,模型并不只局限上⾯⼏种。
模型评估
输出为连续型数值的模型评估
建⽴好模型后,我怎么知道模型的优劣呢?这个时候就需要对建⽴好的模型进⾏⼀个评估,相应的,python的sklearn库中就有相应的评分函数,我们可以调⽤来计算。
对于模型输出的结果是连续的数值类的模型,我们通常采⽤偏差均值和绝对值差均值来衡量模型的效果。通过将数据切割为训练集和测试集,测试集的数据拿来进⾏测试,训练集的数据拿来进⾏训练模型。
训练集数据训练出来模型后,将测试集的数据投喂给模型,最后得出模型预测的测试集的因变量的数值,我们⽤Vt表⽰,⽽测试集原来的因变量⽤Vd表⽰
则绝对值偏差均值为:
则⼆乘偏差均值为:
模型优化的⽬标就是使得绝对值偏差(LAD)均值,或者⼆乘偏差(LSD)均值最⼩。
幼儿园教师节送什么礼物好对于⽆划分测试集的输出问连续型的模型评估
这⾥可以采⽤K折交叉验证的⽅法,详情可以⾃⾏百度,这⾥不多解释。
输出结果为离散型数值的模型评估
这⾥的模型指的就是分类问题的模型,这类模型⼀般输出结果固定为0(是)或1(否),可以通过划分训练集,测试集的⽅法直接⽐对结果就可。
模型优化
对于评估效果不好的模型,⼀般我们会调整模型的⾃变量,带⼊不同的特征(⾃变量),看看哪个⾃变
电子身份证量组合对模型输出的结果的准确率最⾼,就拿哪个⾃变量组合作为建模变量。
此外,还可以调整模型的迭代次数或通过数据进⾏⼀些变换处理,使得模型得到优化。
这⾥拿⼆⼿车价格预测的模型优化前后的可视化展⽰来做个例⼦。
信阳职业技术学院录取查询这是⼀开始的模型结果可视化图。
梦见被蛇咬是什么意思红⾊的线条是测试集因变量的数据,蓝⾊的线条是模型预测的测试集的因变量数据,可以看到两种颜⾊的线条差异较⼤,说明模型效果并不好。
儿时通过对数据进⾏⼀些变换处理后的模型结果可视化如下:
可以发现,经过处理后,模型的性能得到了很⼤的优化。
模型的优化⽅法还有很多,我这⾥就不⼀⼀列举了,今天分享的内容就到这⾥,希望能对⼤家有所帮助。
⼤家可以关注我的个⼈⽹站,搜索everweekup,后续会有更多⼲货和⼤家分享!
码字不易,希望⼤家如果觉得“⽂”有所值,帮忙我转发⼀下吧,谢谢⼤家!返回搜狐,查看更多
责任编辑:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论