PythonとKerasによるDeepLearning個人的なまとめNo.02(回帰分析)
回帰分析
モチベーション
13の特徴量を持つデータの住宅の住宅価格の中央値を求めたい
データロード
訓練データは404sampleで特徴は13次元存在する.この特徴を元に中央値が決定される
from keras.datasets import reuters from keras.utils.np_utils import to_categorical import numpy as np import keras from keras import models from keras import layers from keras.datasets import boston_housing (train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
model構築
初めの層のinputは特徴の数分の13次元用意しておいてあとはどんなサンプル数がきても対応できるように空白にしておく
def build_model(): model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(train_data.shape[1], ))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(1)) model.compile(optimizer='rmsprop', loss='mse', metrics=['mae']) return model
k分割法
sampleをk等分にする.
#sampleをk等分にする k = 4 num_val_samples = len(train_data) // k for i in range(k): print('processing fold', i) #val_dataの要素数はnum_val_samples val_data = train_data[i * num_val_samples : (i+1) * num_val_samples] val_targets = train_targets[i * num_val_samples : (i+1) * num_val_samples] #data内のval_data以外の部分に当たる prac_train_data = np.concatenate( [train_data[:i * num_val_samples], train_data[(i+1) * num_val_samples:]], axis=0) prac_train_targets = np.concatenate( [train_targets[:i * num_val_samples], train_targets[(i+1) * num_val_samples:]], axis=0) model= build_model() model.fit(prac_train_data, prac_train_targets, epochs=num_epoch, batch_size=1, verbose=0)