简单的线性回归问题-TensorFlow+MATLAB·
首先我们要试验的是 人体脂肪fat和年龄age以及体重weight之间的关系,我们的目标就是得到一个最优化的平面来表示三者之间的关系:
TensorFlow的程序如下:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
W = tf.Variable(tf.zeros([2, 1], name="weight_age"))
b = tf.Variable(0.0, name="bias") def inference(X):
return tf.matmul(X, W) + b def loss(X, Y):
Y_predicted = inference(X)
return tf.reduce_sum(tf.square(Y-Y_predicted)) def inputs():
weight_age = [[84,46],[93,20],[65,52],[70,30],[76,57],[69,25],[63,28],[72,36],[79,57],[75,44]
,[27,24],[89,31],[65,52],[57,23],[59,60],[69,48],[60,34],[79,51],[75,50],[82,34]
,[59,46],[67,23],[85,37],[55,40],[63,30]]
blood_fat_content = [354,190,405,263,451,302,288,385,402,365,209,290,346
,254,395,434,220,374,308,220,311,181,274,303,244]
return tf.to_float(weight_age), tf.to_float(blood_fat_content) def train(total_loss):
learning_rate = 0.00000001
return tf.train.GradientDescentOptimizer(learning_rate).minimize(total_loss) def evaluate(sess, X, Y):
print sess.run(inference([[80., 25.]]))
print sess.run(inference([[65., 25.]])) init = tf.global_variables_initializer() with tf.Session() as sess:
sess.run(init)
X, Y = inputs()
total_loss = loss(X, Y)
print "The total_loss:",total_loss
train_op = train(total_loss)
training_steps = 10000
for step in range(training_steps):
sess.run([train_op])
if step % 1000 == 0:
print "loss:", sess.run([total_loss])
evaluate(sess, X, Y)
print 'W is:',W.eval()
print 'b is:',b.eval()
sess.close()
程序中的数据散点图如下:

通过TensorFlow得到的最终的W的取值和b的取值如下所示:

现在我们将得到的W的数据和b的数据绘制平面(MATLAB程序如下):
% TensorFlow Data Plot Script For Matlab%
weight_age = [[84,46];[93,20];[65,52];[70,30];[76,57];[69,25];[63,28];[72,36];
[79,57];[75,44];[27,24];[89,31];[65,52];[57,23];[59,60];[69,48];[60,34];
[79,51];[75,50];[82,34];[59,46];[67,23];[85,37];[55,40];[63,30]]; % 25*2
weight = weight_age(:,1); %25*1
age = weight_age(:,2); %25*1
blood_fat_content = [354,190,405,263,451,302,288,385,402,365,209,290,346,254,395,434,220,374,308,220,311,181,274,303,244]; % 1*25
Fat = zeros(max(weight),max(age));
for i=1:25
Fat(weight(i),age(i)) = blood_fat_content(i);
end
figure,plot3(weight,age,blood_fat_content','.')
hold on % 平面拟合
A = 3.23492765;
B = 1.94148386;
C = 1.15458;
[x,y] = meshgrid(0:1:90);
z = A*x+B*y+C; mesh(z)
结果图如下所示:

注:这里在实验的过程中,碰到一些问题,当我把learning_rate设置为0.000001时,未能得到相应的结果,total_loss=nan,也就是说梯度下降法的过程没有收敛,导致无法得到相应的数据结果!(还需要注意你的是python3还是Python2,这里的print 需要修改一下哦!)关于参数设定的学习还是慢慢来吧~
简单的线性回归问题-TensorFlow+MATLAB·的更多相关文章
- 【学习笔记】tensorflow实现一个简单的线性回归
目录 准备知识 Tensorflow运算API 梯度下降API 简单的线性回归的实现 建立事件文件 变量作用域 增加变量显示 模型的保存与加载 自定义命令行参数 准备知识 Tensorflow运算AP ...
- 用Tensorflow完成简单的线性回归模型
思路:在数据上选择一条直线y=Wx+b,在这条直线上附件随机生成一些数据点如下图,让TensorFlow建立回归模型,去学习什么样的W和b能更好去拟合这些数据点. 1)随机生成1000个数据点,围绕在 ...
- TensorFlow——热身运动:简单的线性回归
过程: 先用numpy建立100个数据点,再用梯度下滑工具来拟合,得到完美的回归线. # _*_coding:utf-8_*_ import tensorflow as tf import numpy ...
- 机器学习笔记(一)—— 线性回归问题与Matlab求解
给你多组数据集,例如给你很多房子的面积.房子距离市中心的距离.房子的价格,然后再给你一组面积. 距离,让你预测房价.这类问题称为回归问题. 回归问题(Regression) 是给定多个自变量.一个因变 ...
- pytorch(04)简单的线性回归
线性回归 线性回归是分析一个变量与另外一个变量之间关系的方法 因变量:y 自变量:x 关系:线性 y = wx+b 分析:求解w,b 求解步骤: 确定模型,Model:y = wx+b 选择损失函数, ...
- 深度学习_1_Tensorflow_1
# 深度学习 # 图像识别,自然语言处理 # 机器学习 深度学习 # 分类:神经网络(简单) 神经网络(深度) # 回归 图像:卷积神经网络 # 自然语言处理:循环神经网络 # cpu:运行操作系统, ...
- TensorFlow从0到1之TensorFlow实现简单线性回归(15)
本节将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bos ...
- TensorFlow简单线性回归
TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...
- [tensorflow] 线性回归模型实现
在这一篇博客中大概讲一下用tensorflow如何实现一个简单的线性回归模型,其中就可能涉及到一些tensorflow的基本概念和操作,然后因为我只是入门了点tensorflow,所以我只能对部分代码 ...
随机推荐
- ThinkPHP5.0版本和ThinkPHP3.2版本的区别
5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规 ...
- be 动词
be 动词:表达人或事物的状态,即身份.性质.特征状态等 be动词 在翻译里面我们称之为缺项词,在我们的文化中很难找到一个具体的词汇与之像应对,我们只能用一个句子去解释它. be动词主要是用来表达人或 ...
- 论如何把JS踩在脚下 —— JQuery基础及Ajax请求详解
一.什么是JQuery? JQuery是一种JavaScript框架,是一堆大神搞出来的能够让前端程序猿敲更少代码.实现更多功能的工具(在此,跪谢各位JQuery开发大大们!!!).JQuery的使用 ...
- 【web前端开发】浏览器兼容性处理
1.居中问题div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto;2.高度问题两上下排列或嵌套的div,上面的div设置高度(height),如果div里的 ...
- 网络编程4之UDP协议
一.定义 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种[无 ...
- Unity3d: 资源释放时存储空间不足引发的思考和遇到的问题
手机游戏第一次启动基本上都会做资源释放的操作,这个时候需要考虑存储空间是否足够,但是Unity没有自带获取设备存储空间大小的 接口,需要调用本地方法分别去android或ios获取,这样挺麻烦的.而且 ...
- selenium+python等待时间
等待时间可以有多种 1.硬等待 import time time.sleep(x)#等待x秒 2.浏览器每次查找一个元素都进行等待 import time br.implicitly_wait(x)# ...
- JS 事件派发器EventDispatcher
在Java和AS中经常用到EventDispatcher,写了一个JS版本的. addListener :添加事件监听器 removeListener:移除事件监听器 dispatchEvent:派发 ...
- jQuery未定义错误原因(jQuery is not define)
使用jQuery时,必须把它写在最前面,这样浏览器才会先加载jQuery,否则会提示缺少对象. 正确 <script type="text/javascript" src=& ...
- 百度地图 js api 实现 line 居中显示
项目中有个需求需要在百度地图的中心显示画的线,以前用过mapPanto这个方法,传入坐标就可以将地图平移到这个坐标,不过不知道如何获取线的中心点,看了别人的代码,有以下两个函数可以实现这个功能 get ...