机器学习--线性回归与梯度算法

北言 北言     2022-10-13     138

关键词:

线性回归(Linear Regression),亦称为直线回归,即用直线表示的回归,与曲线回归相对。若因变量Y对自变量X1、X2…、Xm的回归方程是线性方程,即μy=β01X12X2 +…βmXm,其中β0是常数项,βi是自变量Xi的回归系数,M为任何自然数。这时就称Y对X1、X2、…、Xm的回归为线性回归。

简单回归:

只有一个自变量的线性回归称为简单回归,如下面示例:

X表示某商品的数量,Y表示这些不同数量商品的总价格

x=[0, 1, 2, 3, 4, 5]

y=[0, 17, 45, 55, 85, 99]

二维坐标中绘图如下图:

 

现在当商品数量 X = 6时,估计商品总价是多少?

我们可以很明显的看到,商品总价随商品的数量上升而上升,这是一个典型的线性回归。

因为只有一个自变量X,我们假设线性回归模型: Y = a * X + b

我们需要求出最合适的a,b值,使得直线:Y = a * X + b 与上图的趋势相拟合,这时候才能去预测不同商品数量X下的总价Y。

最小二乘法:

 为了求出最合适的a b ,我们引入最小二乘法。

最小二乘法,亦称最小二乘法估计。由样本观测值估计总体参数的一种常用方法。它用于从n对观测数据(x1,y1),(x2,y2),……,(xn,yn)确定x与y之间对应关系y=f(x)的一种最佳估计,使得观测值与估计值之差(即偏差)的平方和 H为最小。

最小二乘法能尽量消除偶然误差的影响,从而由一组观测数据求出最可靠、最可能出现的结果。

由上图我们可以很明显的看出直线Y = a * X + b过原点,即 b = 0

我们尝试不同的a值 得到的结果如下:  

a = 19 时 H = 154

a = 20 时 H = 85

a = 21 时 H = 126

 图像分别如下:

    

 

 我们可以粗略得出结论 a = 20,b = 0 时,线性模型 Y = 20 * X 与样本数据拟合的比较好。

所以当商品数量 X = 6 时,我们可以粗略估计总价Y = 20 * 6 = 120

多元回归:

大于一个自变量的线性回归叫做多元回归。

上面的例子只是一个自变量,处理起来比较简单,但是若自变量有很多,假设自变量有m个,为 [ x1,x2,x3,x4.....xm ]

这时候我们假设的回归系数(即权重)也需要有m个,即我们假设的线性模型是 Y =  X0 +  X1*W1 + X2*W2 + X3*W3 + ....... + Xm*Wm 

为了计算方便,我们去W0 = 1

这样:Y =  X0*W0 +  X1*W1 + X2*W2 + X3*W3 + ....... + Xm*Wm

写成向量形式:

W = [W0,W1 , W2 ,W3 , .... ,Wm]   

X = [ X0, X1 , X2 , X, .... , Xm]

Y = WT * X (WT为向量W的转置)

观测值与估计值之差(即偏差)的平方和:

为了方便后面计算,我们在H的左边乘上二分之一,即:

上面公式中 n 表示训练样本的数目,m 表示每条训练样本 的特征(自变量)个数,上标表示属于第 j 个 样本,下标表示第 i 个特征(自变量值),表示第 j 个样本总价观测值

现在H是关于W0,W1,W2....Wm的函数,我们需要通过合适的方法求出最适合的W值,才能得出一个比较好的线性回归方程。与简单回归相比,这里我们很难通过观察与尝试不同的w值来求解,我们需要采用最优化算法。

梯度算法:

常见的最优化算法有梯度下降法(Gradient Descent)、牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods)、共轭梯度法(Conjugate Gradient)、 启发式优化方法等,本文详细介绍梯度算法。

明确下我们现在的目标:我们需要通过梯度算法求出---当在H取得最小的情况下,W0 ,W1 ,W2 ,W3 , ....... ,Wm的值,从而写出回归方程。

梯度算法分为梯度上升算法 和 梯度下降算法。梯度下降算法的基本思想是:要找到某函数的最小值,最好的方法是沿着该函数的梯度方向探寻,梯度上升则相反。对于一个有两个未知数x,y的函数f(x,y),梯度表示为:

 

对于Z = f(x,y),使用梯度下降算法的意味着 沿X轴方向移动,沿Y的方向移动,函数f(x,y)必须要在待计算的点上有定义并且可微。

可以通俗理解为:

梯度实际上是函数值变化最快的方向。比如说,你站在一个山上,梯度所指示的方向是高度变化最快的方向。你沿着这个方向走,能最快的改变(增加或是减小)你所在位置的高度,但是如果你乱走,可能走半天所在位置高度也没有变化多少。也就是说,如果你一直沿着梯度走,你就能最快的到达山的某个顶峰或低谷。所以实际上,梯度算法是用来搜索局部极小值或极大值的,它是实际应用中一种非常高效,高速且可靠的方法。

用梯度下降法找出最小H

我们前面看到:

H是关于W = [W0 ,W1 ,W2 ,W3 , ....... ,Wm]的函数,H的梯度如下:

这个时候对于每一个Wi的梯度:

 

 

 我们假设每次沿着梯度方向更新的步长为 α,所以W的值更新公式可写为:

 所以梯度下降算法的伪代码如下:

每个回归系数(即每个W值)的每个值都为1

重复R次:

  计算整个数据集的梯度

     使用 更新回归系数W

实例:

 用梯度下降 算法求下面商品数据的线性回归方程

我们假设线性回归模型为总价Y = a + b * X1 + c * X(X1 X2 分别表示商品1,2的数量)

我们需要求出回归系数W = [ a, b, c]

梯度下降算法如下:

 1 import numpy as np
 2 
 3 def grad_desc(train_data, train_labels):
 4     """梯度下降"""
 5     data_mat = np.matrix(train_data)
 6     label_mat = np.matrix(train_labels).transpose()
 7     n = np.shape(data_mat)[1]
 8     # 步长
 9     alpha = 0.001
10     # 最大循环次数
11     max_cycles = 100
12     # 初始化回归系数weights
13     weights = np.ones((n, 1))
14     for index in range(max_cycles):
15         h = data_mat * weights-label_mat
16         weights = weights - alpha * data_mat.transpose() * h
17         # 返回压平的系数数组
18     return np.asarray(weights).flatten()

我们用上面算法得到的回归系数为

[ 1.7218815 4.24881047 5.28838946]
 
随机梯度算法:
 
上述梯度算法中,循环R = 100次,每一次更新回归系数都需要遍历整个数据集,如果数据样本很大,那么计算时间复杂度将会非常高。
所以一般每次使用一个样本点来更新回归系数,称为随机梯度算法。
随机梯度下降算法伪代码如下:
所有回归系数初始化为1
  重复R次:
    循环每一个样本:
      计算该样本的梯度

         使用 更新回归系数W

 修改后的算法如下:

 1 import numpy as np
 2 
 3 def advanced_random_grad_desc(train_data, train_labels):
 4     """随机梯度下降改进"""
 5     data_mat = np.asarray(train_data)
 6     label_mat = np.asarray(train_labels)
 7     m, n = np.shape(data_mat)
 8     # 步长
 9     alpha = 0.001
10     # 初始化回归系数weights
11     weights = np.ones(n)
12     max_cycles = 500
13     for j in range(max_cycles):
14         data_index = list(range(m))
15         for i in range(m):
16             random_index = int(np.random.uniform(0, len(data_index)))
17             h = sum(data_mat[random_index] * weights)-label_mat[random_index]
18             weights = weights - alpha * h * data_mat[random_index]
19             del data_index[random_index]
20     return weights

计算得到的回归系数为:

[ 1.27137416 4.31393524 5.2757683 ]

 我们可以得到线性回归方程为:

Y = 1.27 + 4.31 * X1 + 5.28 * X2

写在后面的话:

本文的完整代码已上传:https://gitee.com/beiyan/machine_learning/tree/master/gradient

 随机梯度下降(上升)算法使用非常广泛,效果也非常好,后续文章将使用梯度算法来解决一些问题。不例外,梯度算法也是有缺点的,如靠近极小值时收敛速度减慢、直线搜索时可能会产生一些问题、可能会“之字形”地下降等,另外下降或上升步长的选择也会影响最后得到的回归系数,我们可以通过改变一些参数来测试回归的效果。

机器学习100天(十四):014梯度下降算法求解线性回归

机器学习100天,今天讲的是:使用梯度下降算法求解线性回归问题。一、梯度下降更新公式之前我们介绍了正规方程法直接求解线性回归问题,但是梯度下降算法在机器学习中更为常用,因为面对复杂问题时,梯度下降算法能够... 查看详情

机器学习100天(十四):014梯度下降算法求解线性回归

机器学习100天,今天讲的是:使用梯度下降算法求解线性回归问题。一、梯度下降更新公式之前我们介绍了正规方程法直接求解线性回归问题,但是梯度下降算法在机器学习中更为常用,因为面对复杂问题时,梯度下降算法能够... 查看详情

吴恩达机器学习学习笔记——2.7第一个学习算法=线性回归+梯度下降

梯度下降算法:              线性回归模型:      线性假设:                     平方差成本函数:将各个公式代入,对θ0、θ1分别求偏导得:再将偏导数代入梯度下降算法... 查看详情

机器学习算法(优化)之一:梯度下降算法随机梯度下降(应用于线性回归logistic回归等等)

本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归、Logistic回归、矩阵分解推荐算法等ML中。梯度下降算法基本公式常见的符号说明和损失函数X :所有样本的特征向量组成的... 查看详情

机器学习模型和算法(代码片段)

文章目录python简介python基本语法监督学习--回归模型线性回归模型一元线性回归线性回归最小二乘代码实现多元线性回归梯度下降法和最小二乘法相比线性回归梯度下降代码实现非线性回归python简介略python基本语法文件开头加上#... 查看详情

机器学习算法

 机器学习笔记03:Normalequation与梯度下降的比较机器学习笔记02:多元线性回归、梯度下降和Normalequation  查看详情

正规方程,梯度下降,岭回归——机器学习(代码片段)

线性回归一.介绍1.1线性回归API介绍——LinearRegression二.线性回归的损失和优化2.1全梯度下降算法(FG)2.2随机梯度下降算法(SG)2.3小批量梯度下降算法(mini-batch)2.4随机平均梯度下降算法(SAG)三... 查看详情

机器学习算法概述第一章——线性回归

一、机器学习是什么  机器学习是人类用数学的语言通过大量的数据训练"教会"计算机做出一系列的行为。二、机器学习的主要算法  ①线性回归算法    衍生的:正则化   ②逻辑回归算法  ③KNN算法    ... 查看详情

ng机器学习视频笔记——线性回归代价函数梯度下降基础

ng机器学习视频笔记(一)——线性回归、代价函数、梯度下降基础 (转载请附上本文链接——linhxx) 一、线性回归        线性回归是监督学习中的重要算法,其主要目的在于用一个函数表... 查看详情

机器学习梯度下降法(超详解)

...比较和进一步优化5.1算法比较5.2梯度下降优化算法前言在机器学习】线性回归的损失和优化中介绍了最基本的梯度下降 查看详情

机器学习实战之logistic回归

...2.logistic回归分类函数  一、概述  分类技术是机器学习和数据挖掘应用中的重要组成部分。在数据科学中,大约70%的问题属于分类问题。解决分类问题的算法也有很多种,比如 查看详情

机器学习入门:线性回归及梯度下降

机器学习入门:线性回归及梯度下降  本文会讲到:   (1)线性回归的定义 (2)单变量线性回归 (3)costfunction:评价线性回归是否拟合训练集的方法 (4)梯度下降:解决线性回归的方法之一 (5)featurescali... 查看详情

机器学习线性回归的损失和优化(代码片段)

线性回归的损失和优化线性回归的损失和优化1.损失函数2.优化算法2.1正规方程2.1.1什么是正规方程2.1.2正规方程求解举例2.1.3正规方程的推导推导方式一推导方式二2.2梯度下降(GradientDescent)2.2.1什么是梯度下降2.2.2梯度的概念2.2.3梯... 查看详情

机器学习回归算法-精讲(代码片段)

回归算法回归算法线性回归和非线性回归:线性回归线性回归方程:损失函数:损失函数推理过程:公式转换:误差公式:转化为`θ`求解:似然函数求`θ`:对数似然:损失函数࿱... 查看详情

机器学习:线性回归——理论与代码实现(基于正规方程与梯度下降)(代码片段)

一线性模型给定由n个属性描述的列向量(f(mathbfx)=(x^(1);x^(2);...;x^(n))),其中(x^(j))是( extbfx)在第(j)个属性的取值。线性模型即为通过对属性进行线性组合的函数,即[f(mathbfx)=w_0+w_1x^(1)+...+w_nx^(n)]写成向量形式如下:[f( extbf 查看详情

机器学习——05线性回归算法

1.本节重点知识点用自己的话总结出来,可以配上图片,以及说明该知识点的重要性线性回归就是对大量的观测数据进行处理,从而得到比较符合事物内部规律的数学表达式。也就是说寻找到数据与数据之间的规律所在,从而就... 查看详情

机器学习线性回归优化损失函数(代码片段)

目录1损失函数2优化算法2.1正规方程2.1.1什么是正规方程2.1.2正规方程求解举例2.1.3正规方程的推导2.2梯度下降2.2.1什么是梯度下降2.2.2梯度的概念2.2.3梯度下降举例2.2.4梯度下降公式3梯度下降和正规方程的对比3.1两种方法对比3.2算... 查看详情

机器学习入门:线性回归及梯度下降

http://blog.csdn.net/xiazdong/article/details/7950084本文会讲到: (1)线性回归的定义(2)单变量线性回归(3)costfunction:评价线性回归是否拟合训练集的方法(4)梯度下降:解决线性回归的方法之一(5)featurescaling:加快梯度下降执行速度的方... 查看详情