spark支持算法总结
推荐模型
协同过滤
协同过滤简单来说就是利用某个兴趣相投,拥有共同经验之群体的喜好来为用户推荐其感兴趣的资讯。换句话说就是,借鉴和你相关的人群的观点来进行推荐。
协同过滤的目标在于填充“用户-商品”联系矩阵中的缺失项。spark.ml使用交替最小二乘算法来学习这些潜在因子。
用户数据:
用户数据有user ID, movie ID, rating(1-5), timestamp等4个字段。共100000行。
分类模型
分类通常是指将事物分为不同的类别,属于监督学习中的一种形式。通过大量的样本数据构成一个训练集,每个样本有多个属性,属性可以是连续型,也可以是离散型。其中每一个属性都称为事物的类别属性。用来表示事物所属的类别。简而言之,分类就是通过一组代表物体、事件等的相关属性来判断其类别。
分类问题通常会分为两种,一种是简单的二分类问题,即结果只有1或0, 例如判断肿瘤是良性或恶性,只有两种可能情况。另一种多类别分类问题。结果有多个类别,有限个类别。例如判断手写数字,只有‘0-9‘的可能。
1.逻辑回归
特点:
-
应用:
- 用于分类:适合做分类算法的基础组件
- 用于预测:预测时间发生的概率(输出)
- 用于分析:单一因素对某一个时间发生的影响因素分析(特征参数值)
-
使用:
- 基本假设:输出类别服从伯努利二项分布
- 样本线性可分
- 特征空间不是很大的情况
- 不必在意特征间相关性的情景
- 后续有大量新数据的情况
优点:
- 模型清晰
- 输出值自然的落在0到1之间,并且有概率意义
- 参数代表每个特征对输出的影响,可解释性强
- 实施简单,非常高效, 适用于大量数据
- 可以使用online learning的方式轻松更新数据,不需要重新训练整个模型
- 解决过拟合的方式很多,如L1, L2正则化
- L2正则化就可以解决多重共线性问题
缺点:
- 因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况
- 特征空间很大时,性能不好
- 容易欠拟合,精度不高
- 对极端值敏感
原始数据:
训练数据及预测结果显示:
2.决策树
特点:
- 具有强大的非线性技术,不要求样本数据标准化,可以用来表示复杂的非线性模式和特征的相互关系。易扩展到多分类问题。
- 适用于小数据集,在逐步应答过程中,典型的决策树分析会使用分层变量或决策节点。例如,可将一个给定用户分类成信用可靠或不可靠。
- 常见举例:基于规则的信用评估,赛马结果预测
优点:
- 计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征;
- 擅长对人、地点、事物的一系列不同特征、品质、特性进行评估。
缺点:
- 容易过拟合(后续出现了随机森林,减小了过拟合现象),使用剪枝避免过拟合
原始数据:
训练数据及预测结果显示:
3.朴素贝叶斯
特点:
- 朴素贝叶斯分类是一个简单概率模型,通过计算给定的待分类型在每个类别的概率进行预测,哪个概率最大就认为待分类项属于哪个类别。
- 使用先验知识得到后验概率,由期望风险最小化得到后验概率最大化。假设条件独立,条件不独立就变成贝叶斯网络了
优点:
- 模型简单,易训练,并且具有高效和并行的优点。
- 小规模数据集表现好,适合多分类
- 对于在小数据集上有显著特征的相关对象,朴素贝叶斯方法可对其进行快速分类
缺点:
- 需要条件独立假设,会牺牲一定准确率,分类性能不一定高
训练数据及预测结果显示:
4. 随机森林
特点:
优点:
- 不易过拟合,可能比Bagging和Boosting更快。由于在每次划分时只考虑很少的属性,因此它们在大型数据库上非常有效。有很好的方法来填充缺失值,即便有很大一部分数据缺失,仍能维持很高准确度。给出了变量重要性的内在估计,对于不平衡样本分类,它可以平衡误差。可以计算各实例的亲近度,对于数据挖掘、检测离群点和数据可视化非常有用。
- 随机森林方法被证明对大规模数据集和存在大量且有时不相关特征的项(item)来说很有用
缺点:
- 在某些噪声较大的分类和回归问题上会过拟合。对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产生的属性权值是不可信的。
原始数据:
训练数据及预测结果显示:
训练好的随机森林:
5. 梯度提升决策树回归
特点:
GBDT是一种迭代的决策树算法,有多棵决策树的结论累加起来作为最终答案
优点:
- 预测精度高
- 适合低维数据
- 能处理非线性数据
- 可以灵活处理各种类型的数据,包括连续值和离散值
- 在相对少的调参时间情况下,预测的准确率也可以比较高,这个是相对SVM来说的。
- 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数
- 可解释性强,可以自动做特征重要性排序。
缺点:
- 数据维度较高时会加大算法的计算复杂度。
- 不好并行化
预测数据:
训练数据及预测结果显示:
训练好的GBT模型:
6. 多层感知器分类
特点:
多层感知器 (MLP)是一种前向结构的ANN人工神经网络。多层感知器能够处理非线性可分离的问题。MLP映射一组输入向量到一组输出向量。可被看做是一个有向图。有多个节点组成,每一层全连接到下一层,除了输入节点,每个节点都有一个带有非线性激活函数的神经元,使用BP反向传播算法的监督学习方法来训练MLP。
优点:
- 高度的并行处理
- 高度的非线性全局作用
- 良好的容错性
- 具有联想记忆功能
- 非常强的自适应、自学习功能
缺点:
- 网络的隐含节点个数选取非常难
- 停止阈值,学习率,动量常熟选取非常难
- 学习速度慢
- 容易陷入局部极值
- 学习可能不够充分
预测数据及结果显示:
7. 一对多分类
特点:
把一个多分类的问题变成多个二分类的问题。转变的思想就如同方法名称描述的那样,首先遍历每个类别,被遍历的类别作为positive, 其余的类作为negitive类别。遍历完之后就可以得到k(表示类别的种类数)分类器,在预测阶段输入一个样本, 计算出概率最高的分类器作为预测的类别。
优点:
- 效率很高, 有多少个分类就训练多少个分类器就可以完成多分类。
- 普适性广,可以应用于能输出值或者概率的分类器
缺点:
- 若样本不平衡时,那么每个单模型在训练的时候可能都是偏向于negative,最终在预测的使用就是相当于在一端偏向negitive的模型中找到positive的分类器。
训练数据及预测结果显示:
8. 支持向量机
特点:
- 是一种二分类模型。
- 非线性映射,利用內积核函数代替高维空间的非线性映射
- 对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心
- 支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量
优点:
- SVM的最终决策函数只有少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”
- 少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本,“剔除”大量冗余样本,而且注定了算法简单,而且具有较好的“鲁棒性”。体现在:
- 增、删非支持向量对模型没有影响
- 支持向量样本集具有一定的鲁棒性
缺点:
- SVM算法对大规模训练样本难以实施
- 用SVM解决多分类问题存在问题
训练数据显示:
回归模型
预测数据:
1.线性回归
公式:
Y
=
β
0
+
β
1
x
1
+
β
2
x
2
+
.
.
.
+
β
p
−
1
x
p
−
1
+
ε
Y = \beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_{p-1}x_{p-1} + ε
Y=β0+β1x1+β2x2+...+βp−1xp−1+ε
线性模型的假设主要有以下几点:
- 响应变量Y与误差项ε正态性:响应变量Y与误差项ε服从正分布,且ε是一个白噪声过程,因而具有零均值,同方差的特性。
- 预测量
x
i
x_i
xi和未知参数
β
i
\beta_i
βi的非随机性:预测量
x
i
x_i
xi具有非随机性、可预测且不存在测量误差;未知参数
β
i
\beta_i
βi认为是未知但不具有随机性的常数,值得注意的是运用最小二乘法或极大似然法解出的未知参数
β
i
\beta_i
βi则具有正态性。
- 研究对象:如前述普通线性模型的输出项是随机变量Y,在随机变量众多的特点或属性里,比如分布、各种矩、分位数等等,普通线性模型主要研究响应变量的均值
E
[
Y
]
E[Y]
E[Y]
- 联接方式:可采用
f
(
x
)
=
x
f(x) = x
f(x)=x联接二者。
线性回归模型的关键点:
- 建模快速简单,特别适用于要建模的关系不是非常复杂且数据量不大的情况
- 对异常值非常敏感
训练数据框架:
训练数据及结果显示:
2. 广义线性模型
广义线性模型实在普通线性模型的基础上,将上述四点模型假设进行推广二得出的应用范围更广,更具有实用性的回归模型。
- 响应变量Y的分布推广至指数分散族;比如正态分布、泊松分布、二项分布、负二项分布、伽玛分布、逆高斯分布。
- 预测量
x
i
x_i
xi和未知参数
β
i
\beta_i
βi的非随机性:任然假设预测量
x
i
x_i
xi具有非随机性、可测且不存在测量误差;未知参数
β
i
\beta_i
βi认为是未知且不具有随机性的常数。
- 研究对象:广义线性模型里采用的连接函数理论上可以是任意的,而不再局限于
f
(
x
)
=
x
f(x) = x
f(x)=x.
3.决策树
训练数据框架:
训练数据及结果显示
4.生成回归
生存数据:
关于某个个体生存回见的数据,生存时间就是死亡时间减去出生时间。
生存数据有两个特点:
- 有截尾数据:未知道死亡时间
- 生存时间的特征一般不服从正态分布
加速失效时间模型(accelerated failure time model)可以作为比例风险模型的替代模型。这是一个用于检查数据的参数生存回归模型,描述了生存时间对数的模型。
优点:
对分析结果的解释更加简单,直观且易于理解,并且预测个体的生存时间。
训练数据及结果显示:
5. 保序回归
特点:
- 保序回归解决了下面的问题:给定包含n个数据点的序列
y
1
,
y
2
,
y
3
,
.
.
.
,
y
n
y_1,y_2,y_3,...,y_n
y1,y2,y3,...,yn,怎么通过一个单调的序列
β
1
,
β
2
,
β
3
,
.
.
.
,
β
3
\beta_1, \beta_2, \beta_3, ..., \beta_3
β1,β2,β3,...,β3来归纳这个问题。
- 通常作为辅助方法修复因为数据稀疏性导致的矫正结果不平滑问题
优点:
缺点:
- 适用于样本量多的情况,样本量少时,使用保序回归容易过拟合
训练数据及结果显示:
聚类模型
无监督学习,从没有标签数据的数据中提炼出规则或特征。比如识别异常数据,对用户进行分类。
聚类算法的思想就是物以类聚的思想,相同性质的点在空间中表现得较为紧密和接近,主要用于数据探索和异常检测。
1. KMeans
k-平均聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。
如市场划分、机器视觉、 地质统计学、天文学和农业等。它经常作为其他算法的预处理步骤,比如要找到一个初始设置。
优点:
- 实现容易,收敛速度快
- 聚类效果较优
- 主要需要调参的参数仅仅是簇族K
缺点:
- K值的选取不好把握
- 对于不是凸的数据集比较难收敛
- 采用迭代方法,得到的结果只是局部最优
- 如果各隐含类别的数据不平衡,则聚类效果差
- 对噪音和异常点比较的民汉
规范化的特征向量对应的预测类别:
未处理的数据:
已处理数据:
不同k值下的误差显示:
2. LDA(Latent Dirchlet allocation)
LDA是主题模型,常用于文本分类。用于推测文档的主题分布,已将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出他们的主题分布后,便可以根据主题分布进行主题聚类或文本分类。
3. 高斯混合
高斯混合模型值得是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或是同一类分布但参数不同,或是不同类型的分布)。
高斯混合被实现为Estimator, 并生成GaussianMixtureModel作为基础模型。
4. 二分K均值(Bisecting k-means)
Bisecting Kmeans被实现为一个估计器,并生成一个BisectingKMeansModel作为基础模型。
二分K-means算法时一种分层聚类算法,采用自顶向下的方法,所有观察者初始化为一类,然后递归地分裂它们。
相对于Kmeans的优点:
- 可以加速K-means算法的执行速度
- 不受初始问题的影响,不存在随机点的选取,且每一步都保证了误差最小
训练数据:
中心点(K = 2):