矢量,矢量化的梯度下降以及多元线性回归

一、矢量

定义:按照特定顺序排列的元素集合。可以被视为一维数组。

在机器学习中的作用:

  1. 特征表示:在机器学习任务中,输入数据通常以矢量的形式表示。例如,图像可以表示为像素值的矢量,文本可以表示为词向量的矢量。矢量工具可以用来处理和表示这些特征向量,以便机器学习模型能够对其进行处理和学习。
  2. 模型参数表示:在机器学习模型中,参数通常以矢量的形式表示。例如,线性回归模型的参数可以表示为一个包含权重和偏置的矢量。矢量工具可以用来对模型参数进行操作和更新,以便模型能够进行学习和预测。
  3. 矩阵运算:在机器学习中,矩阵运算是非常常见的操作。例如,矩阵乘法在神经网络中经常用于计算输入数据和模型参数之间的线性变换。矢量工具可以用来进行高效的矩阵运算,以便加速机器学习模型的训练和推断过程。

优势:

  1. 高效地表示和处理大量的数据特征和模型参数。
  2. 方便进行数学运算
  3. 高校利用内存和处理器资源
  4. 简化编程

二、numpy

在编程中常用numpy库来创建和运行矢量数组。以下为常见的使用方式:

1.使用形状元组(shape tuple)生成矢量

注:numpy.zeros((4,))和numpy.zeros(4)的效果相同,但是numpy.zeros((4,1))会生成4行一列的矩阵。

# NumPy routines which allocate memory and fill arrays with value
a = np.zeros(4);                print(f"np.zeros(4) :   a = {a}, a shape = {a.shape}, a data type = {a.dtype}")
a = np.zeros((4,));             print(f"np.zeros(4,) :  a = {a}, a shape = {a.shape}, a data type = {a.dtype}")
a = np.random.random_sample(4); print(f"np.random.random_sample(4): a = {a}, a shape = {a.shape}, a data type = {a.dtype}")# 运行结果
#np.zeros(4) :   a = [0. 0. 0. 0.], a shape = (4,), a data type = float64
#np.zeros(4,) :  a = [0. 0. 0. 0.], a shape = (4,), a data type = float64
#np.random.random_sample(4): a = [0.49722532 0.51600241 0.11757225 0.65462113], a shape = (4,), a data type = float64

2.不使用形状元组生成矢量

a = np.arange(4.);              print(f"np.arange(4.):     a = {a}, a shape = {a.shape}, a data type = {a.dtype}")
a = np.random.rand(4);          print(f"np.random.rand(4): a = {a}, a shape = {a.shape}, a data type = {a.dtype}")#运行结果
#np.arange(4.):     a = [0. 1. 2. 3.], a shape = (4,), a data type = float64
#np.random.rand(4): a = [0.54342577 0.79334353 0.74999339 0.43430988], a shape = (4,), a data type = float64

3.手动创建矢量

# NumPy routines which allocate memory and fill with user specified values
a = np.array([5,4,3,2]);  print(f"np.array([5,4,3,2]):  a = {a},     a shape = {a.shape}, a data type = {a.dtype}")
a = np.array([5.,4,3,2]); print(f"np.array([5.,4,3,2]): a = {a}, a shape = {a.shape}, a data type = {a.dtype}")#运行结果:
#np.array([5,4,3,2]):  a = [5 4 3 2],     a shape = (4,), a data type = int32
#np.array([5.,4,3,2]): a = [5. 4. 3. 2.], a shape = (4,), a data type = float64

 numpy的矢量实际上属于数组,所以拥有数组的一般性质,可以进行索引、切片、删除等操作。 但是矢量的加法与列表的加法却有所不同,矢量是对位相加,列表是两个列表连接形成新的列表:

#矢量相加
a = np.array([ 1, 2, 3, 4])
b = np.array([-1,-2, 3, 4])
print(f"Binary operators work element wise: {a + b}")#列表相加
c = [1,2,3,4]
d = [-1,-2, 3, 4]
print(f"Binary operators work element wise:{c + d}")#运行结果
#Binary operators work element wise: [0 0 6 8]
#Binary operators work element wise:[1, 2, 3, 4, -1, -2, 3, 4]

三、多元线性回归&矢量化

在之前学习过一元线性回归模型,接下来学习和总结多元线性模型。

一般来说,我们分析一个问题时往往会考虑多个不同的因素,我们在建立模型时会将这些影响因素作为变量x,影响的权重作为系数w,得到下图中的改变:

我们可以发现,f(x)可以改写为向量形式:

由于\sum_{i}^{n}w_{i}x_{i}=\vec{w}*\vec{x}

所以f_{w,x}(x)=f_{\vec{w},\vec{x}}(\vec{x})=\vec{w}*\vec{x}+b

四、多元线性回归的矢量化梯度下降法 

按照老师的讲解如下进行变换:(其实也没多难,就是把运算的部分换成矢量运算)

 

下面是算法实现:

X_train = np.array([[2104, 5, 1, 45], [1416, 3, 2, 40], [852, 2, 1, 35]])
y_train = np.array([460, 232, 178])def compute_gradient(X, y, w, b): """Computes the gradient for linear regression Args:X (ndarray (m,n)): Data, m examples with n featuresy (ndarray (m,)) : target valuesw (ndarray (n,)) : model parameters  b (scalar)       : model parameterReturns:dj_dw (ndarray (n,)): The gradient of the cost w.r.t. the parameters w. dj_db (scalar):       The gradient of the cost w.r.t. the parameter b. """m,n = X.shape           #(number of examples, number of features)dj_dw = np.zeros((n,))dj_db = 0.for i in range(m):                             err = (np.dot(X[i], w) + b) - y[i]   for j in range(n):                         dj_dw[j] = dj_dw[j] + err * X[i, j]    dj_db = dj_db + err                        dj_dw = dj_dw / m                                dj_db = dj_db / m                                return dj_db, dj_dw#Compute and display gradient 
tmp_dj_db, tmp_dj_dw = compute_gradient(X_train, y_train, w_init, b_init)
print(f'dj_db at initial w,b: {tmp_dj_db}')
print(f'dj_dw at initial w,b: \n {tmp_dj_dw}')#显示结果如下:
#dj_db at initial w,b: -1.673925169143331e-06
#dj_dw at initial w,b: 
#[-2.73e-03 -6.27e-06 -2.22e-06 -6.92e-05]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323468.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TinyTu-跨平台图片压缩软件

我平时压缩图片通常会使用类似tinify这样的在线图片压缩网站,这些网站有很多,但使用起来总是感觉不太舒爽,似乎差了点什么,仔细想想它们或多或少有这些缺点: 有的网站需要收费或者半收费。支持图片格式不全&#xff0…

BERT(从理论到实践): Bidirectional Encoder Representations from Transformers【3】

这是本系列文章中的第3弹,请确保你已经读过并了解之前文章所讲的内容,因为对于已经解释过的概念或API,本文不会再赘述。 本文要利用BERT实现一个“垃圾邮件分类”的任务,这也是NLP中一个很常见的任务:Text Classification。我们的实验环境仍然是Python3+Tensorflow/Keras…

对低效的会议说“不!”

根据微软对全球 31, 000 名员工开展的一项调查,低效的会议是影响工作效率的第一大干扰因素,其次是召开过多的会议。 大大小小的同步会、讨论会、审查会、复盘会不仅将工作时间拆解得支离破碎,还会让成员因「会议恢复综合症」而无法立即从无效…

DevOps(9)

目录 45.如何在Linux中将一个文件附加到另一个文件? 46.解释如何使用终端找到文件? 47.解释如何使用终端创建文件夹? 48.解释如何使用终端查看文本文件? 49.解释如何在Ubuntu LAMP堆栈上启用curl? 50.解释如何在…

排除启动类故障----三大实验

目录 一、模拟破坏mbr和分区表然后修复 二、修复grub引导故障 三、遗忘root用户密码 一、模拟破坏mbr和分区表然后修复 1、mbr处于第一块磁盘的第一个物理扇区,总共512个字节,前446个字节是grub程序,后面64个字节是分区表 2、故障原因&a…

# [NOIP2016 提高组] 玩具谜题#洛谷

题目背景 NOIP2016 提高组 D1T1 题目描述 小南有一套可爱的玩具小人,它们各有不同的职业。 有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例

对于一个TcpServer来说,它的灵魂是什么?就是需要提供一个事件循环EventLop(EventLoop),不停地去检测有没有客户端的连接到达,有没有客户端给服务器发送数据,描述的这些动作,反应堆模型能够胜任。当服务器和…

再次拓宽信创生态版图,思迈特与统信软件完成产品兼容适配认证

近日,思迈特软件与统信软件科技有限公司(简称“统信软件”)完成产品兼容性适配互认证,加速国产信创生态化建设进程。 本次测试由商业智能与数据分析软件(简称:Smartbi Insight V11)产品与统信服…

SQL中 Group by Grouping Sets 分组的用法

文章目录 1. 用法2. 语法3. 实际应用3.1 求总和与小计3.2 按多个维度分组3.3 标记小计和总计 1. 用法 将Grouping Sets 运算符添加到Group by 子句中,使用Grouping Set 可以在一个查询中指定数据的多个分组,其结果与针对指定的组执行union all 运算等效…

数据结构基本概念

数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。它包括数据的逻辑结构、数据的存储结构和数据的基本运算。 数据的逻辑结构 数据的逻辑结构是指数据元素之间的逻辑关系。所谓逻辑关系是指数据元素之间的关联方式或“邻接关系”。 逻辑结构与数据元素本…

GeoServe本地部署结合内网穿透实现远程访问Web管理界面

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入…

DevOps(8)

目录 36.当发出的命令与上次使用时产生的结果不同时,会出现什么问题? 37./usr /local的内容是什么? 38.你如何终止正在进行的流程? 39.如何在命令行提示符中插入注释? 40.什么是命令分组以及他是如何工作的&…