2.3 实时线性分类器介绍
2.3.1 广义线性模型的定义
(广义)线性模型是机器学习发展几十年来理论和工具上最为完备的模型:不管是分类还是预测,线性模型都可以进行实时更新和预测;线性模型的解释性非常优秀,每个变量的回归系数都可以用于解释模型;最后,我们可以通过增减变量,修改特定的回归系数对模型进行人为加工。
继续前文的符号定义,假设回归因变量为 Y ,自变量为 p 维向量 X。在线性模型中,我们企图获得 p 维参数向量,让我们可以通过 X 个个元素的现行组合得到Y 。它们的关系可以通过下面的函数来表示:
其中,F ()为因变量 Y 的累计概率分布,E()为数学期望的计算。我们可以从以下两个部分来解读这个模型。
(1)线性输入
η=XTb,每个自变量 Xi对模型输出的贡献都是线性的,其贡献大小都由对应的 i 来决定。当bi= 0 时,自变量 Xi 不会影响最后的预测。这些线性输入的总和会直接影响最后因变量的取值。
(2)可预计的输出
给定η时,因变量的取值由连接函数 f 和 Y 的分布 F 来决定。我们常用的 f 和 e 有以下三种情况。
当 f(η) =η,且 F () 为正态分布的累计概率分布时,模型等于对正态分布的连续变量进行线性预测。
当 f(η) = 1/(1 + exp(η)),且 F() 为二项分布累计概率分布的时候,模型等于逻辑回归模型,可用于对男女、好恶等类别进行分类预测。
当 f(η) = exp(η),且 F ()为泊松分布累计概率分布的时候,模型等于泊松模型,可用于对订票人数、车辆通过数量等数据进行预测。
综上所述,众多数据模型都是可以通过线性模型的特殊情况进行建模预测的。
2.3.2 训练线性模型
给定已知的样本 {(Xi, Yi)}ni=1,假设现在需要通过模型训练得到线性模型参数b,那么我们往往会定义目标函数 L,通过随机梯度下降的方法求得b,使得 L 尽量小:
其中,λ1和λ2是预先设置好的非负参数,| · |1 为计算 L1 的范数,| · |2 为计算 L2 的范数。
上面的目标函数可以分为如下两部分来理解。
预测误差:目标函数L第一项预测误差,我们训练一个模型当然是希望其得到的误差应尽量小。
惩罚函数 (penalty function):目标函数L中第二、三项的存在是为了防止所得模型的过度拟合,加入L1惩罚函数还可以进行变量优先选择。
这里的参数λ1 和 λ2都是实现选择的参数,可以通过多次比较不同的模型来获取最有效的组合。
现在对线性模型的拟合工作已经在主流机器学习软件工具中完全自动化,在Scikit-learn中,对线性回归模型的拟合主要采用 sklearn.linear_model.SGDRegressor,对于分类问题,主要采用 sklearn.linear_model.SGDClaffier。
2.3.3 冷启动问题
机器学习应用中,其实收集数据才是最昂贵的一部分。若没有数据,那么一切模型都将是空中楼阁。对于新企业或新项目,没有数据进行模型训练,那么怎么样才能有最初始的模型呢?没有数据就有没模型,但是如果没有模型,往往也会难以收集到数据。怎么样才能解决这个鸡生蛋、蛋生鸡的问题呢?这个问题可能会因为不同的组织而有不同的答案,这里主要总结如下两个方案。
- 借用其他相关数据
如果无法获得当前组织的机器学习数据进行建模,那么其中一个办法是从其他来源获取类似的数据,建立暂时能用的模型。等到产品成熟了,收集到足够多的数据以后再开发自身专有的模型。
例如,某初创业公司需要对小说影评的正负评价进行分类。但苦于暂时没有现成的数据,因此借用了相关网站,如豆瓣、知乎等帖子的内容,作为训练数据;又因为没有评价正负标签,该公司将豆瓣评分、知乎投票数量进行转化,获得了模型的正负标签。
2.人工参与
在遇到建模冷启动问题的时候,该模型的使用人数往往并不高,如果对延迟的要求不高,完全可以通过人工标记的方法来解决。
例如,国内某家已经上市的门户视频网站,成立多年以来,分类、标记、推荐等业务都是通过人工完成的,且取得了尚佳的结果。如今该网站上市之后拥有了雄厚的资金实力,聘请了顶尖的机器学习专家进行视频的标签标记和推荐。此时通过多年的努力该网站已经积累了大量的标签数据,建模的效果也相当好。
另外一方面,处理冷启动问题的时候,我们也可以将人工意见写入模型之中,使其自动化运行。例如对于股价走势预测模型,我们可以通过人工经验,对历史走势、成交量等因子进行人工打分,将人工打分的结果放入现行模型中,进行前期应用。
当然,所有人工参与的方式都离不开严格的监督流程。本书的第9章会介绍通过 Elasticsearch 对数据进行可视化分析和质量监控的方法。