【发布时间】:2019-09-20 08:52:26
【问题描述】:
在我学习 ML 的过程中,我正在测试一些 NN,我发现我的输出似乎没有考虑到我的 3 个非常重要的输入之一。
我的数据集由 4 列 (csv) 组成:
-
3 是介于 1 000 之间的数字(包括输出),最高可达 150 000 000
-
1 是一个介于 0 到 100 之间的数字,这是我的 NN 未考虑的数字
我使用 scikit-learn 中的 MinMaxScaler 以这种方式扩展我的数据集:
df = pd.read_csv('rawData.csv')
dataset = df.values
min_max_scaler = preprocessing.MinMaxScaler()
dataset = min_max_scaler.fit_transform(dataset)
X = dataset[:,0:3] # input
Y = dataset[:,3] # output
我还使用另一种方式来扩展我的数据(当我想测试我的模型时):
min_test = np.min(runset)
max_test = np.max(runset)
normalized = (runset - min_test) / (max_test - min_test)
test = model.predict(normalized)
result = test * (max_test - min_test) + min_test
所以我的问题是:是否可以并建议对不同的输入使用不同的比例?如果可以,我该怎么做?
【问题讨论】:
-
Y代表什么? -
@sentence Y 代表我的 csv 文件的第三列,这是我的输出(如我在帖子中所说的大数字)
-
那么,为什么要缩放输出?有什么原因吗?
-
不,你说得对,我不应该缩放输出,甚至没有注意到我改变了它。但一开始我并没有缩放 Y,问题已经出现了。
-
@Halt 您还应该缩放输出,因为您的输出在 1 000 到 150 000 000 的范围内。这是通过梯度操作的变化很大的值,因此它可能会从 1 000 变为下一次迭代中的 100 000 可以在非常高的起伏中改变梯度,并且您的损失也可能存在巨大差异。为了避免这种情况,我更喜欢对输出使用归一化以及均值和标准差,这样模型可以很容易地收敛。当您预测结果时,使用相同的平均值和标准差值(您已用于标准化)来检索数据。
标签: python keras scikit-learn neural-network normalization