2019年1月9日 星期三

深度學習 - 認識 boston_housing波士頓房價數據集

深度學習 - 認識 boston_housing波士頓房價數據集

from keras.datasets import boston_housing

(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()

>>> train_data.shape
(404, 13)
>>> test_data.shape
(102, 13)
>>>train_data[0]
array([  1.23247,   0.     ,   8.14   ,   0.     ,   0.538  ,   6.142  , 91.7    ,   3.9769 ,   4.     , 307.     ,  21.     , 396.9    , 18.72   ])
>>>len(train_data[0])
13

訓練&測試資料分別是404組&102組,每個訓練資料裡面有13個數值特徵,而這些特徵完全沒有規律性,這邊處理資料的方法,需要將每個特徵做標準化處理。減去特徵平均值,再除以標準差,這樣得到的特徵平均值為 0,標準差為 1。

Numpy 可以很容易實現標準化
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std

test_data -= mean
test_data /= std


通常有兩種標準化的方法:
min max normalization:
會將特徵數據按比例縮放到0到1的區間,(或是-1到1)。
standard deviation normalization:
會將所有特徵數據縮放成平均為0、標準差為1。
標準化後的data:
>>>train_data[0]
array([-0.27224633, -0.48361547, -0.43576161, -0.25683275, -0.1652266 ,
       -0.1764426 ,  0.81306188,  0.1166983 , -0.62624905, -0.59517003,
        1.14850044,  0.44807713,  0.8252202 ])

將train_data[0] 資料畫出來看看,分別把沒有標準化跟有標準化的圖印出來。

import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
import matplotlib
matplotlib.use("TkAgg")
from matplotlib import pyplot as plt

x_axis = range(1, len(train_data[0]) + 1)
y_axis = train_data[0]


plt.plot(x_axis , y_axis, 'bo', label='normalize')
plt.title('normalize data')
plt.xlabel('x')
plt.ylabel('Y')
plt.legend()

plt.show()



可以看到沒有標準化的資料差距過大,這在訓練模型的時候,會因為特徵區間差異過大,導致梯度下降收斂過慢,這在機器學習與深度學習都是很重要的。
網路上有很多機器學習實例可以參考。






沒有留言:

張貼留言