机器学习入门(七):线性回归原理,损失函数和正规方程

简介: 机器学习入门(七):线性回归原理,损失函数和正规方程

🍔 线性回归原理

学习目标

😀 掌握线性回归模型公式含义

😀 掌握 LinearRegression API 的使用

1. 线性回归应用场景

  • 房价预测
  • 销售额预测
  • 贷款额度预测

话不多说,直接上图,浅显易懂!🥹

2. 什么是线性回归

2.1 定义与公式

线性回归(Linear regression)是利用 回归方程(函数)一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。

特点:只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归。

通用公式 h(w)=w{1}x{1}+w{2}x{2}+w{3}x{3}+...+b=w^Tx+b,

其中w, x可以理解为矩阵:w= \begin{pmatrix} b \ w{1} \ w{2} \ \vdots \end{pmatrix}, x= \begin{pmatrix} 1 \ x{1} \ x{2}\\vdots \end{pmatrix}

线性回归用矩阵表示举例:

\begin{cases}1 \times x{1} + x{2} = 2 \ 0 \times x{1} + x{2} = 2 \ 2 \times x{1} + x{2} = 3 \end{cases}

写成矩阵形式🥹 :

那么怎么理解呢?我们来看几个例子💯 :

  • 期末成绩:0.7×考试成绩+0.3×平时成绩
  • 房子价格 = 0.02×中心区域的距离 + 0.04×城市一氧化氮浓度 + (-0.12×自住房平均房价) + 0.254×城镇犯罪率

上面两个例子, 我们看到特征值与目标值之间建立了一个关系,这个关系可以理解为线性模型

2.2 线性回归的特征与目标的关系分析

线性回归当中主要有两种模型, 一种是线性关系,另一种是非线性关系。 在这里我们只能画一个平面更好去理解,所以都用单个特征或两个特征举例子。

线性关系 :

  • 单变量线性关系🥹:

  • 多变量线性关系🥹:

注释:单特征与目标值的关系呈直线关系,或者两个特征与目标值呈现平面的关系

更高维度的我们不用自己去想,记住这种关系即可

  • 非线性关系🥹:

注释:为什么会这样的关系呢?原因是什么?

如果是非线性关系,那么回归方程可以理解为:

w_1x_1+w_2x_2^2+w_3x_3^2

3. 线性回归API初步使用

3.1 线性回归API

sklearn中, 线性回归的API在linear_model模块中

sklearn.linear_model.LinearRegression()

  • LinearRegression.coef_:回归系数

3.2 举例

代码实现💯 :

from sklearn.linear_model import LinearRegression
# 加载数据
x = [[80, 86],
     [82, 80],
     [85, 78],
     [90, 90],
     [86, 82],
     [82, 90],
     [78, 80],
     [92, 94]]
y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]
# 实例化API
estimator = LinearRegression()
# 使用fit方法进行训练
estimator.fit(x,y)
print(estimator.coef_)
# 对未知样本预测
estimator.predict([[100, 80]])

4. 小结

🍬  线性回归公式 h(w)=w{1}x{1}+w{2}x{2}+w{3}x{3}+...+b=w^Tx+b,h(w) 为目标值

🍬  线性回归公式中,w、b 代表模型参数

🍬  LinearRegression.fit 表示模型训练函数

🍬  LinearRegression.predict 表示模型预测函数

线性回归模型的目标:通过学习得到线性方程的这两个权值,如在y=kx+b中,得到k和b两个权值,并用这个方程解释变量和目标变量之间的关系。

🍔 损失函数和正规方程

学习目标

😀 掌握损失函数的概念与作用

😀 了解正规方程

😀 掌握正规方程的使用

在学习损失函数之前,我们先熟悉一下数学导数的概念🍭

1. 数学导数

导数(Derivative),也叫导函数值。又名微商,是微积分中的重要基础概念。

  1. 当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x0)或df(x0)/dx。
  2. 导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。
  3. 如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率
  4. 导数的本质是通过极限的概念对函数进行局部的线性逼近。例如在运动学中,物体的位移对于时间的导数就是物体的瞬时速度
  5. 不是所有的函数都有导数,一个函数也不一定在所有的点上都有导数。
  • 若某函数在某一点导数存在,则称其在这一点可导,否则称为不可导
  • 可导的函数一定连续;不连续的函数一定不可导
  • 对于可导的函数f(x),x↦f'(x)也是一个函数,称作f(x)的导函数(简称导数)。寻找已知的函数在某点的导数或其导函数的过程称为求导

2. 损失函数的概念

损失函数的概念💘 :

  • 用来衡量机器学习模型性能的函数
  • 损失函数可以计算预测值与真实值之间的误差(用一个实数来表示),误差越小说明模型性能越好

损失函数的作用:

  • 确定损失函数之后, 我们通过求解损失函数的极小值来确定机器学习模型中的参数

先看下面的例子,有如下一组训练数据:

X = [0.0, 1.0, 2.0, 3.0]

y = [0.0, 2.5, 3.3, 6.2]

很显然,上面的数据中,X与y的关系可以近似的表示为一元线性关系, 即 y = WX

注意:当前例子中, y 和 X均为已知,由训练数据给出,W为未知

训练线性回归模型模型的过程实际上就是要找到一个 合适的W ,那么什么才是合适的W,我们先随机的给出几个W看下效果

🐻 当W = 5.0时如下图所示:

从上图中可以观察到模型预测值与真实值不同,我们希望通过一个数学表达式来表示这个差值:

  • 很自然的能想到,将真实值与预测值相减并查看结果是否等于零,不为零意味着预测有误差
  • 误差的大小是坐标系中两点之间的距离

我们将距离定义为: distance = \hat{y}-y

🐻 根据上面的公式, 我们可以计算出当W=5.0时预测的误差分别为:

d_0 = 0-0 = 0

d_1 = 5-2.5 = 2.5

d_2 = 10-3.3 = 6.7

d_3 = 15-6.2 = 8.8

在前面的概念中提到, 损失函数的计算结果应该为一个具体的实数,因此我们将上面所有点的预测误差相加得到:

cost(w)=d_0+d_1+d_2+d_3

cost(5) = 0+2.5+6.7+8.8 = 18

从上面的结果中发现,误差有些大,我们的模型应该还有调整的空间。

🐻 尝试将W减小,令W=0.5

根据公式 distance = \hat{y}-y, 我们可以计算出当W=0.5时预测的误差分别为:

d_0 = 0-0 = 0

d_1 = 0.5-2.5 = -2

d_2 = 1-3.3 = -2.3

d_3 = 1.5-6.2 = -4.7

cost(w)=d_0+d_1+d_2+d_3

cost(0.5) = 0-2-2.5-4.7 = -9

🐻 再尝试W=2:

根据公式 distance = \hat{y}-y, 我们可以计算出当W=2时预测的误差分别为:

d_0 = 0-0 = 0

d_1 = 2-2.5 = -0.5

d_2 = 4-3.3 = 0.7

d_3 = 6-6.2 = -0.2

cost(w)=d_0+d_1+d_2+d_3

cost(2) = 0-0.5+0.7-0.2 = 0

我们前面提到,利用损失函数可以确定损失的大小,损失越小的模型效果越好,通过对比发现

cost(5) = 0+2.5+6.7+8.8 = 18

cost(0.5) = 0-2-2.5-4.7 = -9

cost(2) = 0-0.5+0.7-0.2 = 0

当前的计算方法中

  • 当W=0.5的cost的值最小,但从图像中可以看出当W=2时,模型拟合的更好
  • 当W=2时计算出的误差为0,但实际情况除了d0之外其余点均存在预测误差

综上所述,我们用来衡量回归损失的时候, 不能简单的将每个点的预测误差相加

3. 平方损失

回归问题的损失函数通常用下面的函数表示💘 :

  1. yi 为第i个训练样本的真实值
  2. h(xi) 为第i个训练样本特征值组合预测函数又称最小二乘法

我们的目标是: 找到该损失函数最小时对应的 w、b.

  • 接下来我们开始对平方损失求解最优解

4. 正规方程

那么,该公式是得出的?

话不多说,直接上代码演示💯 :

import numpy as np
from sklearn.linear_model import LinearRegression
if __name__ == '__main__':
    
    # 特征值
    x = np.mat([[80, 86],
                [82, 80],
                [85, 78],
                [90, 90],
                [86, 82],
                [82, 90],
                [78, 80],
                [92, 94]])
    # 目标值
    y = np.mat([84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]).transpose()
    # 给特征值增加一列1
    ones_array = np.ones([len(x), 1])
    x = np.hstack([ones_array, x])
    # 使用正规方程公式计算 w、b
    w = (x.transpose() * x) ** -1 * x.transpose() * y
    print('[%.1f %.1f %.1f]' % (w[0][0], w[1][0], w[2][0]))
    # 使用 LinearRegression 求解
    estimator = LinearRegression(fit_intercept=True)
    estimator.fit(x, y)
    print(estimator.coef_[0])
    # 输出结果
    # [0.0 0.3 0.7]
    # [0.  0.3 0.7]

5. 小结

🍬 损失函数在训练阶段能够指导模型的优化方向,在测试阶段能够用于评估模型的优劣。

🍬 线性回归使用平方损失

🍬 正规方程是线性回归的一种优化方法

相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
深入了解机器学习:从入门到应用
【10月更文挑战第6天】深入了解机器学习:从入门到应用
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
37 2
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
33 1
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
24 1
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
62 2
|
2月前
|
机器学习/深度学习 人工智能 数据挖掘
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第6天】在人工智能领域,机器学习已成为核心技术。本文指导初学者使用Python与Scikit-learn入门机器学习,涵盖基本概念、环境搭建、数据处理、模型训练及评估等环节。Python因简洁性及其生态系统成为首选语言,而Scikit-learn则提供了丰富工具,简化数据挖掘与分析流程。通过实践示例,帮助读者快速掌握基础知识,为进一步深入研究奠定坚实基础。
30 4
|
1月前
|
机器学习/深度学习 数据采集 算法
探索机器学习中的线性回归
【10月更文挑战第25天】本文将深入浅出地介绍线性回归模型,一个在机器学习领域中广泛使用的预测工具。我们将从理论出发,逐步引入代码示例,展示如何利用Python和scikit-learn库实现一个简单的线性回归模型。文章不仅适合初学者理解线性回归的基础概念,同时也为有一定基础的读者提供实践指导。
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
547 1
|
2月前
|
机器学习/深度学习 算法 知识图谱
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
|
2月前
|
机器学习/深度学习 程序员
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算