every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self.
0. 前言
上一節我們講了分類模型,這一節主要講迴歸模型。
1. 代碼部分
1. 導入模塊
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
print(sys.version_info)
for module in mpl,np,pd,sklearn,tf,keras:
print(module.__name__,module.__version__)
2. 數據
2.1 導入數據
from sklearn.datasets import fetch_california_housing
# 房價預測
housing = fetch_california_housing()
print(housing.DESCR)
print(housing.data.shape)
print(housing.target.shape)
2.2 預覽
import pprint
pprint.pprint(housing.data[0:5])
pprint.pprint(housing.target[0:5])
2.3 劃分樣本
# 劃分樣本
from sklearn.model_selection import train_test_split
x_train_all,x_test,y_train_all,y_test = train_test_split(housing.data,housing.target,random_state=7)
x_train,x_valid,y_train,y_valid = train_test_split(x_train_all,y_train_all,random_state=11)
print(x_train.shape,y_train.shape)
print(x_valid.shape,y_valid.shape)
print(x_test.shape,y_test.shape)
3. 數據歸一化
# 歸一化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_valid_scaled = scaler.transform(x_valid)
x_test_scaled = scaler.transform(x_test)
4. 模型
4. 1 搭建模型
# 搭建模型
model = keras.models.Sequential([
keras.layers.Dense(30,activation='relu',input_shape=x_train.shape[1:]),
keras.layers.Dense(1),
])
4.2 打印模型信息
# 打印model信息
model.summary()
4. 3 編譯
# 編譯
model.compile(loss='mean_squared_error',optimizer="sgd")
4.4 回調函數
# 回調函數
callbacks = [keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)]
5. 訓練
#訓練
history = model.fit(x_train_scaled,y_train,validation_data=(x_valid_scaled,y_valid),epochs=100,callbacks=callbacks)
6. 打印學習曲線
# 學習曲線
def plot_learning_curves(history):
pd.DataFrame(history.history).plot(figsize=(8,5))
plt.grid(True)
plt.gca().set_ylim(0,1)
plt.show()
plot_learning_curves(history)
7. 測試集上
model.evaluate(x_test_scaled,y_test)