本人于2018年07月08日至2018年07月09日参加了全球架构师峰会2018的深圳培训,其中我比较关注的是08日下午的 机器学习及其实践应用,以及09日上午的 微服务治理探索与实践, 我将会分两篇博文, 以PPT及自己组织的叙述结构记录下会议的纪要, 以防遗忘, 也与读者分享一下自己的想法。 首先这篇是对 机器学习及其实践应用 的回顾和总结。
首先介绍主讲人 徐斌,曾任职亚马逊, 现任脸书的软件工程经理,负责商业诚信的工作。
会议首先是先引用了机器学习领域的大家的语句来定义机器学习是什么,其用途有且不限于:1、智能家居;2、健康领域;3、社交媒体;4、安保及诚信/征信;5、推荐系统;6、自动驾驶。原本,整个培训的流程是首先讲述机器学习平台及其搭建,然后谈一下机器学习算法如监督学习的分类,回归,深度学习,模型性能表现的度量,非监督学习及半监督学习。而实际上,由于在监督学习及模型性能度量一块说的比较深入,导致非监督学习及半监督学习来不及覆盖。在前言过后,将谈及机器学习平台及其构建。
第一阶段,系统原型
其步骤分为数据存储(Data Store)->数据清洗及标签(Data Clean and Labeling)->特征向量提取(Featurization)->将数据分割成训练集和测试集以及校验集(Trainning/test/validation)->进行采样(sampling)->输入至模型中运算(Model)->评估(Evaluation)。其中:
- 数据存储方面,个人决定应该加上数据采集,毕竟有很多数据并不是现成的需要自己去找;而数据存储(Data Store)又分为结构化数据,对应的存储分别为SQL和NoSQL。
- 特征向量提取(Featurization),演讲中其目的是为了使数据能够被算法使用;个人觉得这个就是数据工程?类似NLP RNN中语料库的one-hot-vector化以及word-embedding?
- 关于Trainning/test/validation, validation一般是在评估阶段才使用。演讲中提到的,Ramdom Forest等不需要调节超参(Hyperparameter)的模型,test和validation可以合并,在Evaluation对模型进行评估。而我个人从吴恩达教授的课程了解到,在神经网络的训练中和超参调优中,test set作为训练的一部分,模型会不断地从train set到test set偏移。,从而使得train set及test set所得到的error都最小化,所以才需要validation作为最后验证模型的数据集。
- 关于Sampling,采样:由于某些稀有事件的确十分稀少,与常规事件的比率非常小,导致如果直接输入数据集的话会过拟合常规事件,而把稀有事件当作噪声被过滤掉。所以应该在Sampling里面采取变加权采样,建议稀有事件与常规事件的比率为1:10。个人觉得这种措施是想让模型对现实中的稀有事件更敏感。
- 建议按时间这个维度分割选取train/test/validation,因为这样可以反映出时间维度的变化逻辑。例如可以在三个月的数据之中,用前2个月的数据做train/test,而用最后的一个月的数据做validation。
- validation不应sampling,应完全用在评估阶段。
第二阶段,系统部署:
在当Evaluation评估阶段中判断判定该模型效果满足要求(当然不满足要求就只好再条会特征向量提取阶段了),就可以进入部署阶段(deploy)了。在阶段一中,由于是在搭建原型,修改会比较多,多采用方便的脚本语言如Python和R,搭建工作流。而到了deploy阶段,由于生产环境比较稳定,且对性能要求比较高,多采用编译语言如Java,C++,Go等搭建。由于是生产环境,其输入数据将会是实时的数据流,需要发布的是特征向量提取部分以及模型部分,得到规则集合。规则集合会用于自动化执行程序,同时需要人工的校验。
第三阶段,系统回归反馈:
自动化执行程序的结果应该重新入库至数据存储(Data Store),而人工也应该对规则集进行检验,并进行True positive(wiki)和Fault positive的校验,并将校验过后的数据的输入至数据存储(Data Store)中。自动化执行和人工检验的数据输入值数据存储中,等待下个迭代调优模型的基础数据。
对于特征工程,演讲者着墨甚多。首先特征工程是需要了解领域知识的(Domain knowledge required)。特征工程可以帮助模型不需要搜索整个空间来识别出模式,也避免了一些噪声的干扰。特征工程有一句谚语:Garbage in and garbage out,即为输入垃圾数据,得出来的结果亦为垃圾结果。垃圾数据通常都是:不精准(inaccurate),不连续(inconsistent),不完整(incomplete),噪声太多(noise),不相关(uncorrelated),信息泄露(leak info)。不连续,则是表示在维度的区间的值不连续,导致缺少数据。不完整,则是丢失数据,如果重要维度丢失则对计算,模型拟合产生重大影响。不相关,演讲人则举了一个例子:曾经有个推断是吃冰棍的人多的时候,则是淹死的人也多。这个看似不相关的结果的正确逻辑为:吃冰棍的时候多为夏天,夏天有用的人多,则淹死的人也多。这个例子是想说明,明显不相关的维度当然学习不出什么模式,但是两个维度是否真的不相关,则亟待熟悉领域知识的专家甄别了。而信息泄露,则是把校验数据误放到data set里,即将答案泄露到训练数据里面了,其表现为train set的error成绩漂亮,test set 成绩难看。
特征工程尽量遵循简单、有效原则(即奥卡姆剃刀定律),以防过于复杂产生过拟合。而在特征的选取上,有Wapper,Filter,正则化,Embedded,PCA。演讲者着重将了Wapper和Filter,两者的关系就像加法和减法。Wapper是用Train Set的Subset训练,逐步增加变量维度,当error降低的成都逐渐减少时,则模型饱和了,亦即对特性贡献度大的变量都找出来了。Filter则是将特征变量维度逐步降低,当error的增量加大时,则知道减少的为主要特征。
如何决定花在特征工程、特征选取的时间?
- 业务领域是决定因素之一。
- 取决于何种模型算法。特征工程的重要性随着选取算法由传统到现代而降低。比如线性回归(LR),KNN对特征工程的依赖大于随机森林与GBT,而后两者的依赖性又大于深度学习。
- 有一个宏观问题是有待解决的:是侧重于算法还是侧重于数据(是先磨斧子还是先砍树),答案似乎为:哪个加快项目迭代则侧重哪个。
应对缺失数据:
- 将其归类到单独的一个分类(如W.O.E或风险数据表,这样可能会减少了变量并损害了变量预测的能力)。W.O.E为Weight Of Evidence,即为证据权重,是法学引入的概念,即不同类型的数据对推断所贡献的权重不同。
- 当数据多而显得单条数据不明显时,可考虑直接删除这条数据。或者直接用平均/中位来代替(与下述方案相比,代替可能会引入偏差)。(median比mean更robust,因为median对outliner具有耐抵性)。
- 预测缺失值(各维度的相关系数矩阵,耗费运力并且依然有可能有偏差).
- 使用一些支持空值的算法,如随机森林RF,深度学习DL,但是这些算法比较耗费算力。比如随机森林算法,可以先做分类,看空值是否都属于某个分类再进行相关处理(比如空值都属于某一类数据,则可尝试用某一类数据的中值或者平均值来填充)。
W.O.E 计算公式:WOE= \(\ln\frac{n_f,good}{n_f,bad}-\ln\frac{N_{good}}{N_{bad}}=\ln\frac{(\frac{n_f,good}{N_{good}})}{(\frac{n_f,bad}{N_{bad}})}\)
名词释义:n:标签为1/好/正 的标签中缺失数据的记录数。 n:标签为0/坏/负 的标签中缺失数据的记录数。 N:标签为1/好/正 的标签数。 N:标签为0/坏/负 的标签数。n/N即为标签为1/好/正 的记录中,缺失信息记录的占比。而现实中使用的WOE公式为 \(WOE_f=\ln\frac{(\frac{(n_f,good+\rho)}{N_{good}})}{(\frac{n_f,bad+\rho}{N_{bad}})}\), 其中 \(\rho=\ln\frac{N_{good}}{N_{bad}}\),以防分母为零。
在讲机器学习的种类和算法时,演讲者着重的讲了:分类中的:1、决策树(Decision Tree),随机森林,Gradient Boosted Trees,神经网络 Neutral Network/DL。回归中的随机森林回归。非监督学习簇类则为:1、K-means;2、Hierarchical
决策树 Decision Tree
主讲人在讲到分类决策树时,提到其Cross Entropy的Loss function的直观认识就是“系统越有序,信息熵越低”,即当所能分出的类别越多时,则信息熵越高。
信息熵的公式为:\(Entropy(\tau|P,N)=-\frac{P}{N+P}\log(\tau)\),而信息增益(Information Gain, IG)则作为Loss Function,其公式为:\(IG(\tau)=Entropy(\tau)-\frac{N_l}{N}Entropy(\tau_l)-\frac{N_r}{N}Entropy(\tau_r)\)
除了使用IG作为Loss Function,也有用基尼系数(Gini index)作为Loss Function的。由于基尼系数没有log对数运算所以过程更快,也多用于随机森林RF。
为了防止树的overfitting, 可以调节以下超参:1、max tree depth (最大树深度);2、Min obs in leaf (页子节点中最小记录条数);3、最小IG(信息增益,减少参杂)(这里个人解释为:较少的IG可能是由于噪音引起的,规定最小IG即为过滤噪声);4、Pruning 剪裁。
逻辑回归 Logistic regression
ElasticNet的特点就是,同时使用了L1+L2正则。L1正则比L2快,而L2比L1更具鲁棒性。
随机森林 Random Forests
Random Forests是被广泛应用的,且相当强力的算法,也是主讲嘉宾着重诠释的一个模型,一般森林里会有100~200颗树。模型后层中的vote 为combiane的手段,加权combiane使模型更robust,而最简单的combinane即为平均average。
当谈及RF的性质时,演讲者这样比喻:单棵决策树犹如盲人摸象,很难全面概括事物规律的。但当多棵树加起来,则会得到较为全面的认识。就好比从一个方向观测一个茶壶难免不能窥其全貌,但是从不同角度看的话就较为全面了。该算法的优点是不会过拟合,而解释性则是其弱项。
演讲者谈到,在amazon里面比较多用RF,多棵树combinane;而Facebook则更多用GBDT(Gradient Boosting Decision Tree, 梯度下降树),对单棵树进行优化,前面的结果加权输入下次树的计算。GBDT这种方法是有可能会过拟合的,因为noise噪音会往下传递至下一棵树的计算中,且parallel并行化要比RF差点。
在最后谈到Neural Nets时,他提到一点令笔者比较深刻:有时将Full Connect的output layer去掉,用RF 代替效果更好,因为RF的鲁棒性更好。
自此,笔者所听的课程已经完结了。经过半天的培训,所得出的结论就是个人修行不够,很多概念性的知识提到都能懂,但是因缺乏实践支持而感到空洞,应该往后多加强实践。
由 bruce 于 2018-08-30 1:29 更新