通常情況下,我們都是用深度學習做分類,但有時候也會用來做迴歸。
原文出處:Regression Tutorial with the Keras Deep Learning Library in Python
1. 這裡作者使用Keras 和python的scikit-learn機器學習庫來實現了對樓價的迴歸預測。關於scikit-learn與Keras聯合可參考 Scikit-Learn介面封裝器
2. 原文第一個常式中,作者介紹了怎麼匯入資料,然後搭建了一個單隱層的神經網路。因為時迴歸問題,在輸出層作者並沒有使用啟用函數。然後使用Scikit-Learn介面封裝器將Sequential模型作為Scikit-Learn工作流程的一部分,最後使用了交叉驗證方法來評估模型好壞。
3. 第二個常式中,作者將資料進行了正常化處理,並評估其效果
4. 第三個常式中,作者分別改變了網路的深度和寬度,並查看其效果。
5. 代碼和資料集原文中都有,把源碼整理後再在這裡貼一下:
housing_price.py
import numpyimport pandasfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.wrappers.scikit_learn import KerasRegressorfrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import KFoldfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipeline# load datasetdataframe = pandas.read_csv("housing.csv", delim_whitespace=True, header=None)dataset = dataframe.values# split into input (X) and output (Y) variablesX = dataset[:, 0:13]Y = dataset[:, 13]# define base modedef baseline_model(): # create model model = Sequential() model.add(Dense(13, input_dim=13, init='normal', activation='relu')) model.add(Dense(1, init='normal')) # Compile model model.compile(loss='mean_squared_error', optimizer='adam') return model# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)# evaluate model with standardized datasetestimator = KerasRegressor(build_fn=baseline_model, nb_epoch=100, batch_size=5, verbose=0)# use 10-fold cross validation to evaluate this baseline modelkfold = KFold(n_splits=10, random_state=seed)results = cross_val_score(estimator, X, Y, cv=kfold)print("Results: %.2f (%.2f) MSE" % (results.mean(), results.std()))
housing_price2.py
import numpyimport pandasfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.wrappers.scikit_learn import KerasRegressorfrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import KFoldfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipeline# load datasetdataframe = pandas.read_csv("housing.csv", delim_whitespace=True, header=None)dataset = dataframe.values# split into input (X) and output (Y) variablesX = dataset[:, 0:13]Y = dataset[:, 13]# define base modedef baseline_model(): # create model model = Sequential() model.add(Dense(13, input_dim=13, init='normal', activation='relu')) model.add(Dense(1, init='normal')) # Compile model model.compile(loss='mean_squared_error', optimizer='adam') return model# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)# evaluate model with standardized datasetestimators = []estimators.append(('standardize', StandardScaler()))estimators.append(('mlp', KerasRegressor(build_fn=baseline_model, nb_epoch=50, batch_size=5, verbose=0)))pipeline = Pipeline(estimators)# use 10-fold cross validation to evaluate this baseline modelkfold = KFold(n_splits=10, random_state=seed)results = cross_val_score(pipeline, X, Y, cv=kfold)print("Standardized: %.2f (%.2f) MSE" % (results.mean(), results.std()))
housing_price3.py
import numpyimport pandasfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.wrappers.scikit_learn import KerasRegressorfrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import KFoldfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipeline# load datasetdataframe = pandas.read_csv("housing.csv", delim_whitespace=True, header=None)dataset = dataframe.values# split into input (X) and output (Y) variablesX = dataset[:, 0:13]Y = dataset[:, 13]# define base modedef baseline_model(): # create model model = Sequential() model.add(Dense(13, input_dim=13, init='normal', activation='relu')) model.add(Dense(6, init='normal', activation='relu')) model.add(Dense(1, init='normal')) # Compile model model.compile(loss='mean_squared_error', optimizer='adam') return model# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)# evaluate model with standardized datasetestimators = []estimators.append(('standardize', StandardScaler()))estimators.append(('mlp', KerasRegressor(build_fn=baseline_model, nb_epoch=50, batch_size=5, verbose=0)))pipeline = Pipeline(estimators)# use 10-fold cross validation to evaluate this baseline modelkfold = KFold(n_splits=10, random_state=seed)results = cross_val_score(pipeline, X, Y, cv=kfold)print("Standardized: %.2f (%.2f) MSE" % (results.mean(), results.std()))
housing_price4.py
import numpyimport pandasfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.wrappers.scikit_learn import KerasRegressorfrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import KFoldfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipeline# load datasetdataframe = pandas.read_csv("housing.csv", delim_whitespace=True, header=None)dataset = dataframe.values# split into input (X) and output (Y) variablesX = dataset[:, 0:13]Y = dataset[:, 13]# define base modedef baseline_model(): # create model model = Sequential() model.add(Dense(20, input_dim=13, init='normal', activation='relu')) model.add(Dense(1, init='normal')) # Compile model model.compile(loss='mean_squared_error', optimizer='adam') return model# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)# evaluate model with standardized datasetestimators = []estimators.append(('standardize', StandardScaler()))estimators.append(('mlp', KerasRegressor(build_fn=baseline_model, nb_epoch=50, batch_size=5, verbose=0)))pipeline = Pipeline(estimators)# use 10-fold cross validation to evaluate this baseline modelkfold = KFold(n_splits=10, random_state=seed)results = cross_val_score(pipeline, X, Y, cv=kfold)print("Standardized: %.2f (%.2f) MSE" % (results.mean(), results.std()))