数据挖掘之梯度下降法思想及其实现

看这玩意儿,解决了高数没曾理解的一些东西的概念。数学不好,算法难搞???
一个算法的实现,离不开数学的支撑。
本文参考:https://www.jianshu.com/p/c7e642877b0e
(形象,清楚)

本文讲解内容:

  • 1.导数 偏导数,方向导数,梯度的数学概念
  • 2.梯度下降法思维原理。
  • 3.运用梯度下降法,拟合直线实例

数学:

那么首先引入高数一些东西的概念:

1.导数:

  • 是描述函数在某一点的变化率的

2.偏导数

  • 描述函数在某点在坐标轴的正方向的变化率的。
  • 导数与偏导数区别:导数用于一元函数中,偏导数用于多元函数。
  • 导数与偏导数关系:偏导数也是导数。导数囊括了:偏导数,方向导数。

3.方向导数与偏导数:

  • 方向导数:也是导数,其意义是描述函数在某点任意方向变化率。
  • 方向导数与偏导数区别:偏导数仅仅描述坐标轴的正方向,而方向导数描述任意方向。
  • 可以理解:偏导数是方向导数的一种,他是含于方向导数。

4.导数的意义:

  • 函数图像中,函数图像在某点的切线的斜率。

5.微分的概念及意义:

  • 概念:表示如:z=f(x,y)函数对x,y都要进行求导。 说白了就是求导。
  • 意义:
    函数的变化率。(因为微分是对函数中的自变量,都进行求导,所以像是结合,对应的就是函数变化率)

6.梯度的概念 :

  • 问题:函数在空间的某一点上,沿着这个点的哪个方向,函数具有最大的变化率?
    为了解决这个问题,引入了梯度。

  • 梯度是向量,具有方向。 梯度表示了函数往这个方向有最大变化率,他的方向就是函数变化最快的方向。
    他的方向就是最大方向导数的方向, 梯度的值,就是最大方向导数的值。

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

7.梯度下降法
维基百科给出:

  • 梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下法。
    要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点;这个过程则被称为梯度上升法。
  • 梯度下降方法基于以下的观察:如果实值函数 F(x)在a处可微且有定义,那么F(x)函数在a点沿着梯度方向的负方向—△ F(a)下降最快。(ps:△F(a)为梯度函数,—△F(a)为负方向的梯度函数,即梯度下降最快的方向。)
  • 梯度下降计算方法:如果 b=a-α△F(x),那么F(b)<F(a)
  • 通俗的讲:梯度下降是一个最优化算法,他就是沿着梯度下降的方向来求出一个函数的极小值

数学中梯度的下降计算实例

1.单变量函数梯度下降:

引入一个单变量的函数:
在这里插入图片描述
函数的微分:

在这里插入图片描述
初始化,开始的起点:
在这里插入图片描述
学习率(步长):控制每次行走的步伐的长度,因为梯度是一个基数,通过前面加一个常量,来控制每次行走的长度。
在这里插入图片描述
计算梯度下降(这里迭代四次):

在这里插入图片描述

2.多变量函数的梯度下降计算实例

引入一个二元函数:
在这里插入图片描述
我们初始起点:
在这里插入图片描述
学习率:
在这里插入图片描述
这个二元函数的梯度,
(不要惊讶哦,梯度就是对每个自变量都求导数,这里是向量表示出来的哦)
(原函数恐怕你忘记了吧??,请往上翻)
在这里插入图片描述
迭代计算梯度:
在这里插入图片描述

以上就都是数学方面的内容啦

#分割线#分割线#分割线#分割线#分割线#分割线#分割线#分割线#分割线#分割线#分割线#分


python

梯度下降算法的实现–线性回归的应用

------目标:用梯度算法实现 拟合这条直线。

在这里插入图片描述
分析:
.回顾一下,梯度下降算法,一个最优算法。为什么拟合这条直线和这个相关?
因为,我们要找出的这条直线,一定是要这些点离这条直线的平均距离最小。
也就是运用梯度下降法,求出这个能表示 每个点到目标函数的距离的 函数(代价函数)的最小值,值越小,说明拟合程度越高。当然最小值是0.此时距离最近,拟合程度越高。就是最贴近的直线。

首先给出代价函数(每个点到这条直线的距离的函数):

在这里插入图片描述
参数解释:

  1. m表示点的个数,要把每个点到目标直线的距离都要求出来。
  2. h(θ)这个是预测函数,我们最终要求的那个直线的函数。
  3. y表示每个点的y坐标值。

这是线性回归,看图预测,我们要求的函数形式为:h(θ)=θ0+θ1(x) 也就是 y=b+ax

步骤:
1.求出代价函数的偏导。算出最小距离,距离越小,那么拟合程度越高。
2.梯度下降计算出θ0和θ1 。
梯度下降计算公式:θ1=θ0-α△J(θ)

代码实现:

"""



一.说明一些概念的理解:
1.导数:
是描述函数在某一点的变化率的。
2.偏导数:
描述函数在某点在坐标轴的正方向的变化率的。
导数与偏导数区别:导数用于一元函数中,偏导数用于多元函数。
导数与偏导数关系:偏导数也是导数。导数囊括了:偏导数,方向导数。
3.方向导数与偏导数:
方向导数:也是导数,其意义是描述函数在某点任意方向变化率。
方向导数与偏导数区别:偏导数仅仅描述坐标轴的正方向,而方向导数描述任意方向。
可以理解:偏导数是方向导数的一种,他是含于方向导数。
4.导数的意义:
函数图像中,函数图像在某点的切线的斜率。
5.微分的概念及意义:
概念:表示如:z=f(x,y)函数对x,y都要进行求导。 说白了就是求导。
意义:
函数的变化率。(因为微分是对函数中的自变量,都进行求导,所以像是结合,对应的就是函数变化率)
1.梯度的概念 :
问题:函数在空间的某一点上,沿着这个点的哪个方向,函数具有最大的变化率?
为了解决这个问题,引入了梯度。
梯度是向量,具有方向。
梯度表示了函数往这个方向有最大变化率,他的方向就是函数变化最快的方向。
就是他的方向就是最大方向导数的方向,
梯度的值,就是最大方向导数的值。
二。数学知识:
计算两点之间的距离

"""

#这是出发起点
theta = [0,0,] # [b,a] y=b+ax
#所有的点,用向量表示,二维数据
data=[
    [1,1],
    [2,2],
    [3,3],
    [4,4]
]

m = len(data)
#学习率,就是控制步伐的,以免错过最佳点。
alpha = 0.001
#梯度下降 迭代次数
iterm = 50000

def cost(theta,data):
    #总的距离
    sum = 0
    #迭代data中的每一个点,计算出起点到每个点之间的距离。
    for i in data:
        #梯度函数,来求距离的最小值。
        sum += (theta[0]+theta[1]*i[0]-i[1])**2
    print(sum)

def gd(theta,data,alpha,iterm):
    for _ in range(iterm):
        cost(theta,data)
        temp_theta = theta
        for i in data:
            #梯度下降的计算,得到新的点。
            temp_theta[0] = theta[0]- ((theta[0]+theta[1]*i[0]-i[1])*alpha/m)
            temp_theta[1] = theta[1] - ((theta[0]+theta[1]*i[0]-i[1])*i[0]*alpha/m)
            #沿着梯度反向,得到新的点。
            theta = temp_theta
    print(theta)

if __name__ == "__main__":
    gd(theta,data,alpha,iterm)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值