我有一个具有5个输入功能的模型,输入看起来像这样:
- 500.0 -- 499.752 -- 499.813 -- 0.061 -- -0.016 -
- 499.91 -- 499.763 -- 499.828 -- 0.064 -- 0.005 -
- 499.83 -- 499.768 -- 499.828 -- 0.06 -- 0.021 -
- 499.91 -- 499.779 -- 499.841 -- 0.062 -- 0.035 -
- 499.95 -- 499.792 -- 499.858 -- 0.066 -- 0.045 -
- 500.0 -- 499.807 -- 499.879 -- 0.073 -- 0.054 -
- 500.0 -- 499.821 -- 499.898 -- 0.077 -- 0.06 -
- 500.0 -- 499.834 -- 499.914 -- 0.079 -- 0.065 -
- 500.0 -- 499.847 -- 499.927 -- 0.08 -- 0.069 -
- 499.96 -- 499.855 -- 499.932 -- 0.077 -- 0.071 -
- 500.0 -- 499.866 -- 499.943 -- 0.077 -- 0.072 -
- 500.0 -- 499.876 -- 499.951 -- 0.076 -- 0.074 -
- 500.0 -- 499.885 -- 499.959 -- 0.074 -- 0.075 -
- 500.0 -- 499.894 -- 499.965 -- 0.072 -- 0.076 -
- 499.99 -- 499.901 -- 499.969 -- 0.068 -- 0.075 -
如您所见,特征1,2和3移动500,而特征4和5移动零。 我只有一个MSE损失函数,这使模型可以预测所有功能的相似数字。
一个例子:
Should have predicted:
- 500.0 -- 499.866 -- 499.943 -- 0.077 -- 0.072 -
But predicted:
- 34.875 -- 22.658 -- 42.792 -- -4.824 -- -24.389 -
您可以看到它如何尝试产生所有相似的数字。 您还可以在训练中看到这一点,当模型变得更准确但损失更大时。
我正在寻找的是一种对功能1、2和3分别进行MSE损失,然后对4和5进行另一种MSE损失的方法,因此该模型实际上可以在特定功能范围内输出。
我还考虑过将特征4和5缩放到与1、2和3相同的范围,但是我不知道这样是否也可以。
如果还有其他可能的解决方案,请分享。 谢谢!
答案 0 :(得分:1)
不管以上问题如何,您确定模型实现正确吗?
但是,对于您的情况,我认为最好使用Min-Max scaler
来将所有要素的值缩放到0和1之间(默认情况下),然后应用模型并比较结果。
答案 1 :(得分:0)
我要在@Meysam的答案中加上scikit learning中的MinMaxScaller具有inverse_transform
函数,该函数可以重现初始值。
例如,您可能有:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(Y)
(... training here ...)
Y_pred = model.predict(X_test)
您的预测模型将明显缩放,因此,如果要在初始缩放时获取值,则应使用相同的缩放器:
Y_pred_original_scaling = scaler.inverse_transform(Y_pred)