赞
踩
目录
特征工程 2
缺失值处理 15
评价指标 33
逻辑回归 37
决策树 40
随机森林 46
SVM 49
Knn 56
Kmeans 59
PCA 66
朴素贝叶斯 68
常见分类算法的优缺点 72
特征工程
1.什么是特征工程
有这么一句话在业界广泛流传,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。那特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。
特征工程主要分为三部分:
1.数据预处理 对应的sklearn包:sklearn-Processing data
2.特征选择 对应的sklearn包: sklearn-Feature selection
3.降维 对应的sklearn包: sklearn-Dimensionality reduction
本文中使用sklearn中的IRIS(鸢尾花)数据集来对特征处理功能进行说明,
2. 数据预处理
通过特征提取,我们能得到未经处理的特征,这时的特征可能有以下问题:
• 不属于同一量纲:即特征的规格不一样,不能够放在一起比较。无量纲化可以解决这一问题。
• 信息冗余:对于某些定量特征,其包含的有效信息为区间划分,例如学习成绩,假若只关心“及格”或不“及格”,那么需要将定量的考分,转换成“1”和“0”表示及格和未及格。二值化可以解决这一问题。
• 定性特征不能直接使用:通常使用哑编码的方式将定性特征转换为定量特征,假设有N种定性值,则将这一个特征扩展为N种特征,当原始特征值为第i种定性值时,第i个扩展特征赋值为1,其他扩展特征赋值为0。哑编码的方式相比直接指定的方式,不用增加调参的工作,对于线性模型来说,使用哑编码后的特征可达到非线性的效果。
• 存在缺失值:填充缺失值。
• 信息利用率低:不同的机器学习算法和模型对数据中信息的利用是不同的,之前提到在线性模型中,使用对定性特征哑编码可以达到非线性的效果。类似地,对定量变量多项式化,或者进行其他的数据变换,都能达到非线性的效果。
我们使用sklearn中的preproccessing库来进行数据预处理。
2.1 无量纲化
无量纲化使不同规格的数据转换到同一规格
2.1.1 标准化(也叫Z-score standardization)(对列向量处理)
将服从正态分布的特征值转换成标准正态分布,标准化需要计算特征的均值和标准差,公式表达为:
2.1.2 区间缩放(对列向量处理)
区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放,公式表达为:
使用preproccessing库的MinMaxScaler类对数据进行区间缩放的代码如下:
在什么时候使用标准化比较好,什么时候区间缩放比较好呢?
使用preproccessing库的Normalizer类对数据进行归一化的代码如下:
2.2 对定量特征二值化(对列向量处理)
定性与定量区别
定性:博主很胖,博主很瘦
定量:博主有80kg,博主有60kg
一般定性都会有相关的描述词,定量的描述都是可以用数字来量化处理
定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0,公式表达如下:
2.3 对定性特征哑编码(对列向量处理)
因为有些特征是用文字分类表达的,或者说将这些类转化为数字,但是数字与数字之间是没有大小关系的,纯粹的分类标记,这时候就需要用哑编码对其进行编码。IRIS数据集的特征皆为定量特征,使用其目标值进行哑编码(实际上是不需要的)。
2.4 缺失值计算(对列向量处理)
由于IRIS数据集没有缺失值,故对数据集新增一个样本,4个特征均赋值为NaN,表示数据缺失。
2.5 数据变换
2.5.1 多项式变换(对行向量处理)
常见的数据变换有基于多项式的、基于指数函数的、基于对数函数的。4个特征,度为2的多项式转换公式如下:
1
2.5.1 自定义变换
基于单变元函数的数据变换可以使用一个统一的方式完成,
总结
协方差是度量各个维度偏离其均值的程度,协方差的值为正值时说明两者是正相关,否则是负相关的。结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关,绝对值表示相关性的强度。
标准差也称均方差,是方差的算术平方根,能反映一个数据集的离散程度。
3.2 Wrapper
3.2.1 递归特征消除法
递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
3.3 Embedded
3.3.1 基于惩罚项的特征选择法
使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。
3.3.2 基于树模型的特征选择法
树模型中GBDT可用来作为基模型进行特征选择,
总结
其他特征选择的方法
5.去掉取值变化小的特征(Removing features with low variance)
该方法一般用在特征选择前作为一个预处理的工作,即先去掉取值变化小的特征,然后再使用其他特征选择方法选择特征。
考察某个特征下,样本的方差值,可以认为给定一个阈值,抛弃哪些小于某个阈值的特征。
1.实现原理
• 离散型变量:假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。
• 连续型变量:需要将连续变量离散化之后才能用。
而且实际当中,一般不太会有95%以上都取某个值的特征存在,所以这种方法虽然简单但是不太好用。可以把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的的特征选择方法中选择合适的进行进一步的特征选择。
6.随机森林选择
随机森林具有准确率高、鲁棒性好、易于使用等优点,这使得它成为了目前最流行的机器学习算法之一。随机森林提供了两种特征选择的方法:mean decrease impurity和mean decrease accuracy。
6.1.平均不纯度减少(mean decrease impurity)
1)原理介绍
• 随机森林由多颗CART决策树构成,决策树中的每一个节点都是关于某个特征的条件,为的是将数据集按照不同的响应变量一分为二。
• CART利用不纯度可以确定节点(最优条件),对于分类问题,通常采用基尼不纯度,对于回归问题,通常采用的是方差或者最小二乘拟合。
• 当训练决策树的时候,可以计算出每个特征减少了多少树的不纯度。对于一个决策树森林来说,可以算出每个特征平均减少了多少不纯度,并把它平均减少的不纯度作为特征选择的标准。
• 随机森林基于不纯度的排序结果非常鲜明,在得分最高的几个特征之后的特征,得分急剧的下降。
6.2.平均精确度减少(mean decrease accuracy)
1)原理介绍
缺失值处理
数据值缺失是数据分析中经常遇到的问题之一。当缺失比例很小时,可直接对缺失记录进行舍弃或进行手工处理。但在实际数据中,往往缺失数据占有相当的比重。这时如果手工处理非常低效,如果舍弃缺失记录,则会丢失大量信息,使不完全观测数据与完全观测数据间产生系统差异,对这样的数据进行分析,很可能会得出错误的结论。
造成数据缺失的原因
8.给你一个数据集,这个数据集有缺失值,且这些缺失值分布在离中值有1个标准偏差的范围内。百分之多少的数据不会受到影响?为什么?
这个问题给了我们足够的提示来开始思考!由于数据分布在中位数附近,让我们先假设这是一个正态分布。
我们知道,在一个正态分布中,约有68%的数据位于跟平均数(或众数、中位数)1个标准差范围内的,那样剩下的约32%的数据是不受影响的。
因此,约有32%的数据将不受到缺失值的影响。
9.给你一个缺失值多于30%的数据集?比方说,在50个变量中,有8个变量的缺失值都多于30%。你对此如何处理
• 1.把缺失值分成单独的一类,这些缺失值说不定会包含一些趋势信息。
• 2.我们可以毫无顾忌地删除它们。
• 3.或者,我们可以用目标变量来检查它们的分布,如果发现任何模式,我们将保留那些缺失值并给它们一个新的分类,同时删除其他缺失值。
1、L1与L2正则化
他们都是可以防止过拟合,降低模型复杂度。
L1会趋向于产生少量的特征,而其他的特征都是0;L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时非常有用,L2就只是一种规则化而已。
简单总结一下就是:
L1范数: 为x向量各个元素绝对值之和。
L2范数: 为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数 。
Lp范数: 为x向量各个元素绝对值p次方和的1/p次方。
在支持向量机学习过程中,L1范数实际是一种对于成本函数求解最优的过程,因此,L1范数正则化通过向成本函数中添加L1范数,使得学习得到的结果满足稀疏化,从而方便人类提取特征,即L1范数可以使权值稀疏,方便特征提取。
L2范数可以防止过拟合,提升模型的泛化能力。
L1和L2的差别,为什么一个让绝对值最小,一个让平方最小,会有那么大的差别呢?看导数一个是1一个是w便知, 在靠进零附近, L1以匀速下降到零, 而L2则完全停下来了. 这说明L1是将不重要的特征(或者说, 重要性不在一个数量级上)尽快剔除, L2则是把特征贡献尽量压缩最小但不至于为零. 两者一起作用, 就是把重要性在一个数量级(重要性最高的)的那些特征一起平等共事(简言之, 不养闲人也不要超人)。
2、归一化
能不归一化最好不归一化,之所以进行数据归一化是因为各维度的量纲不相同。而且需要看情况进行归一化。
归一化就是要把你需要处理的数据经过处理后限制在你需要的一定范围内。
连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。
二、离散化原因
数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。
连续特征离散化的本质是:决定选择多少个分割点和确定分割点的位置。
分段的原则有基于等距离、等频率或优化的方法。
数据离散化的原因主要有以下几点:
1、算法需要
比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。
2、离散化的特征相对于连续型特征更易理解,更接近知识层面的表达
比如工资收入,月薪2000和月薪20000,从连续型特征来看高低薪的差异还要通过数值层面才能理解,但将其转换为离散型数据(底薪、高薪),则可以更加直观的表达出了我们心中所想的高薪和底薪。
3、可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定
三、离散化的优势
离散特征的增加和减少都很容易,易于模型的快速迭代;
稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
离散化后的特征对异常数据有很强的鲁棒性(稳定性):比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
四、离散化的方法
1、无监督学习方法
等宽法
等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如属性值在[0,60]之间,最小值为0,最大值为60,我们要将其分为3等分,则区间被划分为[0,20] 、[21,40] 、[41,60],每个属性值对应属于它的那个区间
等频法
等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如有60个样本,我们要将其分为k=3部分,则每部分的长度为20个样本。
基于聚类的方法
基于聚类的方法分为两个步骤,即:
选定聚类算法将其进行聚类,将在同一个簇内的属性值做为统一标记。
注:基于聚类的方法,簇的个数要根据聚类算法的实际情况来决定,比如对于k-means算法,簇的个数可以自己决定,但对于DBSCAN,则是算法找寻簇的个数。
2、有监督学习方法:
1R方法
基于信息熵的方法
基于卡方的方法
五、离散化处理的一般过程
对连续特征值按照某种指定的规则进行排序
初步确定连续属性的划分断点
按照某种给定的判断标准继续分割断点或合并断点
如果第三步得到判断标准的终止条件,则终止整个连续特征离散化的过程,否则继续按第三步执行
六、离散化方法的评价
区间的个数:是对模型简洁性的要求
离散化所导致的不一致性:离散化后的不一致性不能比离散化之前高。
预测准确性:通常通过交叉检验模式建立分叉树来衡量。
具有最简单的离散化结果
七、 总结
李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
21、特征交叉
1.为什么需要特征组合、特征交叉?
特征交叉是数据特征的一种处理方式,通过特征组合的方式增加特征的维度,以求得更好的训练效果。
在实际场景中,我们常常遇到这要的情况,线性分类起无法在如下样本中(无法画一条直线将下列黄点和蓝点分开),所以特征组合是一种让线性模型学习到非线性特征的方式:
例如在广告模型中用到了大量的特征组合,因为LR是广告推广中最常用的模型,但LR本身不够复杂,为了使得LR学到更复杂的非线性特征,常常使用原始特征加上特征组合的方式。
2.如何做特征组合?
特征组合的思想很简单,通过将单独的特征进行组合(相乘或求笛卡尔积)而形成的合成特征。
比如属性A有三个特征,属性B有两个特征,笛卡尔积后就有六个组合特征,然后用one hot 或其他embedding方式给新的特征编码。
3.暴力做交叉可能产生稀疏问题。
这种暴力做交叉很可能导致特征稀疏的问题,这里可以参考FM、FMM以及阿里妈妈发布的MLR的做法和解决思路
22、样本类别不均衡
定义:所谓的不平衡指的是不同类别的样本量异非常大。样本类别分布不平衡主要出现在分类相关的建模问题上。样本类别分布不均衡从数据规模上可以分为大数据分布不均衡和小数据分布不均衡两种。
如何解决:
1 通过过抽样和欠抽样解决样本不均衡
抽样是解决样本分布不均衡相对简单且常用的方法,包括过抽样和欠抽样两种。
过抽样
过抽样(也叫上采样、over-sampling)方法通过增加分类中少数类样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这种方法的缺点是如果样本特征少而可能导致过拟合的问题;经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本,例如SMOTE算法。
欠抽样
欠抽样(也叫下采样、under-sampling)方法通过减少分类中多数类样本的样本数量来实现样本均衡,最直接的方法是随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类样本中的一些重要信息。
总体上,过抽样和欠抽样更适合大数据分布不均衡的情况,尤其是第一种(过抽样)方法应用更加广泛。
2 通过正负样本的惩罚权重解决样本不均衡
通过正负样本的惩罚权重解决样本不均衡的问题的思想是在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重(一般思路分类中的小样本量类别权重高,大样本量类别权重低),然后进行计算和建模。
使用这种方法时需要对样本本身做额外处理,只需在算法模型的参数中进行相应设置即可。很多模型和算法中都有基于类别参数的调整设置,以scikit-learn中的SVM为例,通过在class_weight: {dict, ‘balanced’}中针对不同类别针对不同的权重,来手动指定不同类别的权重。如果使用其默认的方法balanced,那么SVM会将权重设置为与不同类别样本数量呈反比的权重来做自动均衡处理,计算公式为:n_samples / (n_classes * np.bincount(y))。
如果算法本身支持,这种思路是更加简单且高效的方法。
3 通过组合/集成方法解决样本不均衡
组合/集成方法指的是在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果。
例如,在数据集中的正、负例的样本分别为100和10000条,比例为1:100。此时可以将负例样本(类别中的大量样本集)随机分为100份(当然也可以分更多),每份100条数据;然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的数据集。如此反复可以得到100个训练集和对应的训练模型。
这种解决问题的思路类似于随机森林。在随机森林中,虽然每个小决策树的分类能力很弱,但是通过大量的“小树”组合形成的“森林”具有良好的模型预测能力。
如果计算资源充足,并且对于模型的时效性要求不高的话,这种方法比较合适。
4通过特征选择解决样本不均衡
上述几种方法都是基于数据行的操作,通过多种途径来使得不同类别的样本数据行记录均衡。除此以外,还可以考虑使用或辅助于基于列的特征选择方法。
一般情况下,样本不均衡也会导致特征分布不均衡,但如果小类别样本量具有一定的规模,那么意味着其特征值的分布较为均匀,可通过选择具有显著型的特征配合参与解决样本不均衡问题,也能在一定程度上提高模型效果。
23、如何进行特征选择
特征选择是一个重要的数据预处理过程,
主要有两个原因:
• 一是减少特征数量、降维,使模型泛化能力更强,减少过拟合;
• 二是增强对特征和特征值之间的理解
常见的特征选择方式:
1.1 分类准确度够用么?
分类准确度在评价分类算法时,会有很大的问题的。分类算法的评价要比回归算法多很多。
对于一个癌症预测系统,输入检查指标,判断是否患有癌症,预测准确度99.9%。这个系统是好是坏呢?
如果癌症产生的概率是0.1%,那其实根本不需要任何机器学习算法,只要系统预测所有人都是健康的,即可达到99.9%的准确率。也就是说对于极度偏斜(Skewed Data)的数据,只使用分类准确度是不能衡量。
这时就需要使用混淆矩阵(Confusion Matrix)做进一步分析。
1.2 混淆矩阵
对于二分类问题来说,所有的问题被分为0和1两类,混淆矩阵是2*2的矩阵:
• TN:真实值是0,预测值也是0,即我们预测是negative,预测正确了。
• FP:真实值是0,预测值是1,即我们预测是positive,但是预测错误了。
• FN:真实值是1,预测值是0,即我们预测是negative,但预测错误了。
• TP:真实值是1,预测值是1,即我们预测是positive,预测正确了。
现在假设有1万人进行预测,填入混淆矩阵如下:
对于1万个人中,有9978个人本身并没有癌症,我们的算法也判断他没有癌症;有12个人本身没有癌症,但是我们的算法却错误地预测他有癌症;有2个人确实有癌症,但我们算法预测他没有癌症;有8个人确实有癌症,而且我们也预测对了。
因为混淆矩阵表达的信息比简单的分类准确度更全面,因此可以通过混淆矩阵得到一些有效的指标。
2.1精准率和召回率
根据混淆矩阵可以求得指标:
精准率:
即精准率为8/(8+12)=40%。所谓的精准率是:分母为所有预测为1的个数,分子是其中预测对了的个数,即预测值为1,且预测对了的比例。
为什么管它叫精准率呢?在有偏的数据中,我们通常更关注值为1的特征,比如“患病”,比如“有风险”。在100次结果为患病的预测,平均有40次预测是对的。即精准率为我们关注的那个事件,预测的有多准。
召回率:
即召回率为8/(8+2)=80%。所谓召回率是:所有真实值为1的数据中,预测对了的个数。每当有100个癌症患者,算法可以成功的预测出8个 。也就是我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
那么为什么需要精准率和召回率呢?还是下面的这个例子,有10000个人,混淆矩阵如下:
如果我们粗暴的认为所有人都是健康的,那算法的准确率是99.78%,但这是毫无意义的。如果算精准率则是40%,召回率是80%。
2.2更关注哪个?
精准率(查准率):预测值为1,且预测对了的比例,即:我们关注的那个事件,预测的有多准。
召回率(查全率):所有真实值为1的数据中,预测对了的个数,即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
有的时候,对于一个算法而言,精准率高一些,召回率低一些;或者召回率高一些,精准率低一些。那么如何取舍呢?
其实在衡量机器学习的其他指标中,我们也需要进行取舍,通常只需要把握一个原则:
视场景而定。
比如我们做了一个股票预测系统,未来股票是
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。