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

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

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

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

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

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

为了更好的解释这个概念,我画了一个图,图上面解释了相关概念:

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

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

y = mx + b

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

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

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

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

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

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

(2)如何判断拟合效果

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

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

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

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

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

整体损失的计算可以有很多办法,这里引入一个简单实用的办法:均方误差(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就是一个最核心的东西),它接受训练后的进化(比如不断地调整参数),从而得到最佳的预测状态。


机器学习(2):简单线性回归 | 一元回归 | 损失计算 | MSE的更多相关文章

  1. sklearn机器学习实战-简单线性回归

    记录下学习使用sklearn,将使用sklearn实现机器学习大部分内容 基于scikit-learn机器学习(第2版)这本书,和scikit-learn中文社区 简单线性回归 首先,最简单的线性回归 ...

  2. scikit-learn机器学习(一)简单线性回归

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt ## 设置字符集,防止中文乱码 import ma ...

  3. 机器学习:衡量线性回归法的指标(MSE、RMSE、MAE、R Squared)

    一.MSE.RMSE.MAE 思路:测试数据集中的点,距离模型的平均距离越小,该模型越精确 # 注:使用平均距离,而不是所有测试样本的距离和,因为距离和受样本数量的影响 1)公式: MSE:均方误差 ...

  4. 机器学习与Tensorflow(1)——机器学习基本概念、tensorflow实现简单线性回归

    一.机器学习基本概念 1.训练集和测试集 训练集(training set/data)/训练样例(training examples): 用来进行训练,也就是产生模型或者算法的数据集 测试集(test ...

  5. 机器学习之五 正则化的线性回归-岭回归与Lasso回归

    机器学习之五 正则化的线性回归-岭回归与Lasso回归 注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基 ...

  6. 机器学习:单元线性回归(python简单实现)

    文章简介 使用python简单实现机器学习中单元线性回归算法. 算法目的 该算法核心目的是为了求出假设函数h中多个theta的值,使得代入数据集合中的每个x,求得的h(x)与每个数据集合中的y的差值的 ...

  7. 机器学习——Day 2 简单线性回归

    写在开头 由于某些原因开始了机器学习,为了更好的理解和深入的思考(记录)所以开始写博客. 学习教程来源于github的Avik-Jain的100-Days-Of-MLCode 英文版:https:// ...

  8. Python_sklearn机器学习库学习笔记(一)_一元回归

    一.引入相关库 %matplotlib inline import matplotlib.pyplot as plt from matplotlib.font_manager import FontP ...

  9. 一元回归1_基础(python代码实现)

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

随机推荐

  1. 杭电1863 畅通project

    畅通project Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. SolidEdge 如何绘制剖视图

    如果要创建剖视图,则点击切割平面按钮,然后绘制剖面线,画好之后点击完成   然后点击剖视图按钮,鼠标单击刚才的剖面线,往要的方向拖动,即可生成剖面视图   剖视图有时也需要用到旋转剖视图 如下图所示, ...

  3. Android中View自己定义XML属性具体解释以及R.attr与R.styleable的差别

    为View加入自己定义XML属性 Android中的各种Widget都提供了非常多XML属性,我们能够利用这些XML属性在layout文件里为Widget的属性赋值. 例如以下所看到的: <Te ...

  4. android项目笔记(一)

    1.getInstance:单例模式创建类的实例,getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是s ...

  5. ftk学习记(combox篇)

    [声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 上一篇文章谈到了多窗体,还是依照约定看一下效果是什么样的. 假设大家细心一点.就会发现窗体中的l ...

  6. 【linux驱动分析】之dm9000驱动分析(三):sk_buff结构分析

    [linux驱动分析]之dm9000驱动分析(一):dm9000原理及硬件分析 [linux驱动分析]之dm9000驱动分析(二):定义在板文件里的资源和设备以及几个宏 [linux驱动分析]之dm9 ...

  7. 流媒体开发之开源项目live555---更改server端的帧率大小和码率大小

    -----------------------------qq:1327706646 010101010101010110010101010101010101010author:midu 010101 ...

  8. UVA 10887 Concatenation of Languages 字符串hash

    题目链接:传送门 题意: 给你两个集合A,B,任意组合成新的集合C(去重) 问你最后C集合大小 题解: 暴力 组成的新串hash起来 #include<bits/stdc++.h> usi ...

  9. Java中的常用异常处理方法

    觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 ...

  10. 提升自身的iOS编程水平 (转载)

    阅读博客 在现在这个碎片化阅读流行的年代,博客的风头早已被微博盖过.而我却坚持写作博客,并且大量地阅读同行的iOS开发博客.博客的文章长度通常在3000字左右,许多iOS开发知识都至少需要这样的篇幅才 ...