import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
df = pd.read_csv("G:chapter-4data1.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=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=tf.get_variable('weights',shape=(x.shape[1],1),initializer=tf.constant_initializer)
y_=tf.matmul(X,W)
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 loss:%.4g 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()
