0x00瞎扯淡
当当当,我又来啦。
哇咔咔,很多人都说我好久好久没写机器学习的东西啦。是不是忘啦?
没有没有,记着呢。
只是最近在看很多其他的东西,比如敲敲scikit-learn的文档啦,比如看看《Head First 数据分析》啦,比如看看《集体智慧编程》啦,看看gossip算法啦。
Head First 数据分析,这个,能不看就别看了,几乎没啥用。
《集体智慧编程》真心是给我开了一个脑洞,原来还可以用遗传算法自动生成程序,哎呀我天。
哎呀扯回正题,特征工程特征工程。
敲黑板敲黑板。今天讲特征提取的套路,啊。
🙈🙈🙈
快睁开眼睛。
🙉🙉🙉
好。
0x01简述
特征工程,顾名思义,就是批量生产特征的工程化,特征工程一般来说分为两部分,特征提取和特征选择。
好的特征是成功的一半嘛,这个步骤的结果直接决定了你最终模型训练的上限。
那么特征提取的套路呢,就分五步走,分别解决两个问题,提什么,以及怎么提。
◇ 拍一拍 ◇ 看一看 ◇ 抽一抽 ◇ 洗一洗 ◇ 改一改 ◇
0x02具体都是些啥
拍一拍
拍啥呢?
拍脑门啊。
管它啥玩意特征提取,先按照业务场景的实际需求先拍一些想去抓取的数据范围出来先。
看一看
那要看什么呢?
看的目的是对数据进行可用性评估。
评估数据获取的难度,数据的规模,数据的准确率,数据的覆盖率。
-
数据获取的难度?
比如你想知道整个城市垃圾场的数据,一桶一桶称?
啊,咋获取,你告诉我咋获取。
难度非常大,这些难度非常大的数据,如果我们觉得它们很重要,我们得换别的思路去代替。
-
数据的规模
数据的规模是十万,一百万还是几千亿?这个一定要摸清楚啊,跟后面处理的工具有很大关系。
-
数据的准确率
社交媒体上的年龄能信?
社交媒体上的性别能信?我看到真人我都无别甄别性别好吗?
-
数据的覆盖率
你所想要实现的业务需求的场景,数据能覆盖吗?会不会有些地方,根本就没有这个数据。或者数据只会存在在某些特定的用户,而其他用户根本就不会有这些数据的?
比如某个农村小白比如小蕉的资产信息,哪来哪来?
“EI,我跟你说,不存在的。”
🙅
“那你很棒棒喔。”
👏
抽一抽
啊,这个有技术含量了。
抽完放哪?抽哪些子集?
放哪?
喏,放那里。☝️
离线部分,可以抽完放HDFS上,或者RDBMS上。
在线部分,可能就要分级放在HBase、ElasticSearch,或者KV数据库等能快速索引的地方了。
抽哪些子集?
有时候数据上千亿,难道全部拿出来咩?也处理不了这么多啊。
只能按照数据分布来采集子集啦。
常用方法有随机采样啦,固定比例采样啦,接受-拒绝采样啦,重要性采样啦,Gibbs采样啦。
抽完还要看看数据分布,看看是不是要重采样啦,是不是要降采样啦,这样。
洗一洗
- 结合业务场景,进行数据列规则进行过滤
"钞票小于100元的我通通都不要。"
"这种拿小钱的粗活累活就让我来承担吧"
- 使用算法进行异常点检测
常用的套路有这些。
K均值聚类啊,层次聚类啊,谱聚类啊,DBSCAN啊,KNN啊。
以及四分位啊,极差啊,标准差,均差,看看数据分布大概是怎样的。
至于偏离太远的,得看看是特殊用户,还是垃圾数据,反正不太应该出现在我们接下里的过程里。
改一改
主要有三个套路要去弄。
标准化,离散化,缺省值。
-
什么叫标准化?
嗯,就是把所有的特征呢,都归到同一个值域里面。头长砍头,脚长砍脚。
🙈"咦,好血腥。。你再这样这个发不出去的小蕉。"
比如颜色像素,有256个值对不对,归到0-1就是全部处于256啦。这个叫归一化。
比如1、3、5、7、9。这种咋办呢?直接每个值都除以(最大值-最小值),这个叫最大最小值归一化。
也可以用Logistic函数,直接映射到0-1上,这个叫函数映射。
也可以直接排序,给他们强行改成新值,这个叫排序归一化。
-
什么叫离散化?
就是将连续的数值进行分箱啦。
(1元,5元]的一箱,(5元,10元]的一箱,这样
“都说了少于100元的我都不要了”
“妈蛋又不是给你的”
-
什么叫缺省值?
就是肯定有些值不知道什么鬼原因,反正就不见了嘛。咋办?
普遍的做法呢,要么就填个众数,要么就填个平均值,要么就用其他机器学习方法预测一个填进去。
别填过头,会粗事的。。
0xFF结束鸟
凑活着看吧,没了~
微信公众号:一名叫大蕉的程序员。