线性回归

题目和数据

  • 题目:使用ex1data1.txt中给出的两个变量,分别设为x,y,来预测卡车利润(y)的收益值。
    在数据集,第一列表示城市人数(x),第二列该城市的卡车利润(y)

  • 数据集:

6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705

pytorch实现流程

导入包

import numpy as np
import matplotlib.pyplot as plt
import torch
from torch.autograd import Variable
import torch.nn as nn

得到并处理数据

#得到数据
data = np.loadtxt('ex1data2.txt',delimiter=',')
x = data[:,0]
y = data[:,1]
# plt.scatter(x,y)
# plt.show()#处理数据
x = np.array(x,dtype='float32')
x = x.reshape(-1,1)
x = Variable(torch.from_numpy(x))
y = np.array(y,dtype='float32')
y = y.reshape(-1,1)
y = Variable(torch.from_numpy(y))

必须要将得到的数据转成torch矩阵形式。

训练模型并传入维度

class LinearRegression(nn.Module):def __init__(self,input_size,output_size):super(LinearRegression,self).__init__()self.linear = nn.Linear(input_dim,output_dim)def forward(self,the):return self.linear(the)#定义模型
input_dim = 1
output_dim = 1
model = LinearRegression(input_dim,output_dim)

LinearRegression线性回归函数是自定义的,而nn.Linear是官方给出的函数,所以传入input_dim,output_dim两个维度(即输入和输出各是多少变量)。并在其中做好前向传播。

model是得到线性回归这一模型,方便之后运用。

设置损失函数和优化函数,找到最合适的学习率

#MSE损失函数
mse = nn.MSELoss()#找最合适的学习率α,使得误差最小
learning_rate = 1e-2     #决定能够多快到达最低点
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)    #优化函数

损失函数nn.MSELoss()是为了找到误差。

优化函数torch.optim.SGD(),对模型进行优化,相当于梯度下降的作用。
其中的lr储存学习率α。

训练模型,降低损失

#训练模型,降低损失
# loss_list = []
iteration_number = 1001 #迭代次数
for iteration in range(iteration_number):#向前传播计算损失函数results = model(x)  #训练模型,向前得到结果loss = mse(results,y)   #损失函数#向后传播计算梯度optimizer.zero_grad()   #优化器.参数梯度置零,每次迭代都要清零loss.backward()     #反向传播optimizer.step()    #更新参数# loss_list.append(loss.data)     #储存损失if (iteration % 50 == 0):print('epoch {},loss {}'.format(iteration,loss.data))

规定迭代次数,多次传参,提高精准度。
model是线性回归函数,其中自带前向传播得到处理后的数据。再调用损失函数mse()计算得到误差值(损失)。

optimizer.zero_grad()将在每次迭代过程中将梯度重新置零,以便计算梯度。

loss.backward()是将得到的损失函数反向传播,计算梯度,并使用optimizer.step()更新参数。

进行预测,数据可视化

#进行预测
predicted = model(x).data.numpy()
plt.plot(x, y, 'ro', label='Original Data')
plt.plot(x, predicted, label='Fitting Line')#数据可视化
plt.xlabel("Population")
plt.ylabel("Profit")plt.show()

predicted得到处理后的拟合数据。
并使用plt进行作图,实现数据可视化。

最后结果

完整代码

import numpy as np
import matplotlib.pyplot as plt
import torch
from torch.autograd import Variable
import torch.nn as nn
# import warnings
# warnings.filterwarnings("ignore")#得到数据
data = np.loadtxt('ex1data1.txt',delimiter=',')
x = data[:,0]
y = data[:,1]
# plt.scatter(x,y)
# plt.show()#处理数据
x = np.array(x,dtype='float32')
x = x.reshape(-1,1)
x = Variable(torch.from_numpy(x))
y = np.array(y,dtype='float32')
y = y.reshape(-1,1)
y = Variable(torch.from_numpy(y))
print(x)#训练模型
class LinearRegression(nn.Module):def __init__(self,input_size,output_size):super(LinearRegression,self).__init__()self.linear = nn.Linear(input_dim,output_dim)def forward(self,the):return self.linear(the)#定义模型
input_dim = 1
output_dim = 1
model = LinearRegression(input_dim,output_dim)#MSE损失函数
mse = nn.MSELoss()#找最合适的学习率α,使得误差最小
learning_rate = 1e-2     #决定能够多块到达最低点
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)    #优化函数#训练模型,降低损失
# loss_list = []
iteration_number = 1001 #迭代次数
for iteration in range(iteration_number):#向前传播计算损失函数results = model(x)  #训练模型,向前得到结果loss = mse(results,y)   #损失函数#向后传播计算梯度optimizer.zero_grad()   #优化器.参数梯度置零,每次迭代都要清零loss.backward()     #反向传播optimizer.step()    #更新参数# loss_list.append(loss.data)     #储存损失if (iteration % 50 == 0):print('epoch {},loss {}'.format(iteration,loss.data))#进行预测
predicted = model(x).data.numpy()
plt.plot(x, y, 'ro', label='Original Data')
plt.plot(x, predicted, label='Fitting Line')#数据可视化
plt.xlabel("Population")
plt.ylabel("Profit")plt.show()print("训练结束")

实现效果图

pytorch实现吴恩达机器学习课后作业——线性回归相关推荐

  1. 吴恩达机器学习课后作业——线性回归(Python实现)

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  2. 吴恩达机器学习课后作业——线性回归

    一.单变量线性回归 一.作业内容 假设你是一家特许经营餐厅的首席执行官,正在考虑在不同的城市开一家新店,该连锁店已经在各个城市开设了餐车,文件ex1data1.txt中包含你这些城市的利润和人口数据. ...

  3. 目录:吴恩达机器学习课后作业

    简单介绍 本博客为作者自行完成的吴恩达机器学习课后练习题目录,均使用PyTorch进行实现,无法保证对错,仅供参考. 作业题目以及源代码 百度云盘连接 提取码:3dvb 题目的命名方式与下表中的作业名 ...

  4. 吴恩达机器学习课后作业——偏差和方差

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  5. 吴恩达机器学习课后作业ex1(python实现)

    作业介绍 吴恩达老师的作业资源可以在github或者网上找到 . ex1主要是对线性回归的一些复习和梯度下降.损失函数等的具体代码实现. pdf文件是对作业的说明.文件夹则是作业数据的各种格式,pyt ...

  6. 吴恩达机器学习课后作业1——单变量线性回归(Linear regression with one variable)

    1. 问题和数据 假设你是一家连锁餐车店的老板,但是你又和别的土老板不一样,你又刚好是个懂线性回归,还懂编程的老板,正在考虑在不同的城市开一家新店.该连锁店已经在各个城市开设了餐车,你可以获得这些城市 ...

  7. 吴恩达机器学习课后作业1.1——多变量线性回归(Linear regression with multiple variable)

    1. 问题和数据 假设你要卖掉你的房子,你想知道一个好的市场价格是多少.其中一种方法是,首先收集最近出售的房屋的信息.在本部分的练习中,你将使用多元线性回归来预测房屋价格. 数据ex1data2.tx ...

  8. 吴恩达机器学习课后作业——SVM支持向量机

    支持向量机 一.作业内容 在本练习的前半部分,您将对各种示例2D数据集使用支持向量机(svm).使用这些数据集进行试验将帮助您直观地了解支持向量机的工作方式,以及如何在支持向量机中使用高斯核.在练习的 ...

  9. 吴恩达机器学习课后作业ex3(python实现)

    ex3是机器学习中经典的手写数字识别(使用逻辑回归分类),给出的数据是.mat后缀,可以用python中load方法加载数据.手写体"1"到"9"的类别分别标为 ...

最新文章

  1. django ajax传参数
  2. @order注解_Spring Boot+OAuth2,一个注解搞定单点登录!
  3. android 视频播放滤镜,用openGL ES+MediaPlayer 渲染播放视频+滤镜效果
  4. python错误bug调试问题汇总
  5. 内核热补丁,真的安全么?
  6. linux 两块硬盘 分区,linux 两块硬盘分区,这个是什么/dev/mapper/VolGroup00-LogVol00
  7. 华为Mate30系列前面板曝光:双曲面刘海屏再获证实
  8. C语言char对应的码,char码值对应列表大全
  9. Anders Hejlsberg谈C#、Java和C++中的泛型
  10. 百练(十三~十六)题解
  11. 蓝桥杯2016年七届C/C++省赛C组第一题-报纸页数
  12. Java获取姓名的首字母_java获取中文拼音首字母的实例
  13. APK应用程序的解包、修改、编辑、打包及应用(一)
  14. 九款远程办公软件,打破时空限制
  15. 硬件负载均衡设备介绍
  16. 全球智慧能源解决方案服务商「雄韬股份」牵手企企通,谱写采购数字化变革之路
  17. 移动硬盘 Windows-延缓写入失败:无法为某文件保存所有数据,数据已经丢失
  18. 算法训练Day6:有效的字母异位词, 两个数组的交集,快乐数,两数之和
  19. yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1
  20. vue项目上传图片的方法

热门文章

  1. 基于16S的细菌群落功能预测工具Tax4Fun2
  2. ORACLE ORA-01688: unable to extend table 的错误处理
  3. 计算机项目uniapp(毕设课设)之 含文档+PPT+源码等]精品基于Uniapp+SSM的安卓的掌上校园系统食堂缴费图书馆预约
  4. php字符串转数组,数组合并成字符串
  5. 第46篇 Android Studio实现生命数字游戏(一)数据分析
  6. 安利几个小妙招教你如何快速翻译PDF文件
  7. Java容器有哪些?哪些是同步容器,哪些是并发容器?
  8. ubuntu 温度监视器_如何检查和监视计算机/ PC温度?
  9. 安卓主板与pc主板通信_如何在Windows PC上检查主板型号
  10. 数图:中值滤波python实现