深度學習 - 認識 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()
可以看到沒有標準化的資料差距過大,這在訓練模型的時候,會因為特徵區間差異過大,導致梯度下降收斂過慢,這在機器學習與深度學習都是很重要的。
網路上有很多機器學習實例可以參考。
沒有留言:
張貼留言