当前位置:首页 > 知识知道 > 详情

18.75开根号等于多少(1518.75开根号)

2023-04-20 09:40:36 阅读(38) 大连信息网

18.75开根号等于多少(1518.75开根号)-第1张图片-昕阳网

梯度下降是非常常用的优化算法。作为机器学习的基础知识,这是一个必须要掌握的算法。借助本文,让我们来一起详细了解一下这个算法。

前言

本文的代码可以到我的Github上获取:

https://github.com/paulQuei/gradient_descent

本文的算法示例通过Python语言实现,在实现中使用到了numpy和matplotlib。如果你不熟悉这两个工具,请自行在网上搜索教程。

关于优化

大多数学习算法都涉及某种形式的优化。优化指的是改变x以最小化或者最大化某个函数的任务。

我们通常以最小化指代大多数最优化问题。最大化可经由最小化来实现。

我们把要最小化或最大化的函数成为目标函数(objective function)或准则(criterion)。

我们通常使用一个上标*表示最小化或最大化函数的x值,记做这样:

[x^*=arg; min; f(x)]

优化本身是一个非常大的话题。如果有兴趣,可以通过《数值优化》和《运筹学》的书籍进行学习。

模型与假设函数

所有的模型都是错误的,但其中有些是有用的。– George Edward Pelham Box

模型是我们对要分析的数据的一种假设,它是为解决某个具体问题从数据中学习到的,因此它是机器学习最核心的概念。

针对一个问题,通常有大量的模型可以选择。

本文不会深入讨论这方面的内容,关于各种模型请参阅机器学习的相关书籍。本文仅以最简单的线性模型为基础来讨论梯度下降算法。

这里我们先介绍一下在监督学习(supervised learning)中常见的三个符号:

m,描述训练样本的数量x,描述输入变量或特征y,描述输出变量或者叫目标值

请注意,一个样本可能有很多的特征,因此x和y通常是一个向量。不过在刚开始学习的时候,为了便于理解,你可以暂时理解为这就是一个具体的数值。

训练集会包含很多的样本,我们用 表示其中第i个样本。

x是数据样本的特征,y是其目标值。例如,在预测房价的模型中,x是房子的各种信息,例如:面积,楼层,位置等等,y是房子的价格。在图像识别的任务中,x是图形的所有像素点数据,y是图像中包含的目标对象。

我们是希望寻找一个函数,将x映射到y,这个函数要足够的好,以至于能够预测对应的y。由于历史原因,这个函数叫做假设函数(hypothesis function)。

学习的过程如下图所示。即:首先根据已有的数据(称之为训练集)训练我们的算法模型,然后根据模型的假设函数来进行新数据的预测。

18.75开根号等于多少(1518.75开根号)-第2张图片-昕阳网img

线性模型(linear model)正如其名称那样:是希望通过一个直线的形式来描述模式。线性模型的假设函数如下所示:

[h_{\theta}(x)=\theta_{0} + \theta_{1} * x]

这个公式对于大家来说应该都是非常简单的。如果把它绘制出来,其实就是一条直线。

下图是一个具体的例子,即: 的图形:

18.75开根号等于多少(1518.75开根号)-第3张图片-昕阳网
线性模型与直觉

在实际的机器学习工程中,你会拥有大量的数据。这些数据会来自于某个数据源。它们存储在csv文件中,或者以其他的形式打包。

但是本文作为演示使用,我们通过一些简单的代码自动生成了需要的数据。为了便于计算,演示的数据量也很小。

import numpy as np
max_x=10
data_size=10
theta_0=5
theta_1=2
def get_data():
x=np.linspace(1, max_x, data_size)
noise=np.random.normal(0, 0.2, len(x))
y=theta_0 + theta_1 * x + noise
return x, y

这段代码很简单,我们生成了x范围是 [1, 10] 整数的10条数据。对应的y是以线性模型的形式计算得到,其函数是:。现实中的数据常常受到各种因素的干扰,所以对于y我们故意加上了一些高斯噪声。因此最终的y值为比原先会有轻微的偏离。

最后我们的数据如下所示:

x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y=[6.66, 9.11, 11.08, 12.67, 15.12, 16.76, 18.75, 21.35, 22.77, 24.56]

我们可以把这10条数据绘制出来这样就有一个直观的了解了,如下图所示:

18.75开根号等于多少(1518.75开根号)-第4张图片-昕阳网

虽然演示用的数据是我们通过公式计算得到的。但在实际的工程中,模型的参数是需要我们通过数据学习到的。所以下文我们假设我们不知道这里线性模式的两个参数是什么,而是通过算法的形式求得。

最后再跟已知的参数进行对比以验证我们的算法是否正确。

有了上面的数据,我们可以尝试画一条直线来描述我们的模型。

例如,像下面这样画一条水平的直线:

18.75开根号等于多少(1518.75开根号)-第5张图片-昕阳网

很显然,这条水平线离数据太远了,非常的不匹配。

那我们可以再画一条斜线。

我们初次画的斜线可能也不贴切,它可能像下面这样:

18.75开根号等于多少(1518.75开根号)-第6张图片-昕阳网

最后我们通过不断尝试,找到了最终最合适的那条,如下所示:

18.75开根号等于多少(1518.75开根号)-第7张图片-昕阳网

梯度下降算法的计算过程,就和这种本能式的试探是类似的,它就是不停的迭代,一步步的接近最终的结果。

代价函数

上面我们尝试了几次通过一条直线来拟合(fitting)已有的数据。

二维平面上的一条直线可以通过两个参数唯一的确定,两个参数的确定也即模型的确定。那如何描述模型与数据的拟合程度呢?答案就是代价函数。

代价函数(cost function)描述了学习到的模型与实际结果的偏差程度。以上面的三幅图为例,最后一幅图中的红线相比第一条水平的绿线,其偏离程度(代价)应该是更小的。

很显然,我们希望我们的假设函数与数据尽可能的贴近,也就是说:希望代价函数的结果尽可能的小。这就涉及到结果的优化,而梯度下降就是寻找最小值的方法之一。

代价函数也叫损失函数。

对于每一个样本,假设函数会依据计算出一个估算值,我们常常用来表示。即

很自然的,我们会想到,通过下面这个公式来描述我们的模型与实际值的偏差程度:

[(h_\theta(x^i) - y^i)^2=(\widehat{y}^{i} - y^i)^2=(\theta_{0} + \theta_{1} * x^{i} - y^{i})^2]

请注意, 是实际数据的值, 是我们的模型的估算值。前者对应了上图中的离散点的y坐标,后者对应了离散点在直线上投影点的y坐标。

每一条数据都会存在一个偏差值,而代价函数就是对所有样本的偏差求平均值,其计算公式如下所示:

[L(\theta)=\frac {1}{m} \sum_{i=1}^{m}(h_\theta(x^i) - y^i)^2=\frac {1}{m} \sum_{i=1}^{m}(\theta_{0} + \theta_{1} * x^{i} - y^{i})^2]

当损失函数的结果越小,则意味着通过我们的假设函数估算出的结果与真实值越接近。这也就是为什么我们要最小化损失函数的原因。

不同的模型可能会用不同的损失函数。例如,logistic回归的假设函数是这样的:。其代价函数是这样的:。当然,如果你不知道什么是logistic回归也不要紧,本文不依赖这个知识。

借助上面这个公式,我们可以写一个函数来实现代价函数:

def cost_function(x, y, t0, t1):
cost_sum=0
for i in range(len(x)):
cost_item=np.power(t0 + t1 * x[i] - y[i], 2)
cost_sum +=cost_item
return cost_sum / len(x)

这个函数的代码应该不用多做解释,它就是根据上面的完成计算。

我们可以尝试选取不同的 组合来计算代价函数的值,然后将结果绘制出来:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
theta_0=5
theta_1=2
def draw_cost(x, y):
fig=plt.figure(figsize=(10, 8))
ax=fig.gca(projection='3d')
scatter_count=100
radius=1
t0_range=np.linspace(theta_0 - radius, theta_0 + radius, scatter_count)
t1_range=np.linspace(theta_1 - radius, theta_1 + radius, scatter_count)
cost=np.zeros((len(t0_range), len(t1_range)))
for a in range(len(t0_range)):
for b in range(len(t1_range)):
cost[a][b]=cost_function(x, y, t0_range[a], t1_range[b])
t0, t1=np.meshgrid(t0_range, t1_range)
ax.set_xlabel('theta_0')
ax.set_ylabel('theta_1')
ax.plot_surface(t0, t1, cost, cmap=cm.hsv)

在这段代码中,我们对 各自指定了一个范围进行100次的采样,然后以不同的 组合对来计算代价函数的值。

如果我们将所有点的代价函数值绘制出来,其结果如下图所示:

18.75开根号等于多少(1518.75开根号)-第8张图片-昕阳网

从这个图形中我们可以看出,当

上一篇:华为手机下拉通知栏设置方法(怎样恢复手机下拉屏幕)

下一篇:tlbc(tlbc币会有价值吗(ma))

  • a股今日大(da)盘股市行情指数(股市行情今日大盘指数)

    a股今日大(da)盘股市行情指数(股市行情今日大盘指数)

    怎样判断股票涨(zhang)停还是跌停?影响(xiang)股票涨跌的因素有(you)很多,例如:政策的利空(kong)利多、大盘环境的好坏、主力资(zi)金的进出、个股基本面(mian)的重大变化、个股(gu)的历史走势的涨跌情况(kuang)、个股所…
    2023-04-20 阅读(71)
  • slp币最(zui)新消息(slp币最新价格)

    slp币最(zui)新消息(slp币最新价格)

    SLP是什么意思?SLP是服务(wu)定位协议的意思。服务定位协议(ServiceLocationProtocol)简称(cheng)SLP,为网络(luo)服务的发现和选择提供一种可扩展构(gou)架。通过此协议(yi),使用Internet服务的计算机不(bu)再需要那么多…
    2023-04-20 阅读(59)
  • 电脑怎么找到刚刚保存的文件(文件保存了,但是打开却没有)

    电脑怎么找到刚刚保存的文件(文件保存了,但是打开却没有)

    小白系统装机工具可以在线自行下载系统镜像并安装到电脑,帮助很多网友实现安装系统的目的。有些网友好奇小白系统下载的镜像文件在哪里,小白系统下载的镜像文件保存地址可以按照以下方法来找到并使用它,一起来看看吧。方…
    2023-04-20 阅读(38)
  • 火花结局是什么(大陆电视剧《火花》大结局)

    火花结局是什么(大陆电视剧《火花》大结局)

    《狂飙》做完结局,一切事情尘埃落定,高启强、赵立冬等人被抓。在京海默默斗争20年的安欣终于可以稍微松一口气。安欣一个人默默坐在办公室,低着头。回首这20年来,安欣从一个朝气蓬勃的青年,变成一个暮气沉沉的中年,唯有不变…
    2023-04-20 阅读(50)
  • fil币最(zui)新情况(fil币最新价)

    fil币最(zui)新情况(fil币最新价)

    fil币的发(fa)展前景fil币(bi)的发展前景还是可以(yi)的。1.虚拟(ni)货币的项目周期(qi)其实非常短,世者有些项目(mu)看似存在,但其(qi)实早已经没有了流通价值。2.FIL币如果能活到下(xia)一个牛市,FIL币(bi)就会有一定…
    2023-04-20 阅读(61)