Я пытаюсь сделать нормализацию данных для полиномиальной интерполяции с персептроном, я использую следующую формулу:
Где:
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 - вес перцептрона):
Так что я использовал формулу среднего для каждого значения х.
см. Код:
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()));
}
}