机器学习系列(6)_从白富美相亲看特征预处理与选择(下)
作者:龙心尘 &&寒小阳
时间:2016年1月。
出处:
http://blog.csdn.net/longxinchen_ml/article/details/50493845,
http://blog.csdn.net/han_xiaoyang/article/details/50503115
声明:版权所有,转载请联系作者并注明出处
1. 剧情一:挑螃蟹的秘密
李雷与韩梅梅的关系发展得不错,趁国庆休假一起来天津玩。今天,李雷十分神秘地请韩梅梅去一家餐馆吃螃蟹。韩梅梅大失所望,这个餐馆很不起眼,感觉就像路边的老食堂。菜单都用粉笔写在黑板上,一点都不高档。一看价格,满黄螃蟹120块钱一只!这也太贵了。
李雷看到了韩梅梅的神情,笑着解释道:“这家店老板有一个绝活——会看螃蟹。他能保证120块的螃蟹就是满黄。如果拆开来不是,这个螃蟹就不要钱,再换一个。靠着老板的绝活,这家店已经是几十年的老店了,在当地非常有名气。郭德纲、赵丽蓉这些天津社会名流都来这家店吃过螃蟹。”
韩梅梅将信将疑。拆开螃蟹,饱满的蟹黄喷薄欲出。韩梅梅边吃边惊叹:“从没有吃个这么好吃的螃蟹!”
李雷接着说:“老板的绝活密不外传,几十年来都自己上货。虽说是一个大老板,一年到头满身海鲜味。而且他也不开分店。”
韩梅梅说:“那是,这么高明的绝活只有他自己知道才能挣钱啊。”这时,韩梅梅拂面而笑,突然想考一考自己的相亲对象,说:“李大码农,你不是做机器学习的吗?如果要你去用机器学习挑满黄的螃蟹,你怎么做?”
2. 初步划定特征的范围,获取特征
李雷早就想过这个问题了。长期的职业素养让他对任何事情都想用机器学习的方法去鼓捣。李雷的基本思路是这样的,我们尽可能观察螃蟹更多的特征,从中找出与“螃蟹满黄”最相关的特征来,帮助我们去判断。当然特征有非常多,我们可以先头脑风暴一下:
- 一些直观的特征:包括蟹壳的颜色和光泽度、钳子的大小、肚脐的形状、螃蟹腿的粗细和长度、眼睛的大小和颜色光泽、螃蟹的品种、重量、体积、腰围等等……
- 一些需要在互动过程中观察到的特征:螃蟹钳子的力量,对外界刺激的反应,用筷子触碰螃蟹眼睛后的反应,螃蟹行动的速度……
- 还有一些外部环境的特征: 收获螃蟹的季节,培养螃蟹的水域……
韩梅梅插话到:“这么多特征我头都大了,你还有完没完?”
其实,如果真要穷举出所有的特征可能永远也举不完。但是我们目的很明确——判断螃蟹是否是满黄。所以我们只关心跟这个问题(“标签”)相关的特征,它们只占所有特征中很小一部分。怕就怕一些糊涂的需求方连目的都不明确就要求一通乱搞,即便出来了一堆结果,也不知道有什么用。
头脑风暴完之后,很重要的一点就是找到对这个问题有长期经验的人,虚心向他们学习。人脑其实是一个很好的特征筛选器,这些经验可以给我们非常多的指导和启发,极大地减少我们试错的工作量。比如我们可以直接去找海鲜市场问螃蟹贩子,去田间地头找螃蟹养殖户,去海鲜饭店去问有经验的采购员和厨师……他们的最一线的经验是特征工程中的宝贵财富。
但这里需要考虑将经验转换成可量化的指标,才能便于机器学习。比如人们可能会说螃蟹很“活跃”、很“精神”,或者很“慵懒”。这些特征需要转换成一些可量化指标去衡量,具体怎么转换也有很大学问。
接下来要考虑的问题是对这些特征的可用性进行简单的评估。比如:
- 特征获取、描述难度
- 数据的规模
- 特征的准确率
- 特征的覆盖率
- 其他
我们通过明确目标,头脑风暴,咨询专家,特征量化,可用性评估等流程,就基本划定了特征范围。
3. 剧情二:“特征预处理”的门道
李雷说完,便拿出自己的平板,给韩梅梅看自己某个项目中搜集的初始特征。这些特征被放在一张巨大的表里。
韩梅梅看着这些密密麻麻的数字,心想:看李雷说得头头是道,但还是没告诉我怎么挑,不能让他轻易绕过去。
于是她说:“我看你这些特征数据有大有小,有些就是几万上下浮动,有些仅仅是小数点后好几位的微小变化,有些就是在0或1这两种可能中变化,有些连值都没有。你这些数据能用吗?”
李雷说:“不能,要转换成标准件。”
韩梅梅:“标准件?”
4. “特征标准件”
如果把机器学习过程当做一个加工厂的话,那输入的数据(特征、标签)就是原材料,输出的模型和判断结果就是产品。并不是胡乱扔进去任何原材料都能加工出合格产品的。原材料需要一个“预处理”过程才能方便地被算法处理。这些预处理后的数据,李雷起了个不够规范的名字,叫做“特征标准件”。
以二分类问题为例,不同的算法对“特征标准件”的要求是不同的。比如逻辑回归和神经网络,比较喜欢归一化之后在[-1,1]区间内浮动的特征。而贝叶斯方法,喜欢因子化之后的{0,1}分布的二元特征,每个特征只有“是”和“不是”两种可能的状态。
5. 连续特征与非连续特征
特征可以分为两类:“连续特征”和“非连续特征”。
“身高”、“体重”、“成绩”、“腰围”、“长度”、“宽度”、“体积”、“速度”等等,都是连续特征。连续特征能够比较方便地进行归一化。归一化的统一公式如下:
x∗=x−μS
μ 为所有样本数据的均值, x−μ 的步骤叫做去均值化
- 当 S=xmax−xmin 时,经过处理的数据在区间[-1,1]之间。
- 当 S=σ(所有样本的标准差) 时,经过处理的数据符合标准正态分布,即均值为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
也可以用计算条件熵的方法去衡量两类离散特征的差异性,方便去除共线性关系的特征。
连续特征也有着共线性的情况,比如同一个品种的螃蟹腿的“长度”和“粗细”是共线性关系。也就是说,如果我们知道螃蟹腿的长度是 x 厘米,那么螃蟹腿的直径就是
可以计算两个变量
rxy=cov(x,y)σxσy=cov(x,y)cov(x,x)×cov(y,y)√
rxy 的取值范围是[-1,1],如果是0则统计独立,如果接近1则强相关。
可以计算这些数据的协方差矩阵,进而求出相关系数矩阵。就可以比较任意两个特征了。
既然协方差矩阵都求了,那就干脆用主成分分析(PCA)吧,这样更省事。得到主成分,线性相关的那些量就直接被舍弃了。我们在前文《深度学习与计算机视觉系列(7)_神经网络数据预处理,正则化与损失函数》 对PCA有相关论述。
感兴趣的同学可以试试把上述离散二元特征当做连续变量使用,构造几个数据,计算其相关系数并进行主成分分析。发现其相关系数就是-1,主成分分析后自动就变成一个主成分了。可见PCA对于连续特征与非连续特征都是去除共线性的通用方法。
8. 缺失值的处理
这个问题现在才讲,但实际过程中应该在前期去处理。掌握以下三点就够了:
- 如果某个特征的缺失值比较多:可能就直接舍弃。
- 如果缺失值不是很多,而且是连续特征:可以考虑用回归方法去拟合,或者直接用众数、中位数、平均数等具体的值去替代即可。
- 如果缺失值不是很多,而且是非连续特征:可以尝试把缺失值当做一个新的类目去处理,可能也揭示了一定的客观现实。
9. 离群点的分析
对于连续特征,最好看看其在样本中的分布。如果某些值偏离了主要聚集区域,可能需要单独抽出来分析,里面可能包含了更多的信息,可以这样画图方便观察:
10. 特征预处理小结
特征的预处理步骤比较多,相互之间的关系比较复杂。我们画了一张图以揭示它们之间的关系:
11. 剧情三:李雷另辟蹊径挑螃蟹
韩梅梅长叹一口气:“终于听你叨逼叨逼说完了。”
李雷说:“没办法啊,这块工作其实挺多的。我还要好多没说完……” “你打住”,韩梅梅赶紧说,“我算服了你了。但是李大码农,你还没有跟我说你怎么靠这些特征挑螃蟹呢。”
李雷说:“不急,用逻辑回归……”韩梅梅说:“不要用逻辑回归,我已经从赵媒婆那知道了。你换个方法,用非连续特征来做。”韩梅梅存心想刁难她的相亲对象。
李雷说:“那可以用贝叶斯。”
12. 用贝叶斯方法挑螃蟹
我们的标签用 Y=“是满黄” 来表示,相应的 Y⎯
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
