热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习(2):简单线性回归|一元回归|损失计算|MSE

前文再续书接上一回,机器学习的主要目的,是根据特征进行预测。预测到的信息,叫标签。从特征映射出标签的诸多算法中,有一个简单的算法,叫简单线性回归。本文介绍简单线性回归的概念。(1)

机器学习(2):简单线性回归 | 一元回归 | 损失计算 | MSE

前文再续书接上一回,机器学习的主要目的,是根据特征进行预测。预测到的信息,叫标签。

从特征映射出标签的诸多算法中,有一个简单的算法,叫简单线性回归。本文介绍简单线性回归的概念。

(1)什么是简单线性回归

“回归(regression)”是什么?如之前所讲,预测模型可区分为“分类器”跟“回归器”,回归器,就是用来预测趋势变化的,比如预测明天哪支股会涨停,预测某天的降雨量是多少,预测未来一年房价的变化,等等。所以回归就是预测的意思,没有什么高深的。线性是什么意思?就是一条直线,够简单了吧,自然也有“非线性回归”。那“简单”是什么意思,就是只有一个变量的,也叫一元回归,如果是多个变量(拟合面),那就叫多元回归(自然不再是简单线性)。

所以,简单线性回归,就是只有一个输入变量(自变量)的预测,就是这一种:y=ax+b,根据x的值,预测出y。你可以说,简单线性回归,就是一个函数。

简单线性回归是一个预测模型(回归模型),是模型就要被训练,只有不断的训练才能得到最佳的预测状态--虽然这是废话,但的确是这样。同样,简单线性回归的目的,是尽可能拟合所有训练样本以达到最佳的预测状态。什么是拟合?比如画一条直线,尽可能地,让各个点(样本)的预测标签接近或重合实际标签,就是拟合。

为了更好的解释这个概念,我画了一个图,图上面解释了相关概念:
简单线性回归-确定特征与标签的关系

从图上可以看到,如果对于每个点的输入特征,得到的预测标签跟这个点的实际标签都能重合的话,那就是最佳的。然而,实际上很可能做不到所有点都落在直线上,那这时候,找出一点最佳的直线,获得最好的拟合效果,就是机器学习要做的事情。
哪一条线有最好的拟合效果

简单线性回归模型,给出了特征与标签的关系:

y = mx + b

x是输入特征,y是预测标签。

为了让这条直线更好的拟合所有的点,就要调整参数m跟b。

m是直线的角度,叫斜率,在机器学习中叫权重。

b叫截距,在机器学习中叫偏差。

所以,使用简单线性回归算法,机器学习通过大量带标签的样本进行训练,最终调整出一个最佳的m跟b值,从而达到最好的拟合效果。

那么,怎么判断拟合效果呢?怎么知道是变好还是变差了?

(2)如何判断拟合效果

为了判断拟合的效果,这里引入一个概念,叫损失计算。

如果点刚好落在直线上,也就是预测标签跟实际标签一样,那损失为0。

而实际上,更多的情况下,损失并不为0,这时要考虑整体损失。

整体损失越小,拟合越好,比如下图所示,可以明显分辨出左线的拟合效果优于右线(当整体损失达到某个值时,就可以认为已经取得很好的预测效果,可以停止训练):
尽量减小损失

上图中,每个点跟预测标签的距离(也就是点到线的红箭头)称为损失。

整体损失的计算可以有很多办法,这里引入一个简单实用的办法:均方误差(MSE)。

均方误差(MSE),就是求出所有点的损失的平方和,再除以样本的个数。你可以参考这个图的解释:
MSE

以上这个图,来源于这个地址:https://developers.google.com/machine-learning/crash-course/descending-into-ml/training-and-loss

基本上,本文的内容与组织方式,都跟这个地址的教程有直接的关系。

以上介绍了简单线性回归的定义,以及损失计算的一个办法即MSE,接下来小程用实例来演示简单线性回归的实现。

(3)简单线性回归示例

这里以python来演示,主要是因为python易于使用。

首先,给定一些散列的点,你可以参考下图的实现,截图中对部分代码做了解释:
创建散列点

执行这一部分代码,可以看到这样的效果:
散列点绘制图

然后,对这些点进行简单线性回归,也就是画一条拟合线,并取得最好的拟合效果,参考下图:
画拟合线

最终执行的效果是这样的:
拟合线效果

好了,回头看一下吧。本文介绍了简单线性回归的定义以及损失计算的一个办法即MSE,最后用python示范了怎么使用简单线性回归算法绘制一条拟合线。简单线性回归,就是一个预测模型,更直接一点,就是一个函数--你可以说预测模型其实就是函数,就是一个算法设计(比如y=ax+b就是一个最核心的东西),它接受训练后的进化(比如不断地调整参数),从而得到最佳的预测状态。


haha

posted on 2019-05-22 15:23 广州小程 阅读(...) 评论(...) 编辑 收藏


推荐阅读
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 非线性门控感知器算法的实现与应用分析 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 深入浅出解读奇异值分解,助你轻松掌握核心概念 ... [详细]
  • 在Java编程中,初始化List集合有多种高效的方法。本文介绍了六种常见的技术,包括使用常规方式、Arrays.asList、Collections.addAll、Java 8的Stream API、双重大括号初始化以及使用List.of。每种方法都有其特定的应用场景和优缺点,开发者可以根据实际需求选择最合适的方式。例如,常规方式通过直接创建ArrayList对象并逐个添加元素,适用于需要动态修改列表的情况;而List.of则提供了一种简洁的不可变列表初始化方式,适合于固定数据集的场景。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 深入解析监督学习的核心概念与应用
    本文深入探讨了监督学习的基本原理及其广泛应用。监督学习作为机器学习的重要分支,通过利用带有标签的训练数据,能够有效构建预测模型。文章详细解析了监督学习的关键概念,如特征选择、模型评估和过拟合问题,并介绍了其在图像识别、自然语言处理等领域的实际应用。 ... [详细]
  • 题目解析给定 n 个人和 n 种书籍,每个人都有一个包含自己喜好的书籍列表。目标是计算出满足以下条件的分配方案数量:1. 每个人都必须获得他们喜欢的书籍;2. 每本书只能分配给一个人。通过使用深度优先搜索算法,可以系统地探索所有可能的分配组合,确保每个分配方案都符合上述条件。该方法能够有效地处理这类组合优化问题,找到所有可行的解。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
author-avatar
手机用户2502877341
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有