python - Keras / NN - 对输入应用不同的缩放/归一化
问题描述
在我学习 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
所以我的问题是:是否可以并建议对不同的输入使用不同的比例?如果是,我该怎么做?
解决方案
对您的问题的简短回答是另一个问题:我是否对表征我的数据集的特征的重要性有先验知识?
- 如果是,我可能会以更重要的特征具有更大的方差/范围的方式缩放我的数据。
- 如果不是,我应该以特征具有均值 0 和标准差 1 的方式缩放我的数据。为什么?主要是为了改善数值条件,消除初始权重的尺度依赖性问题,使训练过程更快,降低陷入局部最优的风险。
不要低估梯度下降方法对缩放的敏感性。
最后,请记住使用训练集中的统计数据(均值和标准差)来标准化验证/测试集。
推荐阅读
- reactjs - React redux 状态未在生产构建中加载
- python - 更新 DynamoDB 中以 python 中的数字开头的属性
- flutter - 附加滚动控制器后如何调用事件
- postgresql - 如何仅针对表而不针对触发器和函数执行 pg_dump?
- c++ - C++ 创建一个输入流操纵器来屏蔽输出但保持所有输入不变
- html - 如何使用 jquery 获取 html 选择 > 选项标签自定义属性值?
- python - 删除 Pandas Dataframe 中的非等效多索引行
- docker - Boto3 超时连接到本地 dynamodb 但可以卷曲
- c# - 如何以不同方式设置 Blazor 组件的样式
- php - 为什么我的脚本可以工作,但它在控制台中显示语法错误?