首页 > 代码库 > 机器学习系列(6)_从白富美相亲看特征预处理与选择(下)
机器学习系列(6)_从白富美相亲看特征预处理与选择(下)
作者:
viewmode=contents">龙心尘 &&寒小阳
时间:2016年1月。
出处:
http://blog.csdn.net/longxinchen_ml/article/details/50493845。
http://blog.csdn.net/han_xiaoyang/article/details/50503115
声明:版权全部,转载请联系作者并注明出处
1. 剧情一:挑螃蟹的秘密
李雷与韩梅梅的关系发展得不错。趁国庆休假一起来天津玩。
今天,李雷十分神奇地请韩梅梅去一家餐馆吃螃蟹。
韩梅梅大失所望,这个餐馆非常不起眼,感觉就像路边的老食堂。
菜单都用粉笔写在黑板上,一点都不高档。一看价格。满黄螃蟹120块钱一仅仅!这也太贵了。
李雷看到了韩梅梅的神情。笑着解释道:“这家店老板有一个绝活——会看螃蟹。
他能保证120块的螃蟹就是满黄。
假设拆开来不是,这个螃蟹就不要钱,再换一个。靠着老板的绝活,这家店已经是几十年的老店了,在当地非常有名气。郭德纲、赵丽蓉这些天津社会名流都来这家店吃过螃蟹。”
韩梅梅将信将疑。拆开螃蟹。饱满的蟹黄喷薄欲出。韩梅梅边吃边惊叹:“从没有吃个这么好吃的螃蟹!
”
李雷接着说:“老板的绝活密不外传。几十年来都自己上货。虽说是一个大老板,一年到头满身海鲜味。并且他也不开分店。
”
韩梅梅说:“那是。这么高明的绝活仅仅有他自己知道才干挣钱啊。
”这时,韩梅梅拂面而笑。突然想考一考自己的相亲对象,说:“李大码农,你不是做机器学习的吗?假设要你去用机器学习挑满黄的螃蟹,你怎么做?”
2. 初步划定特征的范围,获取特征
李雷早就想过这个问题了。长期的职业素质让他对不论什么事情都想用机器学习的方法去鼓捣。李雷的基本思路是这种。我们尽可能观察螃蟹很多其它的特征,从中找出与“螃蟹满黄”最相关的特征来。帮助我们去推断。当然特征有非常多,我们能够先头脑风暴一下:
- 一些直观的特征:包括蟹壳的颜色和光泽度、钳子的大小、肚脐的形状、螃蟹腿的粗细和长度、眼睛的大小和颜色光泽、螃蟹的品种、重量、体积、腰围等等……
- 一些须要在互动过程中观察到的特征:螃蟹钳子的力量,对外界刺激的反应。用筷子触碰螃蟹眼睛后的反应。螃蟹行动的速度……
- 另一些外部环境的特征: 收获螃蟹的季节。培养螃蟹的水域……
韩梅梅插话到:“这么多特征我头都大了,你还有完没完?
”
事实上,假设真要穷举出全部的特征可能永远也举不完。可是我们目的非常明白——推断螃蟹是否是满黄。所以我们仅仅关心跟这个问题(“标签”)相关的特征,它们仅仅占全部特征中非常小一部分。怕就怕一些糊涂的需求方连目的都不明白就要求一通乱搞,即便出来了一堆结果,也不知道有什么用。
头脑风暴完之后,非常重要的一点就是找到对这个问题有长期经验的人,虚心向他们学习。人脑事实上是一个非常好的特征筛选器,这些经验能够给我们非常多的指导和启示。极大地降低我们试错的工作量。比方我们能够直接去找海鲜市场问螃蟹贩子。去田间地头找螃蟹养殖户。去海鲜饭店去问有经验的採购员和厨师……他们的最一线的经验是特征project中的宝贵財富。
但这里须要考虑将经验转换成可量化的指标。才干便于机器学习。比方人们可能会说螃蟹非常“活跃”、非常“精神”,或者非常“慵懒”。
这些特征须要转换成一些可量化指标去衡量。详细怎么转换也有非常大学问。
接下来要考虑的问题是对这些特征的可用性进行简单的评估。
比方:
- 特征获取、描写叙述难度
- 数据的规模
- 特征的准确率
- 特征的覆盖率
- 其它
我们通过明白目标,头脑风暴,咨询专家,特征量化。可用性评估等流程,就基本划定了特征范围。
3. 剧情二:“特征预处理”的门道
李雷说完,便拿出自己的平板。给韩梅梅看自己某个项目中搜集的初始特征。这些特征被放在一张巨大的表里。
韩梅梅看着这些密密麻麻的数字,心想:看李雷说得头头是道。但还是没告诉我怎么挑,不能让他轻易绕过去。
于是她说:“我看你这些特征数据有大有小,有些就是几万上下浮动,有些仅仅是小数点后好几位的微小变化,有些就是在0或1这两种可能中变化,有些连值都没有。你这些数据能用吗?”
李雷说:“不能,要转换成标准件。”
韩梅梅:“标准件?”
4. “特征标准件”
假设把机器学习过程当做一个加工厂的话。那输入的数据(特征、标签)就是原材料,输出的模型和推断结果就是产品。并非胡乱扔进去不论什么原材料都能加工出合格产品的。原材料须要一个“预处理”过程才干方便地被算法处理。这些预处理后的数据,李雷起了个不够规范的名字,叫做“特征标准件”。
以二分类问题为例,不同的算法对“特征标准件”的要求是不同的。
比方逻辑回归和神经网络。比較喜欢归一化之后在[-1,1]区间内浮动的特征。而贝叶斯方法,喜欢因子化之后的{0,1}分布的二元特征,每一个特征仅仅有“是”和“不是”两种可能的状态。
5. 连续特征与非连续特征
特征能够分为两类:“连续特征”和“非连续特征”。
“身高”、“体重”、“成绩”、“腰围”、“长度”、“宽度”、“体积”、“速度”等等。都是连续特征。
连续特征能够比較方便地进行归一化。归一化的统一公式例如以下:
x?=x?μS <script type="math/tex" id="MathJax-Element-1">x^* = \frac{x-\mu}{S}</script>
μ <script type="math/tex" id="MathJax-Element-2">\mu</script>为全部样本数据的均值,x?μ <script type="math/tex" id="MathJax-Element-3">x-\mu</script>的步骤叫做去均值化
- 当
S=xmax?xmin <script type="math/tex" id="MathJax-Element-4">S = x_{max}-x_{min} </script>时。经过处理的数据在区间[-1,1]之间。 - 当
S=σ(所有样本的标准差) <script type="math/tex" id="MathJax-Element-5">S = \sigma(全部样本的标准差)</script>时,经过处理的数据符合标准正态分布。即均值为0,标准差为1
另一方面:“是否高富帅”、“是否白富美”、“螃蟹的品种”、“螃蟹所在的水域”、“收获螃蟹的季节”等等。都是非连续特征。
非连续特征能够比較方便地进行因子化。或者它本身就是二元特征。
方法例如以下:
特征“收获螃蟹的季节”:{春。夏。秋,冬} 因子化后的结果为:
- 特征“是否春”:{是,否}
- 特征“是否夏”:{是。否}
- 特征“是否秋”:{是,否}
- 特征“是否冬”:{是,否}
6. 两类特征的相互转化
连续特征能够当非连续特征来用。非连续特征能够当连续特征来用。
连续特征能够离散化非连续特征。比方“年龄”作为一个连续特征,假设它的取值范围是[0,100]。我们能够中间切一刀,比方选择60(岁)。大于等于60岁的就叫做“老年”,小于60岁的就是“非老年”。这样就转化成了一个二元特征了。
怎么选择离散的分离边界也非常有学问。
假设我们中间切两刀甚至很多其它刀,比方18(岁)和60(岁)。
大于等于60岁的就叫做“老年”。18岁到60岁之间的就叫做“中青年”,小于18岁就叫做“未成年”。然后再把这3类因子化成3个二分类就够了:“是否老年”、“是否中青年”和“是否未成年”。
非连续特征因子化成二元特征{0,1}后能够直接当做[0,1]之间的连续特征来用。
我们之前文章《机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾》就是这么使用的。
7. 去除特征之间的共线性
我们在对离散特征因子化过程中细分到二元特征为止就可以。那对于二元特征本身是否能因子化成两个特征?比方下面样例:
特征“螃蟹的性别”:{公。母} 。可否转换为:
- 特征“是否公螃蟹”:{是,否}
- 特征“是否母螃蟹”:{是,否}
这是不行的。由于这两个特征的信息全然一样。也叫做共线性。
计算这两个特征之间的条件熵:
H(“是否公螃蟹”|“是否母螃蟹”)=0 <script type="math/tex" id="MathJax-Element-6">H(“是否公螃蟹”|“是否母螃蟹”)=0</script>
也能够用计算条件熵的方法去衡量两类离散特征的差异性。方便去除共线性关系的特征。
连续特征也有着共线性的情况,比方同一个品种的螃蟹腿的“长度”和“粗细”是共线性关系。也就是说,假设我们知道螃蟹腿的长度是
因此我们仅仅须要螃蟹腿的“长度”这一个特征就够了。那么连续特征的共线性怎样去除?
能够计算两个变量
rxy=cov(x,y)σxσy=cov(x,y)cov(x,x)×cov(y,y)√ <script type="math/tex" id="MathJax-Element-11">r_{xy}=\frac{cov(x,y)}{\sigma_x \sigma_y}=\frac{cov(x,y)}{\sqrt{cov(x,x)×cov(y,y)}}</script>
rxy <script type="math/tex" id="MathJax-Element-12">r_{xy}</script>的取值范围是[-1,1]。假设是0则统计独立,假设接近1则强相关。
能够计算这些数据的协方差矩阵,进而求出相关系数矩阵。就能够比較随意两个特征了。
既然协方差矩阵都求了,那就干脆用主成分分析(PCA)吧,这样更省事。得到主成分,线性相关的那些量就直接被舍弃了。
我们在前文《深度学习与计算机视觉系列(7)_神经网络数据预处理。正则化与损失函数》 对PCA有相关论述。
感兴趣的同学能够试试把上述离散二元特征当做连续变量使用,构造几个数据,计算其相关系数并进行主成分分析。
发现其相关系数就是-1,主成分分析后自己主动就变成一个主成分了。可见PCA对于连续特征与非连续特征都是去除共线性的通用方法。
8. 缺失值的处理
这个问题如今才讲,但实际过程中应该在前期去处理。
掌握下面三点就够了:
- 假设某个特征的缺失值比較多:可能就直接舍弃。
- 假设缺失值不是非常多,并且是连续特征:能够考虑用回归方法去拟合,或者直接用众数、中位数、平均数等详细的值去替代就可以。
- 假设缺失值不是非常多。并且是非连续特征:能够尝试把缺失值当做一个新的类目去处理。可能也揭示了一定的客观现实。
9. 离群点的分析
对于连续特征。最好看看其在样本中的分布。假设某些值偏离了主要聚集区域,可能须要单独抽出来分析,里面可能包括了很多其它的信息,能够这样绘图方便观察:
10. 特征预处理小结
特征的预处理步骤比較多。相互之间的关系比較复杂。我们画了一张图以揭示它们之间的关系:
11. 剧情三:李雷另辟蹊径挑螃蟹
韩梅梅长叹一口气:“最终听你叨逼叨逼说完了。
”
李雷说:“没办法啊,这块工作事实上挺多的。我还要好多没说完……” “你打住”,韩梅梅赶紧说。“我算服了你了。
可是李大码农,你还没有跟我说你怎么靠这些特征挑螃蟹呢。
”
李雷说:“不急。用逻辑回归……”韩梅梅说:“不要用逻辑回归,我已经从赵媒婆那知道了。你换个方法,用非连续特征来做。”韩梅梅存心想刁难她的相亲对象。
李雷说:“那能够用贝叶斯。”
12. 用贝叶斯方法挑螃蟹
我们的标签用
P(Y|X1,X2,X3...)=P(X1,X2,X3...|Y)×P(Y)P(X1,X2,X3...) <script type="math/tex" id="MathJax-Element-16">P(Y|X_1,X_2,X_3...)=\frac{P(X_1,X_2,X_3...|Y)×P(Y)}{P(X_1,X_2,X_3...)}</script>
事实上。能够直接推断
先求出螃蟹“不是满黄”的概率:
P(Y???|X1,X2,X3...)=P(X1,X2,X3...|Y??)×P(Y??)P(X1,X2,X3...) <script type="math/tex" id="MathJax-Element-19">P(\overline{Y}|X_1,X_2,X_3...)=\frac{P(X_1,X_2,X_3...|\overline{Y})×P(\overline{Y})}{P(X_1,X_2,X_3...)}</script>
再两式相处。得到:
P(Y|X1,X2,X3...)P(Y??|X1,X2,X3...)=P(X1,X2,X3...|Y)×P(Y)P(X1,X2,X3...|Y??)×P(Y??) <script type="math/tex" id="MathJax-Element-20">\frac{P(Y|X_1,X_2,X_3...)}{P(\overline{Y}|X_1,X_2,X_3...)}=\frac{P(X_1,X_2,X_3...|Y)×P(Y)}{P(X_1,X_2,X_3...|\overline{Y})×P(\overline{Y})}</script>
这样就约去了P(X1,X2,X3…)。仅仅须要推断
logP(Y|X1,X2,X3...)P(Y??|X1,X2,X3...)=logP(X1,X2,X3...|Y)P(X1,X2,X3...|Y??)+logP(Y)P(Y??) <script type="math/tex" id="MathJax-Element-22">log{\frac{P(Y|X_1,X_2,X_3...)}{P(\overline{Y}|X_1,X_2,X_3...)}} = log{\frac{P(X_1,X_2,X_3...|Y)}{P(X_1,X_2,X_3...|\overline{Y})}+log{\frac{P(Y)}{P(\overline{Y})}}}</script>
左边是螃蟹“是满黄”的逻辑发生比,仅仅须要推断其是否大于0就可以。
到眼下为止,以上都是等价变换。
接下来我们引入贝叶斯方法中经常使用的条件独立假设:
P(X1,X2,X3...|Y)=P(X1|Y)×P(X2|Y)×P(X3|Y)... <script type="math/tex" id="MathJax-Element-23">P(X_1,X_2,X_3...|Y)=P(X_1|Y)×P(X_2|Y)×P(X_3|Y)...</script>
P(X1,X2,X3...|Y???)=P(X1|Y???)×P(X2|Y???)×P(X3|Y???)... <script type="math/tex" id="MathJax-Element-24">P(X_1,X_2,X_3...|\overline{Y})=P(X_1|\overline{Y})×P(X_2|\overline{Y})×P(X_3|\overline{Y})...</script>
将它们带入上式,就变成了:
logP(Y|X1,X2,X3...)P(Y??|X1,X2,X3...)=logP(X1|Y)P(X1|Y??)+logP(X2|Y)P(X2|Y??)+logP(X3|Y)P(X3|Y??)+...+logP(Y)P(Y??) <script type="math/tex" id="MathJax-Element-25">log{\frac{P(Y|X_1,X_2,X_3...)}{P(\overline{Y}|X_1,X_2,X_3...)}} = log{\frac{P(X_1|Y)}{P(X_1|\overline{Y})}}+log{\frac{P(X_2|Y)}{P(X_2|\overline{Y})}}+log{\frac{P(X_3|Y)}{P(X_3|\overline{Y})}} +...+ log{\frac{P(Y)}{P(\overline{Y})}}</script>
于是我们得到了一个简单的求和式,仅仅须要推断等式右边求和的结果是否大于0就可以。
而最关键的就是右边每一项都非常好求!假如训练集中全部的满黄螃蟹收集在一起,统计每一个特征出现的次数,除以满黄螃蟹的总数,就是其对应的条件(后验)概率了。再统计该特征在非满黄螃蟹集合中的条件(后验)概率,二者相除再取对数就可以。
13. 用贝叶斯方法进行特征有效性分析
等式右边作为一个求和式,当中每一个求和项
我们再分析一下各个求和项的结构,里面的概率部分是后验概率,是特征相对于标签的后验概率。
这个后验概率与我们上一篇文章《从白富美相亲看特征预处理与选择(上)》中的后验概率方向相反。不要搞混淆了。
14. 贝叶斯与逻辑回归之间的关系
我们继续看看这个求和项。是不是非常像逻辑回归中的求和项?我们假设拿二元特征当做连续变量採用逻辑回归方法。其判别式例如以下:
z=w1x1+w2x2+w3x3+...+b;其中xi∈{0,1} <script type="math/tex" id="MathJax-Element-27">z=w_1x_1+w_2x_2+w_3x_3+ ...+b; 当中x_i∈\{0,1\}</script>
二者的表达式惊人地类似。莫非
感兴趣的同学能够自己举个样例试一下。发现还是有差别的,二者求出来的权重不一样。产生这样差别的原因是什么呢?
想必大家都猜到了。就是贝叶斯方法引入的两个条件独立假设。正由于这两个条件独立假设,贝叶斯方法直接跳过了逻辑回归中重复迭代用梯度下降法才干求出的各个权重。
因此贝叶斯方法与逻辑回归的差别就是贝叶斯方法引入了一个更强的附加假设。并且能够直接通过统计结果求权重,而不必用梯度下降法。
所以有些情况下贝叶斯方法求出来的结果不好,就能够考虑考虑是不是条件独立假设的原因。
因此。能够说“在某种假定下,能够证明:与朴素贝叶斯分类方法一样,很多神经网络和曲线拟合算法输出最大的后验假定。”——韩家炜:《数据挖掘:概念与技术(第三版)》
15. 剧情四:李雷露馅儿了
韩梅梅听完。十分感慨地说:“难怪机器学习能挑出正确的结果,难怪赵媒婆用机器学习方法从这么多人中能把你挑出里来。你还是有两下子嘛。”
“废话。她是我干妈”。李雷志得意满,不小心说漏嘴。
韩梅梅:“什么?!”
李雷懊悔不已,尴尬地陪着笑脸说道:“梅梅,我错了,我不该瞒你这么久。
”到了这个地步,李雷仅仅能和盘托出了。
16. 数据VS算法
事实上李雷早就知道韩妈妈要挑选相亲名单。假设按她的标准。李雷根本没法进入名单中。
而李雷也猜想她会去找赵媒婆。他就早早地联系赵媒婆,跟她推销他的机器学习方法。赵媒婆最终被李雷忽悠动心了。李雷就帮她开发那个相亲算法。
但事实上赵媒婆的样本数量不够,特征数量却非常多。肯定会过拟合。李雷就跟她说他会多找一些相亲的数据。李雷能从哪里找啊,仅仅能发动周围的同学,让他们找他们观察到的情侣案例。
而在这些群体中,恰好中学、大学是同学的情侣比率非常高,并且非常多男方是码农。而李雷刚好符合这个条件,李雷的评分就非常高了。
由于样本选择本来就代表性不足,没能覆盖很多其它的青年群体。所以还是过拟合,仅仅是偏向了李雷这边的概率而已。
可见,做机器学习尽管看起来比較炫酷的是算法。但真正关键的是数据。
数据决定了你结果的上限。而算法仅仅是尽可能逼近这个上限。而这点李雷并没有告诉赵媒婆。
对样本情况的分析要在特征优化过程中尤其注意。整个流程图例如以下:
17. 特征选择的局限性
并且。李雷并不认为感情这样复杂的东西能够用赵媒婆那些量化的指标衡量好的。房子、车子、学历、文凭这些并不能衡量两个人之间的感情。一些非常重要的特征是难以量化的,比方两个人的“三观”、两个人对待感情的态度、两个人相互相处的独一无二的经历、两个人刻骨铭心的情感体验、那种两个人相信能够一辈子都在一起的笃定的感觉……这些至关重要的特征极其复杂,却非常难以量化。所以对于这类问题,机器学习的能力还是非常有限的。
18. 剧情五:尾声
韩梅梅听完李雷,既生气,又好笑,另一点点小感动:这小子为了感情还是蛮拼的。
一段沉默之后,韩梅梅笑着对李雷说:“好了好了。我不怪你了。”李雷长舒一口气。
韩梅梅继续说:“问个挑螃蟹的问题。你刚才选了这么多特征。为什么不考虑用B超直接照一下。看看里面什么东西不就成了吗?”
李雷一听。宛如当头一棒。整个脑子都被草泥马占满了:“我去,这么简单的方法我怎么想不到?。”
韩梅梅这时已经笑得肚子痛了。根本说不上话。
李雷吐槽到:“梅梅。你太厉害了。我认为机器永远也学不到的两样东西就是人类的情感和脑洞啊!
”
19. 后记
事实上博主也没有丧心病狂到抓仅仅螃蟹去照B超,仅仅是自己被这个想法逗乐了,大家开心就好哈。O(∩_∩)O~~
假设真要死磕,据说B超的穿透力比較弱。对骨骼、空气等非常难达到深部,因此难以成像。可是通过声波的回声来推断,也是一个思路。
就像有些人能够通过拍打西瓜听声音来推断它甜不甜的道理一样。
假设不用机械波而用电磁波,比方X射线,预计哪怕能看到螃蟹满黄顾客也不会吃了。
顾客也会操心放射残留的。CT应该好些,可是贵呀。一套设备下来,螃蟹预计也不止120块钱了吧。没玩过CT,不知道成本多少……总之还是要考虑获取特征的成本的。
机器学习系列(6)_从白富美相亲看特征预处理与选择(下)