TensorFlow——神经网络多元线性回归

1、多元线性回归

"""
 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
import pandas as pd


# 特征数据归一化
def normalize(df):
    # 对特征数据{0到11}列 做(0-1)归一化
    for i in range(13):
        df[:, i] = (df[:, i] - df[:, i].min()) / (df[:, i].max() - df[:, i].min())
    return df


# 使用Tensorflow contrib数据集加载波斯顿房价预测数据
boston = tf.contrib.learn.datasets.load_dataset('boston')
X_train = boston.data  # 取数据集的所有值
Y_train = boston.target  # 实际值

column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
                'TAX', 'PTRATIO', 'B', 'LSTAT']

df = pd.DataFrame(X_train, columns=column_names)
print(df.head())

X_train = normalize(X_train)  # 进行归一化

# 定义模型
x = tf.placeholder(tf.float32, [None, 13], name='x')
y = tf.placeholder(tf.float32, [None, 1], name='y')

w = tf.Variable(tf.random_normal([13, 1], stddev=0.01), name='w')  # 偏置
b = tf.Variable(1.0, name='b')  # 权重

Y = tf.matmul(x, w) + b

# 使用均方差损失函数
loss_function = tf.reduce_mean(tf.square(y - Y))

# 使用梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss_function)

loss_list = []
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)  # 初始化所有变量
    loss_sum = 0.0
    for step in range(50):
        for xs, ys in zip(X_train, Y_train):
            xs = xs.reshape(1, 13)
            ys = ys.reshape(1, 1)

            # 运行计算图
            _, loss = sess.run([optimizer, loss_function], \
                               feed_dict={x: xs, y: ys})
            loss_sum += loss

        # X_train, Y_train = shuffle(X_train, Y_train)
        loss_average = loss_sum / len(Y_train)
        loss_list.append(loss_sum)  # 每步添加一次
        loss_sum = 0
        print('w:', sess.run(w), ' b:', sess.run(b), loss_average)
    plt.plot(loss_list)
    plt.show()

    x_test = X_train[100]
    x_test = x_test.reshape(1, 13)
    pred = sess.run(Y, feed_dict={x: x_test})
    print('预测值:%f' % pred)

    target = Y_train[100]
    print('标签值:%f' % target)

 

©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页