梯度下降法求解线性回归(代码片段)

codancer codancer     2023-04-24     158

关键词:

梯度下降法

梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点;这个过程则被称为梯度上升法。

梯度下降的形象解释

现在有一个山谷,你想要到达山谷的最低端,你此时在A点,那么此时就可以利用梯度下降来找到最低点。你每次以你当前的方向为基准。选择一个最陡峭的方向,朝着山下降的方向向下走,每次走一段距离,重复执行该步骤,你总能够到达山顶。

技术图片

## 梯度下降算法原理

原理介绍:

### 微分

微分其实就可以看作是函数图像在某点的斜率。有单变量微分和多变量微分

$fracd(x^2)x=2x$
$fracpartialpartial x (x^2y)=2xy$
$fracpartialpartial y(x^2y)=x^2$

梯度

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

梯度是一个向量。对于某个点的梯度其实就是对每个变量求偏导构成的向量。

$J(Theta)=1+2Theta_1-3Theta_2+4Theta_3$
$Delta J(Theta)= = <2,-3,4>$

梯度下降算法的数学原理

$Theta_1$=$Theta_0$ -$alpha Delta J(Theta)$

公式解释:(Theta_0) 表示当前所在的位置,(Theta_1)表示下一个位置,(alpha)表示步长,(J)函数就是当前的梯度。减号表示步长的反向,即下坡。

在机器学习中(alpha)表示学习率或者步长,我们需要通过(alpha)来控制每一步所走的距离,既不能太快,也不能太慢。

梯度下降应用实例

现在我们有一个单变量的函数:

$J(Theta)=Theta^2$

对函数求微分:

$J‘(Theta)=2Theta$

设定(Theta_0=1),学习率(alpha=0.4)

根据梯度下降的公式

$Theta_1=Theta_0-alpha*J‘(Theta)$

我们不断迭代:

$Theta_0=1$
$Theta_1=0.2$
$Theta_2=0.04$
$Theta_3=0.008$
$Theta_4=0.0016$

经过(4)次迭代,最终结果也接近了函数的最小值。

多变量函数的求解过程和单变量的求解如出一辙。

梯度下降求解线性回归

房屋价格与面积(数据在下面表格中)

序号 面积 价格
1 150 6450
2 200 7450
3 250 8450
4 300 9450
5 350 11450
6 400 15450
7 600 18450

使用梯度下降求解线性回归(求(Theta_0,Theta_1)

$h_Theta(x)=Theta_0+Theta_1x$

我们的目的是使得我们的估计值和实际值相差最小,因此我们定义一个代价函数,这里我们使用均方误差代价函数:

$J(Theta)=frac12msum_i=1^m(h_Theta(x_i)-y_i)^2$

即:

$J(Theta)=frac12msum_i=1^m(Theta_0+Theta_1x_i-y_i)^2$

而其中(h_Theta(x)=Theta_0+Theta_1x)
让函数分别对(Theta_0,Theta_1)求偏导。

$Delta J(Theta)= $

其中:

$fracpartial Jpartial Theta_0=frac1msum_i=1^m(h_Theta(x_i)-y_i)$
$fracpartial Jpartial Theta_1=frac1msum_i=1^m(h_Theta(x_i)-y_i)x_i$

接下来就是代码时间了

import math
m=7 #数据集大小
Theta0=300
Theta1=100
#初始坐标

alpha=0.000000001#学习率
area=[150,200,250,300,350,400,600];#数据集
price=[6450,7450,8450,9450,11450,15450,18450];
def gradientx(Theta0,Theta1):#对Theta0的偏导
    ans=0
    for i in range(0,7):
        ans=ans+Theta0+Theta1*area[i]-price[i]
    ans=ans/m
    return ans
def gradienty(Theta0,Theta1):#对Theta1的偏导
    ans=0
    for i in range(0,7):
        ans=ans+(Theta0+Theta1*area[i]-price[i])*area[i]
    ans=ans/m
    return ans


nowTheta0 = Theta0-alpha*gradientx(Theta0, Theta1)#下一个点的坐标
nowTheta1 = Theta1-alpha*gradienty(Theta0, Theta1)
#print(nowTheta0,nowTheta1)
while math.fabs(nowTheta1-Theta1)>0.000000001:#梯度下降
    nowa = nowTheta0-alpha*gradientx(nowTheta0,nowTheta1)
    nowb = nowTheta1-alpha*gradienty(nowTheta0, nowTheta1)
    nowTheta0=nowa
    nowTheta1=nowb
    nowa = Theta0-alpha*gradientx(Theta0, Theta1)
    nowb = Theta1-alpha*gradienty(Theta0, Theta1)
    Theta0=nowa
    Theta1=nowb
print(nowTheta0,nowTheta1 )
#299.85496413867725 32.638872688242515

绘图

import numpy as np
import matplotlib.pyplot as plt

from matplotlib import pyplot
area=[150,200,250,300,350,400,600]#数据集
price=[6450,7450,8450,9450,11450,15450,18450]
pyplot.scatter(area,price)
x=np.arange(100,700,100)
y=32.37648991481203*x+299.85496413867725
pyplot.plot(x,y)
pyplot.xlabel('area')
pyplot.ylabel('price')
pyplot.show()

结果:
技术图片

我们可以看到梯度下降求解出的线性回归很好的与结果吻合了。

拟合过程(每次的(Theta_0)(Theta_1)):
技术图片

机器学习之回归模型-梯度下降法求解线性回归(代码片段)

机器学习之回归模型-梯度下降法求解线性回归线性回归是一种线性模型,它假设输入变量x与单个输出变量y之间存在线性关系。具体的说,就是利用线性回归模型,从一组输入变量的线性组合中,计算出输出变量y... 查看详情

tensorflow实现svmiris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)(代码片段)

iris二分类 #LinearSupportVectorMachine:SoftMargin#----------------------------------##ThisfunctionshowshowtouseTensorFlowto#createasoftmarginSVM##Wewillusetheirisdata,specifically:#x1=SepalLength#x2 查看详情

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

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

梯度下降求解线性回归(代码片段)

学习才能消去恐惧叭Part1:BasicFunction%完成warmUpExercise.mfprintf(‘RunningwarmUpExercise...\n‘);fprintf(‘5x5IdentityMatrix:\n‘);warmUpExercise() warmUpExercise返回一个n为5的单位矩阵functionA=warmUpExercise()A=eye(5); 查看详情

一元线性回归-梯度下降法-房价预测(代码片段)

数据32.502345269453031,31.7070058465699253.426804033275019,68.7775959816389161.530358025636438,62.56238229794580347.475639634786098,71.54663223356777759.813207869512318,87.23092513368739355.142188413943 查看详情

02_有监督学习--简单线性回归模型(梯度下降法代码实现)(代码片段)

有监督学习--简单线性回归模型(梯度下降法代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.定义模型的超参数4.定义核心梯度下降模型函数5.测试:运行梯度下降算法,计算最优的w和b6.画出拟合曲线7.附录-测试数据... 查看详情

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

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

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

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

对数几率回归法(梯度下降法,随机梯度下降与牛顿法)与线性判别法(lda)

...其中在对数几率回归法中,求解最优权重W时,分别使用梯度下降法,随机梯度下降与牛顿法。代码如下:1#!/usr/bin/envpython2#-*-coding:utf-8-*-3#@Date:2017-05-0915:03:504#@Author:whb([email protected])5#@Lin 查看详情

机器学习:随机梯度下降法(线性回归中的应用)(代码片段)

一、随机梯度下降法基础 #梯度中的每一项计算:,要计算所有样本(共m个); #批量梯度下降法的思路:计算损失函数的梯度,找到优化损失函数的最近距离,或者称最直接的方向;  #批量梯度下降法的梯度计算:... 查看详情

机器学习入门之单变量线性回归(上)——梯度下降法(代码片段)

 在统计学中,线性回归(英语:linearregression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一... 查看详情

梯度下降法(代码片段)

在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练。其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点。下面我们以线性回归算法来对三种梯度下降法进行比较。一般... 查看详情

机器学习之逻辑回归以及梯度下降法求解(代码片段)

文章目录前言梯度下降法梯度梯度法逻辑回归思路公式推导代码实现西瓜数据集手写梯度下降法求解二分类逻辑回归模型可爱的sklearn求解参考前言逻辑回归,其实不是回归任务,而是分类任务,逻辑回归模型对二分... 查看详情

机器学习实战之logistic回归

...基于对数似然损失函数    4.2基于极大似然估计二、梯度下降法  1.梯度  2.梯度下降的直观解释  3.梯度下降的详细算法    3.1梯度下降法的代数方式描述    3.2梯度下降法的矩阵方式描述  4.梯度下降的... 查看详情

矩阵法求解线性回归

 由于梯度下降算法需要多次迭代,并且需要指定下降速率,如果下降速度过快则可能错过最优点,如果过慢则需要迭代多次,因此还可选用矩阵法求解。首先给出一些基本数学知识:矩阵的迹trace为矩阵主对角线元素之和:... 查看详情

python与r语言手推logistic回归(梯度下降法/牛顿法)(代码片段)

...)作为目标函数,利用最优化方法(牛顿法、梯度下降法)进行求解 查看详情

看代码理解批量梯度下降求解线下回归问题

layout:posttitle:梯度下降算法subtitle:批量梯度下降求解线下回归问题date:2017-12-01author:Felixcatalog:truetags:-机器学习-优化算法---//##############################################################//#//#批量梯度下降算法实例:求解线性回归问题//#//### 查看详情

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

...程求解举例2.1.3正规方程的推导推导方式一推导方式二2.2梯度下降(GradientDescent)2.2.1什么是梯度下降2.2.2梯度的概念2.2.3梯度下降举例2.2.4梯度下降(GradientDescent)公式3.梯度下降和正规方程的对比3 查看详情