tensorflow线性回归应用实例——预测加利福尼亚房价

使用了python中sklearn.datasets包中fetch_california_housing中的数据,基于tensorflow框架做了一个简单的模型。


下面做了几个tensorflow的简单应用示例,第一个代码实例采用解析解的方式求解了线性回归模型的参数w0,w1...,wn。第二个代码实例采用了梯度下降法求解了线性回归模型的参数w0,w1...,wn。

tensorflow是先建立运算图,然后再启动运算图进行运算,所谓运算图是由一个个的运算节点组成。

import tensorflow as tf                #导入tensorflow包
from sklearn.datasets import fetch_california_housing  #从sklearn中导入数据,加利福尼亚的房价数据
import numpy as np
housing=fetch_california_housing(data_home=r'C:\Users\wangzhongyuan\Desktop\json11\sklearn\california')
m,n=housing.data.shape
housing_data_plus_bias=np.c_[np.ones((m,1)),housing.data]
x=tf.constant(housing_data_plus_bias,dtype=tf.float32,name='x')
y=tf.constant(housing.target.reshape(-1,1),dtype=tf.float32,name='y')  #.reshape(-1,1)表示任意行,1列
xT=tf.transpose(x)
w=tf.matmul(tf.matmul(tf.matrix_inverse(tf.matmul(xT,x)),xT),y)   #这里采用解析解的方式求系数,因为数据比较小,如果数据比较大,则最好采用梯度下降法
with tf.Session() as sess:   #这里开始启动运算图,上面是建立运算图
    result=w.eval()
    print(result)

 上面代码的运算图如下,从x(房子的特征数据),y(房子的价格)直到w(模型的参数)

tensorflow线性回归应用实例——预测加利福尼亚房价_第1张图片


接下来为用梯度下降法进行求解的代码

import tensorflow as tf
from sklearn.datasets import fetch_california_housing
import numpy as np
from sklearn.preprocessing import StandardScaler
learning_rate=0.01
n_epoch=1000
housing=fetch_california_housing(data_home=r'C:\Users\wangzhongyuan\Desktop\json11\sklearn\california')     
m,n=housing.data.shape

housing_data_plus_bias=np.c_[np.ones((m,1)),housing.data]
scaler=StandardScaler().fit(housing_data_plus_bias)
standard_data=scaler.transform(housing_data_plus_bias)
x=tf.constant(standard_data,dtype=tf.float32,name='x')
y=tf.constant(housing.target,dtype=tf.float32,name='y')
w=tf.Variable(tf.random_uniform((n+1,1),-1.0,1.0),dtype=tf.float32,name='w')
y_pre=tf.matmul(x,w)
error=y-y_pre
mse=tf.reduce_mean(tf.square(error),name='mse')
optimizer=tf.train.GradientDescentOptimizer(learning_rate=learning_rate)  #tensorflow中有一个模块可以直接用来做梯度下降
train_w=optimizer.minimize(mse)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for epoch in range(n_epoch):
        if epoch%100==0:
            print(epoch,mse.eval())
        sess.run(train_w)
    result1=w.eval()
    print(result1)

 

你可能感兴趣的:(tensorflow线性回归应用实例——预测加利福尼亚房价)