首先,我們應該清楚分類模型和回歸模型的本質區別,才能在搭建模型的時候得心應手。
- 分類模型:預測的是類別,模型的輸出是在各個類別上的概率分布。所以分類模型在最后一層上的輸出值個數是多個。
- 預測模型:預測的是數值,模型的輸出是一個實數值。所以回歸模型在最后一層上的輸出值個數是一個。
清楚了分類模型和預測模型的區別之后,我們就以一個實例來講解回歸模型的搭建過程。該實例是一個房價預測的模型,采用的數據集是sklearn.datasets 的 fetch_california_housing數據集。我們依然將模型的構建過程分為七步:
一:導入包
1 import numpy as np 2 import pandas as pd 3 import matplotlib as mpl 4 import matplotlib.pyplot as plt 5 import sklearn 6 7 import os 8 import sys 9 import time 10 11 import tensorflow as tf 12 import tensorflow.keras as keras 13 14 for module in np, pd, mpl, sklearn, tf, keras: 15 print (module.__name__, module.__version__)
二:數據加載
1 # 數據加載 2 from sklearn.datasets import fetch_california_housing 3 housing = fetch_california_housing(data_home='C:/Users/rencm/scikit_learn_data', download_if_missing=True)
三:切分訓練集和驗證集
1 # 切分訓練集和驗證集 2 from sklearn.model_selection import train_test_split 3 x_train_all, x_test, y_train_all, y_test = train_test_split(housing.data, housing.target, random_state = 7) 4 x_train, x_valid, y_train, y_valid = train_test_split(x_train_all, y_train_all, random_state = 11) 5 print (x_train.shape, x_valid.shape, x_test.shape)
四:輸入數據歸一化處理
1 # 輸入數據歸一化處理 2 from sklearn.preprocessing import StandardScaler 3 scaler = StandardScaler() 4 x_train_scaled = scaler.fit_transform(x_train) 5 x_valid_scaled = scaler.transform(x_valid) 6 x_test_scaled = scaler.transform(x_test)
五:模型建立
1 # 模型建立 2 model = keras.models.Sequential([ 3 keras.layers.Dense(30, activation = 'relu', input_shape = x_train.shape[1:]), 4 keras.layers.Dense(1) 5 ]) 6 model.compile( 7 loss = 'mean_squared_error', 8 optimizer = 'sgd' 9 ) 10 print (model.summary())
這里指的注意的一點是:我們的最后一層即輸出層的輸出個數為1,這是個分類模型的唯一區別。
六:訓練模型
# 訓練模型 history = model.fit( x_train_scaled, y_train, validation_data=(x_valid_scaled, y_valid), epochs = 100, callbacks=[ keras.callbacks.EarlyStopping(min_delta = 1e-2, patience = 5) ] )
七:測試模型
1 # 測試模型 2 model.evaluate(x_test_scaled, y_test)
總結:
通過以上的過程可以看出,分類模型和回歸模型的通用步驟都是一樣的,只有在模型建立的時候有一點不同。即分類模型的輸出層有多個輸出,需要使用softmax激活函數,而回歸模型的輸出層只有一個輸出,沒有激活函數。
