Как сделать нормализацию данных для интерполяции с персептроном? - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь сделать нормализацию данных для полиномиальной интерполяции с персептроном, я использую следующую формулу:

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;
}

Проблема в том, что до нормализации полином сходился к точкам. enter image description here

Но после нормализации полином сходится к другим точкам, и я не знаю, где он сходится. enter image description here

Формула для полинома будет выглядеть следующим образом (где W - вес перцептрона): enter image description here

Так что я использовал формулу среднего для каждого значения х.

enter image description here

enter image description here

enter image description here

см. Код:

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()));
}

}

...