標準化資料集的公式如下:
Standardzied_X = (X - 平均值)/(標準偏差)
我想知道我是否應該在整個資料集(火車和測驗的串聯)或僅在火車資料集上找到均值和標準差。我在某處讀到意思和訓練資料集的 STD 應該用于訓練和測驗資料集的標準化公式,但這對我來說沒有意義。
假設資料在變數 Xtr、Ytr、Xte、Yte 中,形狀分別為 [n,d]、[n,1]、[m,d]、[m,1]。
我的回答如下:
X_mean = numpy.mean(numpy.concatenate(X_tr , X_te))
X_std = numpy.std(numpy.concatenate(X_tr , X_te))
X_tr_norm = (X_tr - X_mean)/X_std
X_te_norm = (X_te - X_mean)/X_std
uj5u.com熱心網友回復:
訓練資料集的均值和 STD 應該用于訓練和測驗資料集的歸一化公式,但對我來說沒有意義
對于我,這說得通。首先,訓練資料集應該足夠大以提供對均值和標準差的良好估計。其次,這樣你就不會在訓練期間使用測驗資料“作弊”。
如果您真的想計算訓練和測驗資料的平均值,則不必將它們連接起來。您可以自己計算加權平均值和標準差。
combined_mean = (len(train_data) * train_data.mean() len(test_data) * test_data.mean()) \
/ (len(train_data) len(test_data))
# std is more tricky
train_second_moment = np.mean((train_data - combined_mean) ** 2)
test_second_moment = np.mean((test_data - combined_mean) ** 2)
combined_std = np.sqrt((len(train_data) * train_second_moment len(test_data) * test_second_moment) \
/ (len(train_data) len(test_data)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368002.html