单变量与多变量线性回归(Linear Regression with One Variable)




2.1 线性回归算法模型表示

让我们通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。那么,你可以做的一件事就是构建一个模型,也许是条直线,从这个数据模型上来看,也许你可以告诉你的朋友,他能以大约220000(美元)左右的价格卖掉这个房子。这就是监督学习算法的一个例子。

它被称作监督学习是因为对于每个数据来说,我们给出了“正确的答案”,即告诉我们:根据我们的数据来说,房子实际的价格是多少,这是一个回归问题。回归指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格,同时,还有另一种最常见的监督学习方式,叫做分类问题,当我们想要预测离散的输出值,例如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是0/1离散输出的问题。

更进一步来说,在监督学习中我们有一个数据集,这个数据集被称训练集。

我将在整个课程中用小写的来表示训练样本的数目。

以之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示:

我们将要用来描述这个回归问题的标记如下:

m 代表训练集中实例的数量

 x 代表特征/输入变量

 y 代表目标变量/输出变量

 (x,y)代表训练集中的实例

 (x(i),y(i))代表第i个观察实例

 h代表学习算法的解决方案或函数也称为假设(hypothesis

监督学习算法的工作方式,通过将数据集中的训练集传入线性模型算法中,即可输出一个

我们可以看到这里有我们的训练集里房屋价格 我们把它喂给我们的学习算法,学习算法的工作了,然后输出一个函数,通常表示为小写 h表示。 代表hypothesis(假设),表示一个函数,输入是房屋尺寸大小,就像你朋友想出售的房屋,因此 h根据输入的x值来得出y值,y值对应房子的价格 因此,h是一个从x到y的函数映射。

我将选择最初的使用规则代表hypothesis,因而,要解决房价预测问题,我们实际上是要将训练集“喂”给我们的学习算法,进而学习得到一个假设,然后将我们要预测的房屋的尺寸作为输入变量输入给,预测出该房屋的交易价格作为输出变量输出为结果。那么,对于我们的房价预测问题,我们该如何表达 ?

一种可能的表达方式为:

因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。

2.2 代价函数

代价函数的概念有助于理解如何把最有可能的直线与数据相拟合。

如图:

在线性回归中我们有一个像这样的训练集,代表了训练样本的数量,比如 m=47。而我们的假设函数,也就是用来进行预测的函数,是这样的线性函数形式:

接下来我们会引入一些术语我们现在要做的便是为我们的模型选择合适的参数θ0和θ1 ,在房价问题这个例子中便是直线的斜率和在y轴上的截距。

我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差modeling error)。

我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价函数

 最小。

我们绘制一个等高线图,三个坐标分别为和θ0、θ1和J(θ0,θ1):

则可以看出在三维空间中存在一个使得J(θ0,θ1)最小的点。

代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。


通过穷举法实现实现寻找最低点or最小误差

数据集设计

问题:如图一某校学生在A课程中每周投入时间y与最终成绩的数值x,因此设y=wx,设计算法求w的权重的最佳拟合数值。 

图1 数据集

图2 损失函数

 代码:

import numpy as np
import matplotlib.pyplot as plt#数据集
x_data=[1.0,2.0,3.0]
y_data=[2.0,4.0,6.0]#构建 y = w * x ===>预测值
def forward(x):return x*w#计算loss 即 loss 公式如上图,预测值减去原始数据求误差
def loss(x,y):y_pred=forward(x)return (y_pred-y)*(y_pred-y)
#权重w的列表
w_list=[]
#损失loss的列表
mse_list=[]#对w使用穷举法,计算机y=w*x的最佳拟合值
for w in np.arange(0.0,4.1,0.1):print(w)l_sum=0#zip()当传递参数长度不一样时候,以短的为标准for x_val,y_val in zip(x_data,y_data):#计算新的预测值y_pred_val=forward(x_val)#新预测值与loss_val=loss(x_val,y_val)l_sum= l_sum+loss_valprint(x_val,y_val,y_pred_val,loss_val)#除以样本数,即平均误差MSR=l_sum/3w_list.append(w)mse_list.append(MSR)
#绘制损失loss与权重w之间的函数图像
plt.plot(w_list,mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()

运行结果:可知当w为2时loss的损失最小


问题2

作业题目:实现线性模型(y=wx+b)并输出loss的3D图像。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D#数据集
x_data = [1.0,2.0,3.0]
y_data = [5.0,8.0,11.0]# 数据集长度
m=len(x_data)# 权值
W=np.arange(0.0,4.0,0.1)
B=np.arange(-2.0,2.0,0.1)
[w,b]=np.meshgrid(W,B)
#即三维坐标下 W做X周 B做Y周,在绘图时候一定要用小写,因为小写是N×N的二维数组,大写是一维N个数组成的数组# 注意矩阵的运算
def farword(x):return x * w+bdef loss(y_test,y):return (y_test-y)*(y_test-y)total_loss = 0
for x_val,y_val in zip(x_data,y_data):y_test=farword(x_val)total_loss=(total_loss+loss(y_test,y_val))/mfig = plt.figure()# MatplotlibDeprecationWarning: Calling gca() with keyword arguments was deprecated in Matplotlib 3.4. Starting two minor releases later, gca() will take no keyword arguments. The gca() function should only be used to get the current axes, or if no axes exist, create new axes with default keyword arguments. To create a new axes with non-default arguments, use plt.axes() or plt.subplot().
# ax = fig.gca(projection='3d') 改为
# ax = fig.add_subplot(projection='3d')
ax = Axes3D(fig)print(W.shape) #(40,)
print(W)
print(w.shape)#(40,40)
print(w)# ax.plot_surface(W,B,total_loss)
ax.plot_surface(w,b,total_loss)
plt.show()

效果图

 numpy.meshgrid()理解

numpy.meshgrid()理解_lllxxq141592654的博客-CSDN博客https://blog.csdn.net/lllxxq141592654/article/details/81532855

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

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

相关文章

查看linux IO地址范围

端口统一编址原理是把IO控制器中的端口地址归入存储器寻址空间范围内,因此这种编址方式也成为存储器映像编址。CPU访问一个端口的操作与访问内存的操作一样,也使用访问内存的指令。 在linux下可以查看设置的IO地址范围

命令行import torch正常,但pycharm中显示“No module named torch”解决方法

pytorch第一步配置环境测试运行就遇到了如题目所述问题,问题如图: 步骤一 首先检查环境导入是否有问题,工具栏file–settings–project–project interpreter,在这里添加配置好的conda环境,注意添加时要选中对应的con…

机械厂html5手机模板,营销型机械消费设备企业通用织梦模板(带html5手机端) v1.0...

营销型机械消费设备企业通用织梦模板简介营销型机械消费设备企业通用织梦模板(带html5手机端)v1.0是一个自适应手机端和PC端的最新版织梦V5.7为内核的网站模板,软件兼容主流浏览器,模板包含安装说明,并包含测试数据。dedecms最新版内核开发&a…

Tensorboard --logdir=logs 无法显示图像的处理办法

Tensorboard --logdirlogs 无法显示图像的处理办法 问题描述: 解决方案:【要和工程目录对应!写全日志地址】 tensorboard --logdir"torch learning\logs" #注意要是双引号,而且路径不能单单是logs,还要包括…

C# 多种方式发送邮件(附帮助类)

因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用~ QQ邮箱发送邮件 #region 发送邮箱try{MailMessage mail new MailMessage();MailAddress from new MailAddress("发件…

安霸SPI 剖析

最近在搞单片机和A5S的SPI通信 1、A5S是跑的是ITRON的系统、有自己相关的SPI API函数2、单片机这边也是可以熟悉了,发送,接收什么的,我都可以自模拟出来3、但是问题是,A5S上面的API函数的工作是如何的,我一直没怎么弄清…

linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植

LED 驱动程序移植 编者;对于led的驱动程序,很多文章都有详细的介绍,我的博客里面有一篇专门详解这个的。需要看的,可以找下。led灯的驱动其实就代表了I/O口的驱动。在linux系统下,操作一个I/O口,可以说实在…

单变量批量梯度下降算法与单变量随机梯度下降算法

2.3 代价函数的直观理解I 让我们通过一些例子来获取一些直观的感受,看看代价函数到底是在干什么。 2.4 代价函数的直观理解II 代价函数的样子类似于等高线图,则可以看出在三维空间中存在一个J(θ0,θ1)使得最小的点。 通过这些图形,我希望你…

一台计算机连入计算机网络后通过该计算机,一台计算机连入计算机网络后,该计算机( )。...

摘要:计算机连当碰撞已不可避免时,船舶应根据良好船艺的要求采取最有效的行动以减小碰撞的损失,下列说法正确的是()。①应避免两船首相撞;②应避免一船船首撞入他船机舱附近或船中;③应尽量使两船相撞前相对速度达到最大;④应尽量使两船相撞前相对速度达到最小。算机…

反向传播+代码实现

ywx的反向传播代码实现 import torch x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]#w是Tensor(张量类型),Tensor中包含data和grad,data和grad也是Tensor。 # grad初始为None,调用l.backward()方法后w.grad为Tensor, # 故更…

计算机网络阅读报告,计算机网络实验二报告

计算机网络实验二报告 (5页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!11.90 积分计算机网络实验报告课程_ 计算机网络 _ 实验名称 TCP/IP协议分析与验证 姓 名 实 验 日 期&#xff…

使用Pytorch处理多维特征的输入

下图这个预测一个人在一年之后得糖尿病的概率的例子,这个时候我们的输入将会有很多的指标。你可以把它看成是我们体检的各种值。最后一排的外代表了他是否会得糖尿病。 那么多维的特征输入应该怎么办呢?我们就需要把每一个特征x付以相应的权重。在进行逻…

dubbo学习 三 dubbox概述

当当网根据自身的需求,对dubbo进行了扩展就叫成了dubbox。具体的使用方法可以参照官网各种例子:http://dangdangdotcom.github.io/dubbox/ 支持rest风格远程调用 之前了解过restful服务具体是什么,resteasy也了解过,所以看到就可以…

使用Pytorch完成多分类问题

多分类问题在最后的输出层采用的Softmax Layer,其具有两个特点:1.每个输出的值都是在(0,1);2.所有值加起来和为1. 假设是最后线性层的输出,则对应的Softmax function为: 输出经过sigmoid运算即可是西安输出的分类概率…

PyTorch的nn.Linear()详解

1. nn.Linear() nn.Linear():用于设置网络中的全连接层,需要注意的是全连接层的输入与输出都是二维张量 一般形状为[batch_size, size],不同于卷积层要求输入输出是四维张量。其用法与形参说明如下: in_features指的是输入的二维…

罗彻斯特大学计算机科学系专业排名,罗切斯特大学计算机科学专业

罗切斯特大学(University of Rochester,U of R)建立于1850年,是一所美国著名的私立研究型大学,“新常春藤”联盟之一,北美大学协会(AAU)成员、世界大学联盟成员。360老师介绍,学校的7位学者是美国国家科学院院士&#…

系统权限管理设计 (转)

权限设计(初稿) 1. 前言: 权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。针对不同的应用,需要根据项目的实…

卷积神经网络(基础篇)

说明 0、前一部分叫做Feature Extraction,后一部分叫做classification 1、每一个卷积核它的通道数量要求和输入通道是一样的。这种卷积核的总数有多少个和你输出通道的数量是一样的。 2、卷积(convolution)后,C(Channels)变,W(width)和H(Heig…

Inception(Pytorch实现)

论文在此: Going deeper with convolutions 论文下载: https://arxiv.org/pdf/1409.4842.pdf 网络结构图: import torch import torch.nn as nn import torch.nn.functional as Fclass Inception3(nn.Module):def __init__(self, num_classes1000, aux_logitsTrue, transform…

SecureCRT 用来当串口工具的设置

今天从淘宝网上买的USB转串口线终于到了,从网上下载了驱动,关于USB转串口驱动在我上传的资源里面有,关于SecureCRT这个串口调试工具我也上传了,是个绿色免安装版本。 刚开始的时候一步一步的设置串口,连接串口也可以连…