机器人之机器学习:线性回归
小标 2018-10-17 来源 : 阅读 1439 评论 0

摘要:本文主要向大家介绍了机器人之机器学习:线性回归,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。

本文主要向大家介绍了机器人之机器学习:线性回归,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。

下面这个示例的思路,先讲解一下,不然不知道它们在干嘛:)

先给出一个线性方程(1),如下图:

利用这个方程生成一堆数据集,然后再建立一个线性回归模型(2),如下图:

等价于下面这样:

(注:上图中的b1 , b2 ... 其实相同)

再利用随机梯度下降法,进行迭代运算,计算预测值yhat,直到下面的损失函数

不断减小(即:收敛),然后看看这时得到的参数w(是一个向星)以及偏置值b是否跟线性方程中设定的参数[2, -3.4]以及4.2相同,如果很接近,说明我们用深度学习算法,基于一堆数据成功预测出了想要的结果(即:线性回归成功),这种已知答案,利用一堆数据进行训练的学习方法,也称为有监督学习。

 1 from mxnet import ndarray as nd 
 2 from mxnet import autograd 
 3 import random
  4  
  5 num_inputs = 2 
  6 num_examples = 1000 
  7  
  8 true_w = [2, -3.4] 
  9 true_b = 4.2
  10 
  11 X = nd.random_normal(shape=(num_examples, num_inputs)) #1000行,2列的数据集
  12 y = true_w[0] * X[:, 0] + true_w[1] * X[:, 1] + true_b #已知答案的结果
  13 y += .01 * nd.random_normal(shape=y.shape) #加入噪音
  14 
  15 batch_size = 10
  16 def data_iter():
  17     #产生一个随机索引列表
  18     idx = list(range(num_examples))
  19     random.shuffle(idx)
  20     for i in range(0, num_examples, batch_size):
  21         j = nd.array(idx[i:min(i+batch_size,num_examples)])
  22         yield nd.take(X, j), nd.take(y, j) #每次随机从X中取出10行数据,以及对应的结果y值
  23 
  24 #初始化模型参数(即:需要求解的参数变量)
  25 w = nd.random_normal(shape=(num_inputs, 1))
  26 b = nd.zeros((1,))
  27 params = [w, b]
  28 
  29 #创建梯度
  30 for param in params:
  31     param.attach_grad()
  32     
  33 #定义线性回归模型
  34 def net(X):
  35     return nd.dot(X, w) + b
  36 
  37 #定义损失函数
  38 def square_loss(yhat, y):
  39     # 注意这里我们把y变形成yhat的形状来避免自动广播
  40     return (yhat - y.reshape(yhat.shape)) ** 2
  41 
  42 #随机梯度下降法
  43 def SGD(params, lr):
  44     for param in params:
  45         param[:] = param - lr * param.grad
  46         
  47 
  48 #训练
  49 epochs = 5
  50 learning_rate = .001
  51 for e in range(epochs):
  52     total_loss = 0
  53     for data, label in data_iter():
  54         with autograd.record():
  55             output = net(data)
  56             loss = square_loss(output, label)
  57         loss.backward()
  58         SGD(params, learning_rate)
  59 
  60         total_loss += nd.sum(loss).asscalar()
  61     print("Epoch %d, average loss: %f" % (e, total_loss/num_examples))
  62 
  63 print(true_w) #打印答案
  64 print(w) #打印求解结果
  65 
  66 print(true_b) #打印答案
  67 print(b) #打印求解结果

Epoch 0, average loss: 6.012281Epoch 
1, average loss: 0.102830Epoch 
2, average loss: 0.001909Epoch 
3, average loss: 0.000133Epoch 
4, average loss: 0.000101 #
5次迭代后,已经快速收敛[2, -3.4] #已知答案[[ 2.00017834] #求解结果 [-3.40006614]]<NDArray 2x1 @cpu(0)>4.2[ 4.19863892]<NDArray 1 @cpu(0)>

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能智能机器人频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved