波士顿房价预测-一元线性回归与多元线性回归

波士顿房价预测-房间数这一个属性来预测房价

  1. 加载数据集
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
boston_housing=tf.keras.datasets.boston_housing
(train_x,train_y),(test_x,test_y)=boston_housing.load_data()
train_x.shape,train_y.shape
((404, 13), (404,))
test_x.shape,test_y.shape
((102, 13), (102,))
  1. 数据处理
x_train=train_x[:,5]
y_train=train_y
x_train.shape,y_train.shape
((404,), (404,))
x_test=test_x[:,5]
y_test=test_y
x_test.shape,y_test.shape
((102,), (102,))
  1. 设置超参数
learn_rate=0.04
iter=2000
display_step=200
  1. 设置模型参数初始值
np.random.seed(612)
w=tf.Variable(np.random.randn())
b=tf.Variable(np.random.randn())
w.numpy().dtype,b.numpy().dtype
(dtype('float32'), dtype('float32'))
  1. 训练模型
mse_train=[]
mse_test=[]
for i in range(0,iter+1):
    with tf.GradientTape() as tape:
        pred_train=w*x_train+b
        loss_train=0.5*tf.reduce_mean(tf.square(y_train-pred_train))
        
        pred_test=w*x_test+b
        loss_test=0.5*tf.reduce_mean(tf.square(y_test-pred_test))
        
    mse_train.append(loss_train)
    mse_test.append(loss_test)
    
    dL_dw,dL_db=tape.gradient(loss_train,[w,b])
    w.assign_sub(learn_rate*dL_dw)
    b.assign_sub(learn_rate*dL_db)
    
    if i%display_step==0:
        print("i:%i, Train Loss:%f, Test Loss: %f" % (i,loss_train,loss_test))
i:0, Train Loss:23.585236, Test Loss: 20.503534
i:200, Train Loss:23.419767, Test Loss: 20.243628
i:400, Train Loss:23.283920, Test Loss: 20.020529
i:600, Train Loss:23.172400, Test Loss: 19.828562
i:800, Train Loss:23.080847, Test Loss: 19.662981
i:1000, Train Loss:23.005686, Test Loss: 19.519815
i:1200, Train Loss:22.943977, Test Loss: 19.395727
i:1400, Train Loss:22.893328, Test Loss: 19.287909
i:1600, Train Loss:22.851740, Test Loss: 19.194019
i:1800, Train Loss:22.817598, Test Loss: 19.112064
i:2000, Train Loss:22.789570, Test Loss: 19.040365
  1. 可视化输出
plt.figure(figsize=(15,10))

plt.subplot(221)
plt.scatter(x_train,y_train,color="blue",label="data")
plt.plot(x_train,pred_train,color="red",label="model")
plt.legend(loc="upper left")

plt.subplot(222)
plt.plot(mse_train,color="blue",linewidth=3,label="train loss")
plt.plot(mse_test,color="red",linewidth=1.5,label="test loss")
plt.legend(loc="upper right")

plt.subplot(223)
plt.plot(y_train,color="blue",marker="o",label="true_price")
plt.plot(pred_train,color="red",marker=".",label="predict")
plt.legend

plt.subplot(224)
plt.plot(y_test,color="blue",marker="o",label="true_price")
plt.plot(pred_test,color="red",marker=".",label="predict")
plt.legend

plt.show()
output_18_0.png

波士顿房价多元线性回归--多个属性一起预测

  1. 二维数组归一化--循环实现
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf

boston_housing=tf.keras.datasets.boston_housing
(train_x,train_y),(test_x,test_y)=boston_housing.load_data()

train_x.shape,train_y.shape
((404, 13), (404,))
test_x.shape,test_y.shape
((102, 13), (102,))
num_train=len(train_x)
num_test=len(test_x)
# 数据归一化
x_train=(train_x-train_x.min(axis=0))/(train_x.max(axis=0)-train_x.min(axis=0))
y_train=train_y

x_test=(test_x-test_x.min(axis=0))/(test_x.max(axis=0)-test_x.min(axis=0))
y_test=test_y
x0_train=np.ones(num_train).reshape(-1,1)
x0_test=np.ones(num_test).reshape(-1,1)
X_train=tf.cast(tf.concat([x0_train,x_train],axis=1),tf.float32)
X_test=tf.cast(tf.concat([x0_test,x_test],axis=1),tf.float32)
X_train.shape,X_test.shape
(TensorShape([404, 14]), TensorShape([102, 14]))
Y_train=tf.constant(y_train.reshape(-1,1),tf.float32)
Y_test=tf.constant(y_test.reshape(-1,1),tf.float32)
Y_train.shape,Y_test.shape
(TensorShape([404, 1]), TensorShape([102, 1]))
  1. 设置超参数
learn_rate=0.01
iter=2500
display_step=100
  1. 设置模型变量初值
np.random.seed(612)
W=tf.Variable(np.random.randn(14,1),dtype=tf.float32)
  1. 训练模型
mse_train=[]
mse_test=[]
for i in range(0,iter+1):
    with tf.GradientTape() as tape:
        PRED_train=tf.matmul(X_train,W)
        Loss_train=0.5*tf.reduce_mean(tf.square(Y_train-PRED_train))
        
        PRED_test=tf.matmul(X_test,W)
        Loss_test=0.5*tf.reduce_mean(tf.square(Y_test-PRED_test))
        
    mse_train.append(Loss_train)
    mse_test.append(Loss_test)
    
    dL_dW=tape.gradient(Loss_train,W)
    W.assign_sub(learn_rate*dL_dW)
    
    if i%display_step==0:
        print("i:%i, Train Loss:%f, Test Loss: %f" % (i,Loss_train,Loss_test))
i:0, Train Loss:263.193451, Test Loss: 276.994110
i:100, Train Loss:44.476345, Test Loss: 47.471565
i:200, Train Loss:36.176552, Test Loss: 37.562954
i:300, Train Loss:31.584023, Test Loss: 32.202713
i:400, Train Loss:28.789461, Test Loss: 28.952513
i:500, Train Loss:26.911528, Test Loss: 26.827421
i:600, Train Loss:25.520697, Test Loss: 25.333916
i:700, Train Loss:24.405626, Test Loss: 24.216911
i:800, Train Loss:23.460522, Test Loss: 23.340532
i:900, Train Loss:22.630890, Test Loss: 22.629452
i:1000, Train Loss:21.887278, Test Loss: 22.039747
i:1100, Train Loss:21.212658, Test Loss: 21.544201
i:1200, Train Loss:20.596283, Test Loss: 21.124847
i:1300, Train Loss:20.030684, Test Loss: 20.769012
i:1400, Train Loss:19.510204, Test Loss: 20.467239
i:1500, Train Loss:19.030268, Test Loss: 20.212141
i:1600, Train Loss:18.587009, Test Loss: 19.997717
i:1700, Train Loss:18.177067, Test Loss: 19.818949
i:1800, Train Loss:17.797461, Test Loss: 19.671591
i:1900, Train Loss:17.445545, Test Loss: 19.551966
i:2000, Train Loss:17.118927, Test Loss: 19.456863
i:2100, Train Loss:16.815464, Test Loss: 19.383459
i:2200, Train Loss:16.533216, Test Loss: 19.329273
i:2300, Train Loss:16.270426, Test Loss: 19.292068
i:2400, Train Loss:16.025497, Test Loss: 19.269897
i:2500, Train Loss:15.797002, Test Loss: 19.260986
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342