0

我有用于缩放 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 范围),最小值应该是数据中的最小值,而最大值应该是数据中的最大值。我很好奇,如果您获得的新数据的值高于您设置的最大值怎么办?你必须重写这个方法并从头开始训练?

如果这是错误的,请指出我正确的方向。

4

1 回答 1

0

如果我没记错的话,缩放不仅适用于训练数据特征范围,还适用于所有可能的数据特征范围。这意味着如果训练集中的特征具有最小值 - 25 和最大值 - 45,但实际上可以从 1 到 1000,则缩放执行 xMin = 1, xMax = 1000 所以值不能改变

尝试使用这个公式:scaledX = (X - minX)/(maxX - minX),其中 minX\maxX - 每个输入特征的最小值和最大值

于 2012-05-19T14:44:14.430 回答