这是鼎叔的第一百零五篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。
欢迎关注本公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。本人新书《无测试组织 - 测试团队的敏捷转型》已出版(机械工业出版社),文末有链接。
进入正式的机器学习科目学习,通常是先从掌握经典算法和概念开始,进而编程实践,如下科目知识属于经典的必学内容。
模型误差和训练数据
如果模型过于复杂(噪音过多),参数过多,或者失去泛化能力,回归结果就称为过拟合;反之,建模有欠缺,或者参数过少,导致回归模型误差太大,称之为欠拟合。这两种情况都难以满足回归的质量要求。
模型误差的原因有两类,一类是训练误差,也称为 “经验误差”,还有一类是测试误差,也被称为 “泛化误差”。减少模型误差的办法有:额外数据的交叉验证,重新清洗数据,以及正则化。
为了降低误差,AI 训练使用的数据必须是大量的,完整的,有业务含义的,有特征标签的。
业务中搜集的大数据虽然有很丰富的类型,但是挑战也很大,因为数据的信息密度通常很低,处理速度要求快,数据也不是现成的,需要经过复杂的提取、存储和处理过程。因此数据也不是越多越好。
为了更好地利用数据,我们通过特征工程,借助数据领域的相关知识,来创建能够使机器学习算法达到最佳性能的特征。简而言之,特征工程就是把原始数据转换为特征,即人工设计输入变量。例如:为了准确判断一个人的性别的输出函数,我们可以设定输入特征为:是否有喉结。
行业有一句名言:数据决定了 AI 产生价值的上限,算法只是尽量去逼近这个上限。
机器学习的要素
“学习的核心是改善性能。”
机器学习也是如此,但和传统编程不同,机器学习不是仅仅依靠 “显式编程” 就能完成的科学。机器学习输出的是过程和数据关系,并通过检验把这些关系规则固化为模型。
机器学习有三大要素:模型,算法,策略。以烹饪作为例子,模型就是学什么 - 一个菜肴;算法就是怎么学 - 烹饪方法;策略就是何时结束。
人的学习是举一反三,而机器的学习是举千反一,算法就是专家总结出来的精炼逻辑。模型工作就是要解决三个核心问题:如何建模,如何评估模型好坏,如何优化它。
按照学习方式的不同,机器学习可以区分为三类:无监督学习,监督学习,强化学习。
回归
机器学习的基础概念,利用统计学中的回归分析来确定两种(或以上)变量间相互依赖的定量关系。线性回归就是一条直线函数来表示的回归关系:y=ax+b+e,如果这条直线能把样本数据点几乎串联在一起,这个过程就叫拟合。对应的还有非线性回归,用二维的曲线方程来表示回归拟合结果。
用通俗的话说,回归就是找到规律;用数学的话说,回归就是通过大量数据推导出一个函数,基于输入输出的值倒推出函数中的参数,叫做逆问题。对于一维函数,当然只需要关心斜率和截距了。
老的机器学习模型直接通过加权组合特征量,形成拟合公式,但人工神经网络就要引入更多的非线性变换了。
聚类
本公众号多次提到简单的聚类概念。它是一种非监督学习,把一批对象的集合分组为彼此相似的类别的分析过程,类似于人类天生识别动物种类的认知活动。经典算法是 K- Means,基于向量距离来不断做聚类,直到类簇中的向量归类变化低于指定的极低值为止。聚类也可以按密度而非位置进行分类,还可以按多层次聚类,即大类里面分小类。聚类的结果可以用于寻找可疑的孤立点,因此在安全策略中有广泛的用途。比如某用户的数据明显异于其他主流人群,属于高风险用户。聚类的一个难点是,应该分为几类(类簇)来聚合才是最优的,对于非监督学习来说没有特定经验,推荐在各个类簇数量的 “收获” 中,把增量最大的那个(拐点)做为推荐值。
对于聚类的质量评估,可以借助轮廓系数来度量,即:对比类簇内部的紧凑度,和该类簇与其他类簇的分离程度,两者差距越大,聚类的效果越好。
分类算法
这是有监督学习,用已知类别的样本来对模型进行分类器训练,达到所要求的新样本识别能力。分类的结果也是个定性的概率值,比如判断某客户是否高风险概率用户;它和回归算法的差别是前者是离散的变量预测,后者是连续变量预测。相关的经典公式是朴素贝叶斯算法,P(A|B) P (B)=P(B|A) P(A),利用 “条件概率” 进行概率分析。它广泛应用于各种场景,同时也需要辅助其他的建模手段。分类算法技术还衍生出了多种算法:决策树、随机森林、HMM、SVM、遗传算法等。
1) 决策树。决策树是一种常见的分类预测模型,它从根节点开始,一步一步决策,直到走到叶子结点。生成决策树的归纳过程是一种认知过程,决策树节点的分裂条件决定了接下来分类的规则。最佳的树枝切分策略,取决于是否尽可能消除了信息的不确定性(即信息增益),同时避免剪枝导致过拟合。
我们可以通过不同的字段切分尝试,看看哪种切分效果最好,在简洁性和正确性中取得平衡。
鼎叔在网上看到一句:生命就是一连串的决策树算法,不知来自哪位研究人员的感叹:)
2) 随机森林。这是决策树的并行优化算法,快速生成一批简洁的决策树,对新样本分类时,看看这些决策树计算后得到的民主投票结果。
3) 隐马尔可夫模型(Hidden Markov Model,HMM)。HMM 在语言识别和自然语言处理领域应用广泛,它是一个双重的随机过程,在状态转移之间有一个随机概率,在状态和输出之间也有一个随机概率,通过观察一系列的输入,预测产生什么观察结果的概率最大,并生成概率转移矩阵。它在语音识别领域的应用主要是解码问题,在输入法软件的应用则是通过首字母预测输入词语的功能。
4) 支持向量机(Support Vector Machine,SVM)。针对已知的样本和分类标记,找到一个超平面(即分类函数的表达式)进行划分,让这个超平面距离所有点的距离最大。
只用线性变换是无法分割复杂数据的,所以非线性变化就显得至关重要。
如果样本是线性不可分,就采用升维的技巧,利用核函数把样本映射到高维度,再来找到超平面,再映射回来就不是线性了。它是一种比较抽象的机器学习算法概念,用于模式识别,分类和回归。
5) 遗传算法。它最有趣的就是借助生物界进化论的机制进行优胜劣汰,找到最佳解法。基本步骤是对样本个体进行基因编码,再从样本空间中挑选出一个初始集群,其中每个个体的基因都不同,淘汰不合规则的个体后,让集群中的个体结对生成下一代(比如,对两者的基因进行特定片断的重组)。对所有下一代进行排序,遴选出最优秀的一批后代,淘汰掉其他的,再进入下一轮 “进化”。当连续数轮的 “进化”,产生的结果没有进步,或者进步极小,我们就认为算法可以结束了,此时排序领先的就是最佳解法。需要注意的是,基因编码方式,初始集群大小,遴选方法和淘汰概率等,都可能导致最终生成不同的 “最优” 结果。如果样本空间是非离散的,我们选择基因编码的长度要考虑问题域的求解精度,避免计算成本过高。
关联分析与推荐算法
这是数据挖掘产生价值的经典过程,对不同类型的两项(或多项)产品共同出现的频率做关联分析,判断两者是否出现正向或负向相关性。业界最经典的算法就是 Apriori,它的目标是挖掘出一定置信度和支持度的强关联规则。
我们可以基于用户或者基于商品来进行协同过滤计算,推荐出用户可能想买的其他商品,这里面可能用到空间向量的余弦相似度计算。推荐算法并不是要高度收敛,而是保证多样性,以便推荐用户购买更多丰富的商品(即提高转化率),因此会对商品相似度做归一化处理,对相似度较低的值做一些补偿,合理拉高其分数,便于遴选。
文本挖掘
从大量结构化文本数据中通过自然语言分析,挖掘出可理解可用的知识,一直是数据挖掘的重点方向,也是最常见的机器学习技术应用。文本挖掘出来的常见内容包含聚类、分类、NLP(自然语言处理)、信息抽取等方面,每一块都是内容庞大的细分知识领域。对于中文互联网产品,最基础的文本分类训练就是分词及权重计算,以便判断出词义、用户情绪和文章类别(标签)。用于评价结果质量的指标就是召回率和精度,这也是智能产品评测普遍要掌握的基础概念。召回率衡量的是检索系统的查全率(“检索出的相关文档” 除以 “文档库的所有相关文档”),精度衡量的是检索系统的查准率(“检索出的相关文档” 除以 “检索出的总文档”)。
总结
注意以上经典机器学习数据中的时间序列影响,时间序列有趋势性、周期性、季节性,它可能包含不规则的数据突刺(比如随机时间和突发时间导致的数据异常)。我们应当让算法尽可能降低对时间序列的不合理依赖。
机器学习算法可以看成是更高级的语言,它让机器自我学习,并自行整理出规则。而从大量高质量的数据中学习规则,更容易成功地泛化。
没有一个算法在任何一个领域总是表现最佳的,算法是简洁和高度抽象的表达,实际业务场景才是非常复杂的,如何把场景描述得简洁可控,才是应用好算法的前提。