基于Spark的机器学习实践 (七) - 回归算法

简介: 基于Spark的机器学习实践 (七) - 回归算法

0 相关源码

1 回归分析概述

1.1 回归分析介绍

◆ 回归与分类类似,只不过回归的预测结果是连续的,而分类的预测结果是离散

◆ 如此,使得很多回归与分类的模型可以经过改动而通用

◆ 因此对于回归和分类中基本原理相同或类似的模型 ,不再赘述

1.2 Spark中集成的回归算法

◆ Spark实现的回归算法很丰富 ,有很多模型同样可以用于分类

1.3 回归与分类的区别与联系

2 线性回归算法概述

2.1 线性回归简介◆ 在回归分析中,自变量与因变量之间满足或基本满足线性关系,可以使用线性模型进行拟合

◆ 如回归分析中,只有一个自变量的即为一元线性回归,其自变量与因变量之间的关系可以用一条直线近似表示

◆ 同理,对于多变量的回归称为多元线性回归,其可以用一个平面或超平面来表示

2.2 使用线性回归的前提条件

◆ 自变量与因变量之间具有线性趋势,在前面介绍过相关系数

◆ 独立性

因变量之间取值相互独立,不存在关联

2.3 线性回归的例子

◆ 例如探究沸点与气压的关系,研究浮力与表面积之间的关系,物理上经典的探索力与加速度之间的关系

3 线性回归算法原理

3.1 回顾机器学习模型

◆ 对于统计学习来讲,机器学习模型就是一个函数表达式,其训练过程就是在不断更新这个函数式的参数,以便这个函数能够对未知数据产生最好的预测效果

◆ 机器学习的这个过程,与人的学习过程原理是一样的,都是先学习而后使用,故归属于人工智能领域

3.2 何为好的预测效果?

◆ 前面说"以便达到最好的预测效果”, 那么如何量化"好的预测效果”呢?


◆ 衡量预测效果好坏的函数称为代价函数(cost function) ,或损失函数(loss function).


◆ 例如:用一个模型预测是否会下雨,如果模型预测错误一天,则损失函数加1

那么机器学习算法的直接目标就是想方设法调节这个函数的参数

以便能够使预测错误的天数减少,也就是降低损失函数值,同时,也提高了预测的准确率

3.3 再谈线性回归

◆ 线性回归是最简单的数学模型之一

◆ 线性回归的步骤是先用既有的数据,探索自变量X与因变量Y之间存在的关系

这个关系就是线性回归模型中的参数.有了它,我们就可以用这个模型对未知数据进行预测

◆ 机器学习的模型基本的训练过程亦是如此,属于监督学习

3.4 线性回归模型

◆ 线性回归的数学表达式是

◆ 上式分别为一元线性回归与写成矩阵形式的线性回归模型

4 最小二乘法

4.1 何为最小二乘法

◆ 又称最小平方法,通过最小化残差平方和来找到最佳的函数匹配

◆ 即最小二乘法以残差的平方和作为损失函数,用于衡量模型的好坏

◆ 利用最小二乘法可以实现对曲线的拟合

4.2 最小二乘法原理

◆ 以一元线性回归为例,演示推倒过程

4.3 最小二乘法例子

5 随机梯度下降

5.1 何为随机梯度下降

◆ 随机梯度下降(SGD)是机器学习中常用的一种优化方法

◆ 它是通过不断迭代更新的手段,来寻找某一个函数的全局最优解的方法

◆ 与最小二乘法类似,都是优化算法,随机梯度下降特别适合变量众多,受控系统复杂的模型,尤其在深度学习中具有十分重要的作用

5.2 从梯度说起

◆ 梯度是微积分中的一个算子,用来求某函数在该点处沿着哪条路径变化最快,通俗理解即为在哪个路径上几何形态更为“陡峭”

◆ 其数学表达式为(以二元函数为例)

5.3 随机梯度下降原理

◆ 线性模型的梯度下降推倒过程

5.4 随机梯度下降优点

◆ 随机梯度下降的"随机”体现在进行梯度计算的样本是随机抽取的n个,与直接采用全部样本相比,这样计算量更少

◆ 随机梯度下降善于解决大量训练样本的情况

学习率决定了梯度下降的速度,同时,在SGD的基础上引入了”动量”的概念,从而进一步加速收敛速度的优化算法也陆续被提出

6 实战Spark预测房价 - 项目展示及代码概览

  • 代码

数据加载及转换

  • 数据集文件 - Price降序排列

由于训练集有序,为提高准确率,应打乱顺序-shuffle

  • 预测结果

7 逻辑回归算法及原理概述

7.1 线性 VS 非线性

◆ 线性简言之就是两个变量之间存在一 次方函数关系

◆ 自然界中变 量间更多的关系是非线性的,绝对的线性关系相对很少

◆ 因此,在选择数学模型进行拟合的时候,很多情况使用非线性函数构造的模型可能比线性函数模型更好

7.2 逻辑回归

◆ 逻辑回归即logistic回归,是一种广义上的线性回归,但是与线性回归模型不同的是,其引入了非线性函数

◆ 因此,逻辑回归可以用于非线性关系的回归拟合,这一点是线性回归所不具备的

7.3 逻辑回归算法原理

Sigmoid函数

逻辑函数(英语:logistic function)或逻辑曲线(英语:logistic curve)是一种常见的S函数,它是皮埃尔·弗朗索瓦·韦吕勒在1844或1845年在研究它与人口增长的关系时命名的。

  • 一个简单的Logistic函数可用下式表示:

广义Logistic曲线可以模仿一些情况人口增长(P)的S形曲线。起初阶段大致是指数增长;然后随着开始变得饱和,增加变慢;最后,达到成熟时增加停止。

  • 标准Logistic函数

逻辑回归原理

◆ 改进线性回归模型

8 正则化原理

8.1 模型是训练得越多越好吗?

◆ 我们通常理解是“千锤百炼”肯定质量过硬,而机器学习是一样的吗?

8.2 过拟合、欠拟合与刚刚好

◆ 人学习太过容易不懂得变通,过于教条,变成所谓的”书呆子”

机器学习也是一样


◆ 我们把机器学习模型训练得太过 ,陷入“教条”的状态称之为过拟合(over fitting)


◆ 反之,预测能力不强,宛若“智障”的模型称之为欠拟合(under fitting)


◆ 下面分别演示了用三个不同的数学模型对样本点进行拟合,产生的三种状态

8.3 如何达到刚刚好呢?

◆ 对于欠拟合状态,只需要加大训练轮次,增加特征量,使用非线性模型等即可实现

◆ 而相反,过拟合却往往更加棘手

◆ 常用的减少过拟合的方法有交叉验证法,正则化方法等

8.3.1 交叉验证法

◆ 所谓交叉验证法,就是在训练过程中,将训练数据集拆分为训练集验证集两个部分

  • 训练集专用训练模型
  • 验证集只为检验模型预测能力

当二者同时达到最优,即是模型最优的时候

8.4 正则化原理

◆ 我们在前面的示例中可以看到,对于过拟合现象,往往都是模型过于复杂,超过实际需要


◆ 那么,能否在损失函数的计算中,对模型的复杂程度进行量化,越复杂的模型,就越对其进行”惩罚”, 以便使模型更加”中庸”


◆ 上面的思路就是正则化的思想,通过动态调节惩罚程度, 来防止模型过于复杂


◆ 令损失函数为



◆ 则经过优化的参数为

◆ 其中

为正则化项,反应了模型的复杂程度,在不同算法中有差异,例如可以为

9实战Spark逻辑回归

  • 该算法官方归类于分类算法

  • 逻辑回归算法

  • 分类结果(因为分类,所以都是显示的都是1500)

10 保序回归算法概述

10.1 何为保序回归?

◆ 保序回归是用于拟合非递减数据(非递增也一样)的一种回归分析,同时,保序回归能够使得拟合之后的误差最小化

保序回归(英文:Isotonic regression)在数值分析中指的是在保序约束下搜索一个加权 w 的最小二乘 y 以拟合变量 x,它是一个二次规划问题:



保序回归应用于统计推理、多维标度等研究中。


◆ 比较保序回归与线性回归

10.2 保序回归的应用

◆ 保序回归用于拟合非递减数据 ,不需要事先判断线性与否,只需数据总体的趋势是非递减的即可

例如研究某种药物的使用剂量与药效之间的关系

11 保序回归算法原理

11.1 保序回归的原理

◆ 适用保序回归的前提应是结果数据的非递减,那么,我们可以通过判断数据是否发生减少来来触发计算


◆ 算法描述



◆ Spark实现求解该模型的算法是pool adjacent violators算法(PAVA)


◆ 例如原序列为{1,3,2,4,6}经过保序回归为{1,3,3,3,6}

12 实战保序回归数据分析

  • 官网文档介绍
  • 保序回归属于回归算法族。标准保序回归是一个问题,给定一组有限的实数Y = y1,y2,…,yn表示观察到的响应,X = x1,x2,…,xn未知的响应值拟合找到一个函数最小化


相对于x1≤x2≤…≤xn的完全顺序,其中wi是正的权重。由此产生的函数称为保序回归。

它可被视为顺序限制约束的最小二乘问题。基本上保序回归是最适合原始数据点的单调函数。

我们实现了一个pool adjacent violators algorithm

算法,该算法使用一种并行化保序回归的方法。

训练输入是一个DataFrame,它包含三列 : 标签,功能和权重。

此外,IsotonicRegression算法有一个称为等渗默认为true的可选参数。该论证指定等渗回归是等渗的(单调递增的)还是反单调的(单调递减的)。

训练返回IsotonicRegressionModel,可用于预测已知和未知特征的标签。

保序回归的结果被视为分段线性函数。因此,预测规则是:

1 如果预测输入与训练特征完全匹配,则返回相关联的预测。如果有多个具有相同特征的预测,则返回其中一个。哪一个是未定义的(与java.util.Arrays.binarySearch相同)

2 如果预测输入低于或高于所有训练特征,则分别返回具有最低或最高特征的预测。

3 如果存在具有相同特征的多个预测,则分别返回最低或最高。

  • 代码
  • 计算结果,预测效果最为惊艳!!!

Spark机器学习实践系列基于Spark的机器学习实践 (一) - 初识机器学习

基于Spark的机器学习实践 (二) - 初识MLlib

基于Spark的机器学习实践 (三) - 实战环境搭建

基于Spark的机器学习实践 (四) - 数据可视化

基于Spark的机器学习实践 (六) - 基础统计模块

基于Spark的机器学习实践 (七) - 回归算法


目录
相关文章
|
29天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
96 4
|
19天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
115 30
|
23天前
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
191 15
|
26天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
43 1
|
1月前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
91 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 算法
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
41 0
|
1月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
36 0
|
1月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
142 2
ClickHouse与大数据生态集成:Spark & Flink 实战