机器学习——TensorFLow实战房价预测

import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv("G:\chapter-4\data1.csv",names=['square','bedrooms','price'])
# 数据归一化:均值方差归一化
def normal_feature(df):
    return  df.apply(lambda col:(col-col.mean())/col.std())
df=normal_feature(df)
ones=pd.DataFrame({'ones':np.ones(len(df))})
# 添加一列新的数据
df=pd.concat((ones,df),axis=1)
# 分别获取x和y
x=np.array(df[df.columns[0:3]])
y=np.array(df[df.columns[-1]]).reshape(len(df),1)

# 定义一个学习率
alpha=0.01
# 定义训练次数
epoch=500
# 两个占位符
X=tf.placeholder('float',shape=x.shape)
Y=tf.placeholder('float',shape=y.shape)

# 设置w的初始值,w是一个变量,常驻内存,它可以被训练
W=tf.get_variable('weights',shape=(x.shape[1],1),initializer=tf.constant_initializer)
# 根据公式可得预测值y_
y_=tf.matmul(X,W)

# 定义损失函数,transpose_a=True表示将第一个(y-y_)转置,才可以做乘法,最小二乘法
loss_op=1/(2*len(y))*tf.matmul((y-y_),(y-y_),transpose_a=True)

# 定义优化函数,采用梯度下降法
opt=tf.train.GradientDescentOptimizer(learning_rate=alpha)
# 最小化
train_step=opt.minimize(loss_op)
loss_x=[]
with tf.Session() as sess:
    # 初始化全局变量
    sess.run(tf.global_variables_initializer())
    for e in range(epoch+1):
        _,loss=sess.run([train_step,loss_op],feed_dict={X:x,Y:y})
        loss_x.append(float(loss))
        if e%10==0:
            loss,w=sess.run([loss_op,W],feed_dict={X:x,Y:y})
            log_str='Epoch:%d\t loss:%.4g\t model:y=%.4gx1+%.4gx2+%.4g'
            print(log_str%(e,loss,w[1],w[2],w[0]))

plt.plot(np.array(range(0,501)),loss_x)
plt.show()

在这里插入图片描述

发布了123 篇原创文章 · 获赞 74 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43927892/article/details/103482625