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)