TensorFlow实现波士顿房价简单线性回归

一、代码

# coding=utf-8
"""
 CRIM     城镇人均犯罪率
 ZN       占地面积超过2.5万平方英尺的住宅用地比例
 INDUS    城镇非零售业务地区的比例
 CHAS     查尔斯河虚拟变量 (= 1 如果土地在河边;否则是0)
 NOX      一氧化氮浓度(每千万)
 RM       平均每居民房数
 AGE      在1940年之前建成的所有者占用单位的比例
 DIS      与五个波士顿就业中心的加权距离
 RAD      辐射状公路的可达性指数
 TAX      每10000美元的全额物业税率
 PTRATIO  城镇师生比例
 B        1000(Bk-0.63)²,其中 Bk 是城镇黑人的比例
 LSTAT    低地位人口的百分比
 MEDV     以1000美元计算的自有住房的中位数
"""

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt


def normalize(X):
    """
    归一化输入数据
    """
    mean = np.mean(X)  # 均值
    std = np.std(X)  # 标准差
    X = (X - mean) / std  # Z-Score归一化,符合正态分布
    return X


# 读取数据集
boston = tf.contrib.learn.datasets.load_dataset('boston')  # 使用Tensorflow contrib数据集加载
X_train = boston.data[:, 5]  # 取数据集第6列的所有值
Y_train = boston.target  # 实际值
# X_train = normalize(X_train) # 进行归一化
n_samples = len(X_train)  # 样本数量

# 定义模型
X = tf.placeholder(tf.float32, name='X')  # 占位符
Y = tf.placeholder(tf.float32, name='Y')

b = tf.Variable(0.0)  # 偏置
w = tf.Variable(0.0)  # 权重

Y_hat = X * w + b  # 线性回归模型

loss = tf.square(Y - Y_hat, name='loss')  # 定义损失函数

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)  # 简单梯度下降算法优化器,学习速率0.01

# 训练
init = tf.global_variables_initializer()  # 初始化变量
total = []
with tf.Session() as sess:
    sess.run(init)

    # 迭代100次
    for i in range(100):
        total_loss = 0
        for x, y in zip(X_train, Y_train):  # 将对应元素打包成一个个元组,返回这些元组组成的列表
            _, l = sess.run([optimizer, loss], feed_dict={X: x, Y: y})  # 运行优化器、损失函数,并馈送数据
            total_loss += l

        total.append(total_loss / n_samples)
        print('Epoch {0}: Loss {1}'.format(i, total_loss / n_samples))

    b_value, w_value = sess.run([b, w])  # 计算偏置与权值

Y_pred = X_train * w_value + b_value
print('Done')
# 评估
plt.plot(X_train, Y_train, 'bo', label='Real Data')
plt.plot(X_train, Y_pred, 'r', label='Predicted Data')
plt.legend()
plt.show()

plt.plot(total)
plt.show()

归一化:把数据变成(0,1)之间的数。程序中用的是Z-Score归一化,符合正态分布

二、效果

  1. 线性线
    TensorFlow实现波士顿房价简单线性回归_第1张图片

  2. 损失函数
    TensorFlow实现波士顿房价简单线性回归_第2张图片

你可能感兴趣的:(Python,机器学习,Tensorflow)