python一元线性回归分析代码(python线性回归实例)

线性回归可能是最常见的算法之一,线性回归是机器学习实践者必须知道的。这通常是初学者第一次接触的机器学习算法,了解它的操作方式对于更好地理解它至关重要。 所以,简单地说,让我们来分解一下真正的问题:什么是线性回归? 线性回归定义 线性回归是一种有监督的学习算法,旨在采用线性方法来建模因变量和自变量之间的关系。换句话说,它的目标是拟合一条最好地捕捉数据关系的线性趋势线,并且,从这条线,它可以预测目标值…

线性回归可能是最多见的算法之一,线性回归是人工神经网络践行者务必了解的。这通常是新手第一次接触的机器学习算法,掌握它的实际操作方法针对能够更好地了解它尤为重要。

因此,简易地说,使我们来溶解一下真实的问题:什么叫线性回归?

线性回归界定

线性回归是一种有监督管理的学习培训算法,致力于选用线形方式来模型自变量和变量相互关系。也就是说,它的总体目标是线性拟合一条最好是地捕获数据信息关联的线形趋势线,而且,从这根线,它可以预测分析目标很有可能是啥。

Python机器学习算法:线性回归

太棒了,我明白它的界定,但它是怎样作业的呢?好问题!为了更好地解答这个问题,使我们逐渐了解一下线性回归是怎么运行的:

  1. 线性拟合数据信息(如上图所述所显示)。
  2. 测算点中间的间距(图上的小红点是点,蓝线是间距),随后求平方米,随后求合(这种值是平方米的,以保证负数不容易发生问题的值并阻拦测算)。这也是算法的偏差,或是能够更好地称之为方差
  3. 储存梯度下降法的方差
  4. 根据一个提升算法,促使该线略微“挪动”,便于该线可以能够更好地线性拟合数据信息。
  5. 反复过程2-5,直到做到梦想的结论,或是剩下偏差减少到零。

这类拟合直线的方式 称之为最小二乘法。

线性回归身后的数学课

假如已经了解的请随便绕过这一部分

Python机器学习算法:线性回归

线性回归算法如下所示:

Python机器学习算法:线性回归

可以优化为:

Python机器学习算法:线性回归

下列算法将基本上进行下列实际操作:

  1. 接纳一个Y空间向量(你的数据标签,(房子价格,股价,这些…)
Python机器学习算法:线性回归

这是你的总体目标空间向量,稍候将用以评定你的数据信息(稍候将详解)。

  1. 引流矩阵X(数据信息的特点):
Python机器学习算法:线性回归

这也是数据信息的特点,即年纪、胎儿性别、性别、个子等。这也是算法将具体用以预测分析的数据信息。留意怎样有一个特点0。这称之为截距项,且自始至终相当于1。

  1. 取一个权重值空间向量,并将其转置:
Python机器学习算法:线性回归
Python机器学习算法:线性回归

这也是算法的奇特之处。全部的矩阵的特征值都是会乘于这种权重值。这就是所说的点积。事实上,你将试着为给出的数据寻找这种值的最好组成。这就是所说的提升。

  1. 获得导出空间向量:
Python机器学习算法:线性回归

这是以数据信息中输入输出的预测分析空间向量。随后,你能应用成本函数来评定模式的特性。

这大部分便是用数学课表述的全部算法。如今你应该对线性回归的作用有一个牢靠的了解。但问题是,什么是优化算法?大家如何选择最好权重值?大家怎么评定业绩考核?

成本函数

成本函数实质上是一个公式计算,用于考量实体模型的损害或“成本费”。假如你以前参与过一切Kaggle赛事,你也许会遇到过一些。一些常用的办法包含:

  • 均方根误差
  • 均方误差
  • 均值相对误差

这种函数公式针对实体模型练习和研发是不可缺少的,由于他们回应了“我的模型预测新案例的水平怎样”这一基本上问题?”. 请记牢这一点,由于这与人们的下一个主题风格相关。

提升算法

优化通常被理解为改善某事情,使其充分发挥其所有发展潜力的全过程。这也适用人工神经网络。在ML的全世界里,提升实质上是尝试为某一数据寻找最好的主要参数组成。这几乎是机器学习算法的“学习培训”一部分。

我将探讨二种最多见的算法:梯度下降法和标准方程。

梯度下降

梯度下降是一种提升算法,致力于找寻函数公式的极小值。它利用在梯度方向的负方位上梯度下降法地采用具体步骤来建立这些总体目标。在人们的案例中,梯度下降将根据挪动函数公式切线的斜率来不断创新权重值。

梯度下降的一个详细事例

Python机器学习算法:线性回归

为了更好地更好的表明梯度下降,使我们看一个简便的事例。想像一个人在山巅上,他/她想爬到山底。她们也许会做的是环顾四周,看一下应当朝哪个方位迈开一步,便于迅速地下来。随后,她们很有可能会朝这一方位迈开一步,如今她们离总体目标更近了。殊不知,他们在降低时务必当心,由于他们很有可能会在某一点卡死,因此大家需要保证相对应地挑选咱们的步幅。


一样,梯度下降的总体目标是降到最低函数公式。在人们的案例中,这也是为了更好地使人们的建模的成本费降到最低。它根据寻找函数公式的断线并朝那一个方位挪动来达到这一点。算法“步幅”的尺寸是由已经知道的学习培训速度来理解的。这大部分操纵着大家向下移动的间距。应用此参数,大家需要留意二种状况:

  1. 学习培训速度很大,算法很有可能没法收敛性(做到极小值)并在最小值周边反跳,但终究不容易做到该值
  2. 学习率过小,算法将耗费太长期才可以做到极小值,也有可能会“卡”在一个次优势上。

大家还有一个主要参数,它操纵算法梯度下降法数据的频次。

从视觉效果上看,该算法将实行下列实际操作:

Python机器学习算法:线性回归

因为此算法对人工神经网络十分关键,使我们总结一下它的功效:

  1. 任意复位权重值。这叫做任意复位
  2. 随后,实体模型应用这种任意权重值开展预测分析
  3. 实体模型的预估是根据成本函数来评定的
  4. 随后实体模型运作梯度下降,寻找函数公式的断线,随后在切线的斜率上迈开一步
  5. 该全过程将反复N次梯度下降法,或是假如达到某一标准。

梯度下降法的优点和缺点

优势:

  1. 很可能将成本函数减少到全局性极小值(十分贴近或=0)
  2. 最有效的提升算法之一

缺陷:

  1. 在大中型数据上很有可能较慢,因为它应用全部数据来测算函数公式断线的梯度方向
  2. 非常容易深陷次优势(或部分极小值)
  3. 客户务必手动式挑选学习培训速度和更新频次,这很有可能很用时

即然已经讲解了梯度下降,如今咱们来详细介绍标准方程。

标准方程(Normal Equation)

如果我们返回人们的案例中,而不是一步一步地往下沉,大家将可以马上抵达底端。标准方程就这样。它运用线代来形成权重值,可以在很短的時间内造成和梯度下降一样好的结论。

标准方程的优点和缺点

优势

  1. 不用挑选学习培训速度或梯度下降法频次
  2. 十分快

缺陷

  1. 不可以有效地扩大到大中型数据
  2. 趋向于造成好的权重值,但并不是最好权重值
Python机器学习算法:线性回归

特点放缩

这也是很多机器学习算法的关键预备处理流程,尤其是这些应用间距衡量和测算(如线性回归和梯度下降)的算法。它实质上是放缩大家的特点,使他们在差不多的范畴内。把它想像成一座房子,一座房子的比例模型。二者的外形是一样的(她们是房屋),但尺寸不一样(5米!=500米)。大家那样做的因素如下所示:

  1. 它加速了算法的速率
  2. 有一些算法对尺度比较敏感。换言之,假如特征具备不一样的尺度,则有可能将更高的权重值授予具备更高数量级的特征。这将危害人工神经网络算法的特性,显而易见,我们不期待大家的算法偏重于一个特征。

为了更好地演试这一点,假定人们有三个特征,各自取名为A、B和C:

  • 放缩前AB间距=>
Python机器学习算法:线性回归
  • 放缩前BC间距=>
Python机器学习算法:线性回归
  • 放缩后AB间距=>
Python机器学习算法:线性回归
  • 放缩后BC的间距=>
Python机器学习算法:线性回归

我们可以清晰地见到,这种特征比放缩以前更具有对比性和估计量。

重新开始撰写回归分析

Python机器学习算法:线性回归

行吧,如今你一直在等着的时时刻刻;完成!

留意:全部编码都能够从这一Github repo免费下载。可是,我建议你在实行此使用前先遵循实例教程,由于那样你将能够更好地了解你具体在撰写哪些编码:

https://github.com/Vagif12/ML-Algorithms-From-Scratch/blob/main/Linear Regression from Scratch.ipynb

最先,使我们做一些主要的导进:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston

是的,这就是全部必须添加的了!大家采用的是numpy做为数学课完成,matplotlib用以制作图型,及其scikitlearn的boston数据。

# 载入和分拆数据信息
data = load_boston()
X,y = data[\'data\'],data[\'target\']

下面,使我们建立一个定做的train_test_split函数公式,将人们的数据信息拆分成一个练习和检测集:

# 分拆练习和检测集
def train_test_divide(X,y,test_size=0.3,random_state=42):
    np.random.seed(random_state)
    train_size = 1 - test_size
    arr_rand = np.random.rand(X.shape[0])
    split = arr_rand < np.percentile(arr_rand,(100*train_size))

    X_train = X[split]
    y_train = y[split]
    X_test =  X[~split]
    y_test = y[~split]

    return X_train, X_test, y_train, y_test
X_train,X_test,y_train,y_test = train_test_divide(X,y,test_size=0.3,random_state=42)

大部分,我们在开展

  1. 获得检测集尺寸。
  2. 设定一个随机种子,以保证 大家的效果和精确性。
  3. 依据检测集尺寸获得训练集尺寸
  4. 从大家的特征中随机抽取样版
  5. 将任意挑选的案例拆分成训练集和检测集

大家的成本函数

我们将完成MSE或均方根误差,一个用以重归每日任务的普遍成本函数:

Python机器学习算法:线性回归
def mse(preds,y):
        m = len(y)
        return 1/(m) * np.sum(np.square((y - preds)))
  • M指的是练习案例的总数
  • yi指的是大家标识空间向量中的一个案例
  • preds指的是大家的预测分析

为了更好地撰写整洁、可反复和高效率的编码,并遵循开发软件实践活动,大家将建立一个回归分析类:

class LinReg:
    def ._init__(self,X,y):
        self.X = X
        self.y = y
        self.m = len(y)
        self.bgd = False
  • bgd是一个主要参数,它界定大家是不是需要应用大批量梯度下降法。

如今人们将建立一个方式来加上截距项:

def add_intercept_term(self,X):
        X = np.insert(X,1,np.ones(X.shape[0:1]),axis=1).copy()
        return X

这大部分是在人们的特征逐渐处添加一个列。它仅仅为了更好地矩阵乘法。

假如我们不再加上这一点,那麼人们将驱使超平面根据起点,造成它大幅歪斜,进而没法恰当线性拟合数据信息

放缩大家的特征:

Python机器学习算法:线性回归
def feature_scale(self,X):
        X = (X - X.mean()) / (X.std())
        return X

下面,大家将任意复位权重值:

def initialise_thetas(self):
        np.random.seed(42)
        self.thetas = np.random.rand(self.X.shape[1])

如今,大家将应用下列公式计算重新开始撰写标准方程:

Python机器学习算法:线性回归
def normal_equation(self):
        A = np.linalg.inv(np.dot(self.X.T,self.X))
        B = np.dot(self.X.T,self.y)
        thetas = np.dot(A,B)
        return thetas

大部分,大家将算法分成三个一部分:

  1. 大家取得了X转置后与X的点积的逆
  2. 大家获得净重和标识的点积
  3. 大家获得2个测算值的点积

这就是标准方程!还不错!如今,大家将应用下列公式计算完成大批量梯度下降法:

def batch_gradient_descent(self,alpha,n_iterations):
        self.cost_history = [0] * (n_iterations)
        self.n_iterations = n_iterations

        for i in range(n_iterations):
            h = np.dot(self.X,self.thetas.T)
            gradient = alpha * (1/self.m) * ((h - self.y)).dot(self.X)

            self.thetas = self.thetas - gradient
            self.cost_history[i] = mse(np.dot(self.X,self.thetas.T),self.y)

        return self.thetas

在这儿,大家实行下列实际操作:

  1. 大家设定alpha,或是学习率,和更新频次
  2. 大家建立一个目录来储存大家的成本函数历史数据,便于之后在柱形图中制作
  3. 循环系统n_iterations 次,
  4. 大家获得预测分析,并测算梯度方向(函数切线的斜率)。
  5. 大家升级权重值以沿梯度方向负方位挪动
  6. 大家运用咱们的自定MSE函数纪录值
  7. 反复,进行后,回到结论

让我们界定一个线性拟合函数来拟合大家的数据信息:

def fit(self,bgd=False,alpha=0.158,n_iterations=4000):
        self.X = self.add_intercept_term(self.X)
        self.X = self.feature_scale(self.X)
        if bgd == False:

            self.thetas = self.normal_equation()
        else:
            self.bgd = True
            self.initialise_thetas()
            self.thetas = self.batch_gradient_descent(alpha,n_iterations)

在这儿,大家只必须检查用户是不是必须梯度下降法,并相对地实行人们的流程。

让我们搭建一个函数来制作成本函数:

def plot_cost_function(self):

        if self.bgd == True:
            plt.plot(range((self.n_iterations)),self.cost_history)
            plt.xlabel(\'No. of iterations\')
            plt.ylabel(\'Cost Function\')
            plt.title(\'Gradient Descent Cost Function Line Plot\')
            plt.show()
        else:
            print(\'Batch Gradient Descent was not used!\')

最终一种预测分析未标识案例的方式:

def predict(self,X_test):
        self.X_test = X_test.copy()
        self.X_test = self.add_intercept_term(self.X_test)
        self.X_test = self.feature_scale(self.X_test)
        predictions = np.dot(self.X_test,self.thetas.T)
        return predictions

如今,让我们看一下哪个提升造成了更快的结论。最先,让我们试一下梯度下降法:

lin_reg_bgd = LinReg(X_train,y_train)
lin_reg_bgd.fit(bgd=True)

mse(y_test,lin_reg_bgd.predict(X_test))

OUT:
28.824024414708344

让我们画出大家的函数,看一下成本函数是怎样降低的:

Python机器学习算法:线性回归

因此我们可以见到,在大概1000次梯度下降法时,它逐渐收敛性。

如今的标准方程是:

lin_reg_normal = LinReg(X_train,y_train)
lin_reg_normal.fit()

mse(y_test,lin_reg_normal.predict(X_test))

OUT:
22.151417764247284

因此我们可以见到,标准方程的特性略好于梯度下降法。这也许是由于数据不大,并且大家并没有为学习率挑选最好主要参数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月12日 下午1:34
下一篇 2022年5月12日 下午1:34

相关推荐

  • 团队凝聚力的重要性有哪些,团队凝聚力六大要素

    “众人拾柴火焰高”这句话相信大家都知道是什么意思,无论在什么时候团队的力量永远要比个人高很多,这个道理不仅适用于生活同样也适用于企业。在企业发展过程中,如果说员工是企业发展的动力,那么一个优秀的员工团队就是企业发展的实力保证。 提高企业员工的团队凝聚力的好处有哪些? 一个优秀的员工团队必然会具备强大的团队凝聚力,团队凝聚力是无形的精神力量,是将一个团队的成员紧密地联系在一起的看不见的纽带。团队的凝…

    2022年7月22日
    840
  • itunes怎么导出照片,新版itunes导出照片教程

    iTunes备份中保存了手机中的所有数据,当然也包括手机中拍的照片及视频,那么我们该如何才可以将iTunes备份中的相片导出来呢?其实方法很简单,下面就跟着我来一步步地操作吧。 1,首先我们将iPhone手机(或iPad)连接到电脑上,再使用iTunes软件对其数据进行备份。如果已经进行过了备份的话,则可以略过此步骤。 2,接着在电脑上下载并安装“楼月免费iTunes备份管理器”,在窗口上就可以看…

    2022年7月20日
    1470
  • 网店推广技巧有哪些,网站店铺的推广话术分享

    随着网络越来越深入到人们的生活,开网店的人也是与日俱增。但随之而来的竞争也越来越激烈,虽然有的店铺日进斗金,但是更多的网店不仅销量低,而且流量低。这其实就是网店产品的宣传和推广出了问题。很多的电商都不注重店铺产品的宣传和推广,认为只要产品好就够了,其实不然,没有人知道你的产品好那又有什么用呢?那么,该如何做网店推广呢? 1.店铺名字。在创办店铺的时候,要结合产品的特色和风格起一个让别人容易记住的名…

    2022年8月20日
    440
  • 电脑微信聊天记录怎么恢复,快速恢复微信聊天记录的方法

    微信聊天记录怎么恢复?大家在在使用微信的时候,总是会不小心删除了一些重要的记录。既然都说是重要的记录了,那么我们就需要想法设法将这些记录找回。一般情况下,微信聊天记录恢复是有两种情况的,一种是存在备份,另一种肯定就是没有备份的。接下来让小编为大家分享一些微信聊天记录误删除的恢复方法。 一、利用微信备份恢复微信聊天记录 1.在电脑上恢复微信聊天记录,如果之前定期将聊天记录备份到电脑上,打开电脑版微信…

    2022年8月20日
    530
  • 杭州百度推广公司(杭州百度推广费用)

    互联网推广已经是普及在所有行业的企业,而企业在互联网上推广企业的产品,服务也是必须的布局,但是不同的推广模式,有着不同的预算,但是企业都希望能够花少钱,但能带来大量的流量,百度推广爱采购平台后,将B2B平台与搜索引擎结合,成为了B2B垂直搜索引擎,而企业入驻的也很多,但是有些企业还对爱采购不了解,比如做推广点击需要费用吗,接下来和大家讲讲。   百度爱采购是不需要企业花费高预算来做推广点击,而…

    2022年7月19日
    800
  • 乌克兰国防部等网站遭攻击关闭(局势突变)

    当地时间2月15日15时,包括乌克兰国防部、武装部队等多个军方网站和银行的网站遭到大规模网络攻击而关闭。目前尚无人声称对此事负责。 乌克兰安全部门表示,此次攻击非常强大,为分布式拒绝服务攻击(DDoS)。目前,乌克兰国家安全部门以及网络警察部队正就此展开调查。 今年1月14日,包括乌克兰外交部、教育部、内政部、能源部等在内的多个政府网站曾遭到大规模网络攻击而关闭。(总台记者王晋燕) 来源:央视新闻…

    2022年5月12日
    810
  • 快速清理内存整理工具(清理内存的软件排行榜)

    看到这个场面,血压直接就上来了。相信大部分的朋友都有过这种经历:明明C盘并没有安装多少软件,但内存却总在不知不觉的提升,隔段时间不看就直接爆红。 后来小雷检查软件占用内存才发现,原来罪魁祸首就是它!“国民软件”——微信!!作为目前最常使用的办公+日常软件,这玩意使用时间越长,占用空间就越大,还是无上限的那种。 如果你同时登录几个账号,时间一长,即使你电脑内存再高也能给你填满。小雷苦于微信久矣,最近…

    2022年5月9日
    940
  • 上网流量管理软件(网络流量监控工具推荐)

    长角牛网络监控机”(原名“网络执法官”)是一款局域网管理软件,是长角牛软件工作室开发的一款局域网管理辅助软件,只需要在网内任一台主机上运行即可有效监控所有本机连接到的网络(支持多网段监控),,即可穿透各用户防火墙,监控整个网络的连接情况。采用网络底层协议,能穿透各客户端防火墙对网络中的每一台主机(本文中主机指各种计算机、交换机等配有IP的网络设备)进行监控;采用网卡地址(MAC)识别用户,可靠性高…

    2022年5月13日
    780
  • seo做的好的企业网站有哪些,做好网站优化需要注意事项

    企业网站需要怎样优化?该怎么做好网站优化?随着网络时代的崛起,很多企业都建立了自己的官网,但是很多企业以为建立了官网,就会有很多的用户来到我们的网站,其实这是错的观点,如果你的企业没有品牌力度,别人怎么会去搜索你的网站并且点击进入官网呢?一定要做好后期的网站运营,即网站排名,带来流量与订单,让网站发挥出最大的价值!下面聚名网小编就为大家介绍一下企业网站怎样优化和如何做好seo优化。 企业网站需要怎…

    2022年5月21日
    650
  • 可以录屏的软件有哪些,录屏软件免费下载大全

    oCam是一款简单且功能强大的录屏软件,它同时还支持截屏,你可以选择全屏模式截屏也可以选择自定义区域截屏。该软件还可以录制来自电脑的声音。 oCam录屏软件无水印 这款免费录屏软件,编码功能强大,支持游戏录像、制任何区域、可选全屏模式或自定义区域截图;还可录制正在播放的声音;非常简单易用,而且完全免费。 使用方法: 操作步骤只需三步:1、设置屏幕录制范围;2、点击录制按钮;3、停止录制并保存;即可…

    2022年8月3日
    740

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信