分类和回归
许多标准的机器学习算法可以归结为凸优化问题。例如,找到凸函数 f(w) 的一个极小值的任务,这个凸函数依赖于可变向量w (在spark源码中,一般表示为weights)。形式上,我们可以将其当作一个凸优化问题${min}_{w}f(w)$。它的目标函数可以表示为如下公式(1):
1.2 正则化
spark.mlib提供了多种方法用于用于二分类、多分类以及回归分析。 下表介绍了每种问题类型支持的算法。
问题类型 | 支持方法 |
二分类 | 线性SVMS、逻辑回归、决策树、随机森林、梯度增强树、朴素贝叶斯 |
多分类 | 逻辑回归、决策树、随机森林、朴素贝叶斯 |
回归 | 线性最小二乘法、决策树、随机森林、梯度增强树、保序回归 |
线性模型
1、数学描述
在上式中,向量x表示训练数据集,y表示它相应的标签,也是我们想预测的值。如果L(w;x,y)可以表示为${w}^{T}x$和y的函数, 我们称这个方法为线性的。spark.mllib中的几种分类算法和回归算法可以归为这一类。
目标函数f包含两部分:正则化(regularizer),用于控制模型的复杂度;损失函数,用于度量模型的误差。损失函数L(w;.)是一个典型的基于w的凸函数。固定的正则化参数gamma定义了两种目标的权衡(trade-off), 这两个目标分别是最小化损失(训练误差)以及最小化模型复杂度(为了避免过拟合)。
1.1、损失函数
下面介绍spark.mllib中提供的几种损失函数以及它们的梯度或子梯度(sub-gradient)
- hinge loss
hinge损失的损失函数L(w;x,y)以及梯度分别是:
- logistic loss
logistic损失的损失函数L(w;x,y)以及梯度分别是:
- squared loss
squared损失的损失函数L(w;x,y)以及梯度分别是:
正则化的目的是为了简化模型及防止过拟合。spark.mllib中提供了下面的正则化方法。
问题 | 规则化函数R(w) | 梯度 |
zero | 0 | 0 |
L2 | 如下公式(1) | w |
L1 | 如下公式(2) | sign(w) |
elastic net | alpha * L1 +(1-alpha) * L2 | alpha * sign(w) + (1-alpha) * w |
在上面的表格中,sign(w)是一个向量,它由w中的所有实体的信号量(+1,-1)组成。L2问题往往比L1问题更容易解决,那是因为L2是平滑的。然而,L1可以使权重矩阵更稀疏, 从而构建更小以及更可判断的模型,模型的可判断性在特征选择中很有用。
2、分类
分类的目的就是将数据切分为不同的类别。最一般的分类类型是二分类,即有两个类别,通常称为正和负。如果类别数超过两个,我们称之为多分类。spark.ml提供了两种线性方法用于分类:线性支持向量机以及逻辑回归。 线性支持向量机仅仅支持二分类,逻辑回归既支持二分类也支持多分类。对所有的方法,spark.ml支持L1和L2正则化。分类算法的详细介绍见下面的链接。