简单的线性回归问题-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 需要修改一下哦!)关于参数设定的学习还是慢慢来吧~

时间: 2024-11-25 18:22:29

简单的线性回归问题-TensorFlow+MATLAB·的相关文章

使用tensorflow进行简单的线性回归

使用tensorflow进行简单的线性回归 标签(空格分隔): tensorflow 数据准备 使用np.random.uniform()生成x方向的数据 使用np.random.uniform()生成bias数据 直线方程为y=0.1x + 0.2 使用梯度下降算法 代码 import numpy as np import tensorflow as tf path = 'D:\tensorflow_quant\ailib\log_tmp' # 生成x数据 points = 100 vecto

使用tensorflow实现最简单的线性回归算法

1 #线性回归:用线性模型y=Wx+b拟合sin 2 import numpy as np 3 import matplotlib.pyplot as plt 4 import tensorflow as tf 5 6 #数据,标签 7 x_data = np.linspace(-2*np.pi,2*np.pi,300) 8 noise = np.random.normal(-0.01,0.05,x_data.shape) 9 y_label = np.sin(x_data) + noise 1

第二篇[机器学习] 学习机器学习,从最简单的线性回归开始

机器学习,分为监督学习和无监督学习,监督学习里有回归和分类,分类有线性回归和逻辑回归. 从最简单的线性回归开始: 通过已有数据需要预测的线性方程: 实际值和预测值的误差,求最小误差函数(最小二乘法): 1.梯度下降法: 其中ε是步长,步长越大,下降越快,但是可能到不了局部最小值,步长越小,下降越慢,计算越多 2.正规方程直接求解: 最小二乘法正规方程组的详细推导: https://zhuanlan.zhihu.com/p/28190949?utm_medium=social&utm_source

用Tensorflow完成简单的线性回归模型

思路:在数据上选择一条直线y=Wx+b,在这条直线上附件随机生成一些数据点如下图,让TensorFlow建立回归模型,去学习什么样的W和b能更好去拟合这些数据点. 1)随机生成1000个数据点,围绕在y=0.1x+0.3 周围,设置W=0.1,b=0.3,届时看构建的模型是否能学习到w和b的值. import numpy as np import tensorflow as tf import matplotlib.pyplot as plt num_points=1000 vectors_se

TensorFlow——热身运动:简单的线性回归

过程: 先用numpy建立100个数据点,再用梯度下滑工具来拟合,得到完美的回归线. 1 # _*_coding:utf-8_*_ 2 import tensorflow as tf 3 import numpy as np 4 5 # 用numpy建立100个数据点,y=x*0.1+0.3 6 x_data = np.random.rand(100).astype("float32") 7 y_data = x_data*0.1+0.3 8 9 # 建立权值变量W和偏移量变量b 10

简单多元线性回归(梯度下降算法与矩阵法)

多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测. 对应的模型如下: n: 特征数量. 一般选取残差平方和最小化作为损失函数,对应为: M:训练样本数量. 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法(Gradient Descent),第二种是矩阵法(The normal equations). 梯度下降算法

Tensorflow LinearR

构造数据,实现简单的线性回归 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np #模拟数据 num_points = 1000 vec_points = [] for i in range(num_points): x = np.random.normal(0.0,0.5) y = x * 0.1 + 0.3 + np.random.normal(0.0, 0.06) vec_points.app

深度学习_1_Tensorflow_1

# 深度学习 # 图像识别,自然语言处理 # 机器学习 深度学习 # 分类:神经网络(简单) 神经网络(深度) # 回归 图像:卷积神经网络 # 自然语言处理:循环神经网络 # cpu:运行操作系统,处理业务,计算能力不是特别突出 # gpu:专门为计算设计的 import tensorflow as tf a = tf.constant(5.0) b = tf.constant(6.0) sum1 = tf.add(a,b) # 在session外边打印时只能查看对象 # 程序的图 a,b,s

TensorFlow经典案例3:实现线性回归

TensorFlow实现线性回归 #实现线性回归 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt rng = np.random learn_rate = 0.01 training_epochs = 1000 display_step = 50 #生成训练数据 train_X = np.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,