我有很长时间以前在某处发现的NN输入和缩减输出的方法,但我不确定它们是否有效,我使用了NN的encog库:
public static double Scale(double X)
{
double fieldlow = 0;
double fieldhigh = 1;
double min = 1;
double max = 2;
//double max = 10000;
double temp = ((X - min) / (max - min)) * (fieldhigh - fieldlow) + fieldlow;
return temp;
}
public static double DeScale(double X)
{
double fieldlow = 0;
double fieldhigh = 1;
double min = 1;
double max = 2;
//double max = 10000;
double temp = ((min - max) * X - fieldhigh * min + max * fieldlow) / (fieldlow - fieldhigh);
return temp;
}
假设fieldlow和fieldhigh是NN输入和输出的范围(我不确定但看起来像ActivationTANH的0-1范围),min应该是数据中的最低值,并且是数据中的最大值。我很好奇如果你获得的数据值更高,那么你设置的最大值是多少?你必须重写这些方法并从头开始训练吗?
如果这是错误的,请指出正确的方向。
答案 0 :(得分:0)
如果我没记错的话,缩放不仅适用于训练数据功能范围,还适用于所有可能的数据功能范围。这意味着如果训练集中的特征具有最小值 - 25和最大 - 45,但实际上可以是1到1000,则scalling执行xMin = 1,xMax = 1000 所以价值不能改变
尝试使用以下公式:scaledX =(X - minX)/(maxX - minX),其中minX \ maxX - 每个输入要素的最小值和最大值