1. 首页
  2. Python

使用python进行线性回归的简单数学方法

“u003Cdivu003Eu003Cpu003Eu003Cstrongu003E线性回归是机器学习中最简单的算法之一。但我们大多数人都不知道模型背后的数学。在我们深入研究线性回归的数学之前,让我们先简单介绍一下。u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E顾名思义,该算法适用于回归问题。基本线性回归是线性模型,意味着我们必须建立输入(x)变量和输出(y)变量之间的线性关系。线性回归是一种监督学习算法。监督意味着机器学习中的学习类型,可以应用于标记数据集。当输入(x)是单个变量时,该模型称为简单线性回归,当有多个输入变量(x)时,它被称为多个线性回归。u003Cu002Fpu003Eu003Cpu003E简单线性回归模型表示:u003Cu002Fpu003Eu003Cpu003E假设我们有一个城市住房价格的数据集,我们输入(x)一个独立变量作为房屋的特征,输出(y)是一个房屋价格的因变量。我们必须建立这两个变量之间的关系,如果我们有一些输入变量,我们可以预测房屋价格。为此,我们将使用称为“线性回归”的算法,基本上在这个算法中我们必须在两个变量之间放置最佳拟合线输入(x)和输出(y)。这个最佳拟合线可以用下面称为假设函数的方程表示:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fbe065085d9e14407a404654dacdb2408″ img_width=”395″ img_height=”105″ alt=”使用python进行线性回归的简单数学方法” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003E假设函数方程u003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E这里u003Cemu003Eθu003Cu002Femu003E 0,u003Cemu003Eθ1u003Cu002Femu003E是截距和直线的斜率。u003Cemu003Ehθu003Cu002Femu003E(u003Cemu003EXu003Cu002Femu003E)是输出(价格),x是我们的数据集,然后我们的方程变为具有多于一个的特征给定data-set的输入(函数):u003Cstrongu003Eu003Cemu003EHθu003Cu002Femu003E(u003Cemu003EXu003Cu002Femu003E)= u003Cemu003Eθu003Cu002Femu003E 0 + u003Cemu003Eθ1u003Cu002Femu003E X1 + u003Cemu003Eθu003Cu002Femu003E 2×2 u003Cu002Fstrongu003E,其中X1和X2两个features.Lets停留在一个特征数据set.But如何找到系数u003Cstrongu003Eu003Cemu003Eθu003Cu002Femu003E 0u003Cu002Fstrongu003E,u003Cstrongu003Eθ1u003Cu002Fstrongu003E?这是学习过程。我们可以使用不同的方法找到它们。一个称为均方误差法,另一个称为梯度下降法。均方误差法用于找出给定输出和预测输出之间的误差,而梯度下降用于最小化误差。让我们逐一讨论这两个。u003Cu002Fpu003Eu003Cpu003E均方误差:u003Cu002Fpu003Eu003Cpu003E我们可以通过使用“均方误差”方法来测量上述方程或函数的精度。这取得了函数的所有结果与来自x和实际输出y的输入的平均差。成本函数方程式由下式给出:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F18945c2a2b02448daa5012c7fea489cf” img_width=”399″ img_height=”63″ alt=”使用python进行线性回归的简单数学方法” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003E简单线性回归的成本函数u003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E这个函数被称为“平方误差函数”或“平均平方误差”。正如我们所看到的那样,平均值减半(1u002F2)是为了便于计算梯度下降,因为平方函数的导数项将抵消(1u002F2)项,我们将在渐变时看到这一点讨论了下降法。u003Cu002Fpu003Eu003Cpu003E在本文的前面我们讨论过,我们将把x和y之间的关系近似为一条线。假设我们输入和输出很少。我们在2D空间中绘制这些散点,我们将得到类似下图的内容。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fab4a6fc9e8ee48fd9d8259c7e5b66ae9″ img_width=”467″ img_height=”434″ alt=”使用python进行线性回归的简单数学方法” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E现在已经讨论了很多理论,让我们来看一下成本函数的实现部分。这里我们将使用python 3.7来实现成本函数。u003Cu002Fpu003Eu003Cpreu003E# Calculate Costu002Ferror function of our reggression lineu003Cbru003Edef cost_function(m,b,points):u003Cbru003E N = float(len(points))u003Cbru003E c=0u003Cbru003E for i in range(0,len(points)):u003Cbru003E x=points[i,0]u003Cbru003E y=points[i,1]u003Cbru003E c += (((m*x)+b)-y)**2u003Cbru003E return cu002FNu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E从上面的代码可以看出,我们有一个函数cost_function.Here我们必须传递三个参数m(斜率),b(截距)和point(数据集)。做了一些数学运算后我们得到了成本函数的返回值,我们必须尽量减少使用梯度下降的方法。u003Cu002Fpu003Eu003Cpu003E梯度下降:u003Cu002Fpu003Eu003Cpu003E我们有假设函数,我们有一种方法可以衡量它与数据的匹配程度。现在我们需要估计假设函数中的参数。这就是梯度下降的作用,现在假设我们图基于其字段θ0和θ1假设函数。我们把x轴θ0 和y轴θ1,垂直z轴上的成本函数,用在成本函数垂直z轴。我们的图上的点将是成本函数的结果,使用我们的假设和那些特定的θ参数。下图描绘了这样的设置。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F4ff2ef85e20e46db9206b9ccec0a14ec” img_width=”800″ img_height=”441″ alt=”使用python进行线性回归的简单数学方法” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E现在我们知道我们的目标是最小化误差,这是图上的最小点,如上面的红色箭头所示。我们这样做的方法是采用我们的成本函数的导数。切线的斜率是该点的导数,它将为我们提供一个朝向的方向。我们在最陡下降的方向上降低成本函数。每个步骤的大小由参数α确定,该参数称为学习速率。u003Cu002Fpu003Eu003Cpu003E例如,上图中每个“星星”之间的距离表示由参数u003Cstrongu003Eαu003Cu002Fstrongu003E确定的步长。较小的α将导致较小的步长,较大的α将导致较大的步长。在其中的步长是采取的方向由的偏导数来确定u003Cstrongu003Eu003Cemu003EĴu003Cu002Femu003E(u003Cemu003Eθu003Cu002Femu003E 0,u003Cemu003Eθu003Cu002Femu003E 1) u003Cu002Fstrongu003E。根据图表的开始位置,可能会在不同的点上结束。上图显示了两个不同的起点,最终出现在两个不同的地方。梯度下降算法是:u003Cu002Fpu003Eu003Cpu003E重复直至收敛: u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Eu003Cemu003Eθju003Cu002Femu003E​:=u003Cemu003Eθju003Cu002Femu003E​−u003Cemu003Eαu003Cu002Femu003E∂u003Cemu003Eθju003Cu002Femu003E​∂​u003Cemu003EJu003Cu002Femu003E(u003Cemu003Eθu003Cu002Femu003E0​,u003Cemu003Eθu003Cu002Femu003E1​)u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E其中j = 0,1表示特征索引号。u003Cu002Fpu003Eu003Cpu003E在每次迭代j,应该同时更新参数u003Cemu003Eθ1u003Cu002Femu003E,u003Cemu003Eθ2u003Cu002Femu003E,…,u003Cemu003Eθnu003Cu002Femu003E。u003Cu002Fpu003Eu003Cpu003E区分上述方程后,我们有以下几点:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fea29ea3a06594b939a40f07a2b8ead9b” img_width=”800″ img_height=”240″ alt=”使用python进行线性回归的简单数学方法” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003E简单线性回归的梯度下降u003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E现在让我们在python代码中实现所有这些:u003Cu002Fpu003Eu003Cpreu003E#Run gradient descent for one epoch with data pointsu003Cbru003Edef gradient_step(self,b,m,a,points):u003Cbru003E b_gradient=0.0u003Cbru003E m_gradient=0.0u003Cbru003E N=float(len(points))u003Cbru003E for i in range(0,len(points)):u003Cbru003E x=points[i,0]u003Cbru003E y=points[i,1]u003Cbru003E b_gradient += -(2u002FN) * (y – ((m * x) + b))u003Cbru003E m_gradient += -(2u002FN) * x * (y – ((m * x) + b))u003Cbru003E new_b=b-(a*b_gradient)u003Cbru003E new_m=m-(a*m_gradient)u003Cbru003E return [new_b,new_m]u003Cbru003E# Gradient_runner for iterationsu003Cbru003Edef gradient_runner(self,no_of_iterations,points,b,m,a):u003Cbru003E for i in range(no_of_iterations):u003Cbru003E b,m=self.gradient_step(b,m,a,points)u003Cbru003E return [b,m]u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E这就是线性回归的第一部分,到目前为止你已经了解了线性回归,均方法和梯度下降法。以后我将通过一些使用python的示例来讨论更多关于梯度下降直观和输出预测的内容。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fffa4c862327a462585a38d39194b25b5″ img_width=”800″ img_height=”450″ alt=”使用python进行线性回归的简单数学方法” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fdivu003E”

原文始发于:使用python进行线性回归的简单数学方法

主题测试文章,只做测试使用。发布者:逗乐男神i,转转请注明出处:http://www.cxybcw.com/10029.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code