线性回归问题

 # encoding: utf-8

 import numpy as np
import matplotlib.pyplot as plt data = []
for i in range(100):
x = np.random.uniform(-10., 10.) #均匀分布产生x
eps = np.random.normal(0., 0.01) #高斯分布产生一个误差值
y = 1.477*x + 0.089 +eps #计算得到y值
data.append([x, y]) #保存到data中 data = np.array(data) #转成数组的方式方便处理
plt.plot(data[:,0], data[:,1], 'b') #自己引入用于观察原始数据
#plt.show()
plt.savefig('original data.png') def mse(b, w, points): #计算所有点的预测值和真实值之间的均方误差
totalError = 0
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
totalError += (y -(w*x + b))**2 #真实值减预测值的平方
return totalError/float(len(points)) #返回平均误差值 def step_gradient(b_current, w_current, points, lr): #预测模型中梯度下降方式优化b和w
b_gradient = 0
w_gradient = 0
M = float(len(points))
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
b_gradient += (2/M) * ((w_current*x + b_current) - y) #求偏导数的公式可知
w_gradient += (2/M)*x*((w_current*x + b_current) - y) #求偏导数的公式可知
new_b = b_current - (lr*b_gradient) #更新参数,使用了梯度下降法
new_w = w_current - (lr*w_gradient) #更新参数,使用了梯度下降法
return [new_b, new_w] def gradient_descent(points, starting_b, starting_w, lr, num_iterations): #循环更新w,b多次
b = starting_b
w = starting_w
loss_data = []
for step in range(num_iterations): #计算并更新一次
b, w = step_gradient(b, w, np.array(points), lr) #更新了这一次的b,w
loss = mse(b, w, points)
loss_data.append([step+1, loss])
if step % 50 == 0: #每50次输出一回
print(f"iteration:{step}, loss{loss}, w:{w}, b:{b}")
return [b, w, loss_data] def main():
lr = 0.01 #学习率,梯度下降算法中的参数
initial_b = 0 #初值
initial_w = 0
num_iterations = 1000 #学习100轮
[b, w, loss_data] = gradient_descent(data, initial_b, initial_w, lr, num_iterations)
loss = mse(b, w, data)
print(f'Final loss:{loss}, w:{w}, b:{b}') plt.figure() #观察loss每一步情况
loss_data = np.array(loss_data)
plt.plot(loss_data[:,0], loss_data[:,1], 'g')
plt.savefig('loss.png')
#plt.show() plt.figure() #观察最终的拟合效果
y_fin = w*data[:,0] + b + eps
plt.plot(data[:,0], y_fin, 'r')
#plt.show()
plt.savefig('final data.png') if __name__ == '__main__':
main()

original data (y = w*x + b +eps)

loss rate

final data (y' = w' *x + b' + eps )

最终loss趋近9.17*10^-5, w趋近1.4768, b趋近0.0900

真实的w值1.477, b为0.089

对于线性回归问题,适用性挺好!

主要的数学代码能理解,唯有取梯度的反方向更新参数,不是很能理解!

这里还没有用到tensorflow,下一次更新基础知识!

tensorflow2.0 学习(二)的更多相关文章

  1. tensorflow2.0 学习(三)

    用tensorflow2.0 版回顾了一下mnist的学习 代码如下,感觉这个版本下的mnist学习更简洁,更方便 关于tensorflow的基础知识,这里就不更新了,用到什么就到网上取搜索相关的知识 ...

  2. tensorflow2.0 学习(一)

    虽说是按<TensorFlow深度学习>这本书来学习的,但是总会碰到新的问题!记录下这些问题,有利于巩固知新. 之前学过一些tensorflow1.0的知识,到RNN这章节,后面没有再继续 ...

  3. Tensorflow2.0学习(一)

    站长资讯平台:今天学习一下Tensorflow2.0 的基础 核心库,@tf.function ,可以方便的将动态图的语言,变成静态图,在某种程度上进行计算加速 TensorFlow Lite Ten ...

  4. tensorflow2.0学习笔记

    今天我们开始学习tensorflow2.0,用一种简单和循循渐进的方式,带领大家亲身体验深度学习.学习的目录如下图所示: 1.简单的神经网络学习过程 1.1张量生成 1.2常用函数 1.3鸢尾花数据读 ...

  5. TensorFlow2.0(二):数学运算

    1 基本运算:加(+).减(-).点乘(*).除(/).地板除法(//).取余(%) 基本运算中所有实例都以下面的张量a.b为例进行: >>> a = tf.random.unifo ...

  6. tensorflow2.0学习笔记第一章第二节

    1.2常用函数 本节目标:掌握在建立和操作神经网络过程中常用的函数 # 常用函数 import tensorflow as tf import numpy as np # 强制Tensor的数据类型转 ...

  7. tensorflow2.0学习笔记第二章第四节

    2.4损失函数损失函数(loss):预测值(y)与已知答案(y_)的差距 nn优化目标:loss最小->-mse -自定义 -ce(cross entropy)均方误差mse:MSE(y_,y) ...

  8. tensorflow2.0学习笔记第二章第一节

    2.1预备知识 # 条件判断tf.where(条件语句,真返回A,假返回B) import tensorflow as tf a = tf.constant([1,2,3,1,1]) b = tf.c ...

  9. tensorflow2.0学习笔记第一章第一节

    一.简单的神经网络实现过程 1.1张量的生成 # 创建一个张量 #tf.constant(张量内容,dtpye=数据类型(可选)) import tensorflow as tf import num ...

随机推荐

  1. 2019-6-28笔记总结-编程语言发展史和python安装

    一.编程语言的发展史 1.机器语言(就是010101的二进制数,直接用二进制跟计算机直接沟通交流,直接操作硬件) 优点:计算机能够直接读懂,速度快 缺点:开发效率极低 2.汇编语言(用简单的英文标签来 ...

  2. expect——通过编写自动化脚本实现信息交互(整理)

    本文简要介绍了expect工具语言的功能.用法,并以实例来具体说明 expect是什么 Expect是一个免费的编程工具语言,用来完成通信过程中的交互式任务,而无需人的干预. 通过shell虽然可以实 ...

  3. 手把手教你做JavaWeb项目:登录模块

    现如今,无论是客户端还是移动端,无论是游戏登陆还是社交平台登陆,无处不在的“登陆”.那么你知道怎么制作吗?今天就为你娓娓道来: 用户登录 在各大信息管理系统中,登录功能是必不可少的,他的作用就是验证用 ...

  4. php GD 和图像处理函数, 制作一张图片

    php GD 和图像处理函数, 制作一张图片 // GD 和图像处理函数 // https://www.php.net/manual/zh/ref.image.php // https://www.p ...

  5. 详解java动态代理机制以及使用场景

    详解java动态代理机制以及使用场景 https://blog.csdn.net/u011784767/article/details/78281384 深入理解java动态代理的实现机制 https ...

  6. Python进阶----异常处理

    Python进阶----异常处理 一丶错误和异常   错误:       语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 ...

  7. permission

    import 'package:flutter/material.dart'; import 'dart:io'; import 'dart:async'; import 'package:rxdar ...

  8. Android EventBus使用大全

    添加依赖 implementation 'org.greenrobot:eventbus:3.1.1' public class HuaDongActivity extends Activity { ...

  9. 归并排序python实现源码

    将开发过程经常用到的一些代码片段收藏起来,下面的资料是关于归并排序python实现的代码,应该能对码农们有一些用. def mergesort(arr): if len(arr) == 1: retu ...

  10. iOS完整学习路线

    来源:http://www.cnblogs.com/mjios/p/3226954.html