首页 > 解决方案 > 如何使用感知器对插值数据进行归一化?

问题描述

我正在尝试使用感知器对多项式插值的数据进行归一化,我使用以下公式:

1

其中: xi 是一个数据点 (x1, x2…xn)。

x̄ 是样本均值。

s 是样本标准差。

Z 是我为感知器输入的新值。

我正在用 C++ 编程,并用 freeglut 绘制图形。

我的标准化功能:


vector<double> Perceptron::normalizar(double x) { 
    vector<double> aux;
    aux.push_back(1.0);

    for (unsigned i = 1; i < pesos.size(); i++) {
        double t = (pow(x,i) - means[i]) / devianation[i];
        aux.push_back(t);
    }
    return aux;
}

问题是:在我进行归一化之前,多项式正在收敛到点。 在此处输入图像描述

但归一化后,多项式正在收敛到其他点,我不知道它在哪里收敛。 在此处输入图像描述

多项式的公式如下(W 是感知器的权重): 在此处输入图像描述

所以我对 x 的每个值都使用了一个平均公式。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

见代码:

void Perceptron::mean(Points P) { //P is a struct with all x and y values of the points.
means.clear(); //vector that stores the means
for (unsigned i = 0; i < weights.size(); i++) {
    double m = 0;
    for (unsigned j = 0; j < P.size(); j++) {
        m += pow(P[i].x, i);
    }
    means.push_back(m / P.size());
}

}

void Perceptron::deviation(Points P) {
deviations.clear(); //vector that stores the deviations
for (unsigned i = 0; i < weights.size(); i++) {
    double sd = 0;
    for (unsigned j = 0; j < P.size(); j++) {
        sd += pow(pow(P[j].x, i) - means[i], 2);
    }
    deviations.push_back(sqrt(sd / P.size()));
}

}

标签: c++neural-networkperceptron

解决方案


推荐阅读