Нормализуйте данные с различными величинами

В этом примере показано, как использовать нормализацию для улучшения результатов данного , имеющего разброса с помощью griddata. Нормализация может улучшить результаты интерполяции в одних случаях, но в других она может поставить под угрозу точность решения. Использовать ли нормализацию - это суждение, вынесенное на основе характера интерполируемых данных.

  • Преимущества: Нормализация ваших данных может потенциально улучшить результат интерполяции, когда независимые переменные имеют различные модули измерения и существенно разные шкалы. В этом случае масштабирование входов, чтобы иметь сходные величины, может улучшить числовые аспекты интерполяции. Пример, где нормализация была бы выгодна, если бы x представляет скорость вращения двигателя в оборотах от 500 до 3500 и y представляет нагрузку двигателя от 0 до 1. Шкалы x и y отличаются несколькими порядками величины, и у них разные модули.

  • Предостережения: Используйте осторожность при нормализации данных, если независимые переменные имеют одинаковые модули, даже если шкалы переменных разные. С данными тех же модулей нормализация искажает решение путем добавления направленного смещения, которое влияет на базовую триангуляцию и в конечном счете снижает точность интерполяции. Пример, где нормализация ошибочна, если и то, и другое x и y представлять местоположения и иметь модули измерения. Масштабирование x и y неравномерно не рекомендуется, потому что 10 м из-за Востока должны быть пространственно такими же, как 10 м из-за севера.

Создайте некоторые выборочные данные, где значения в y на несколько порядков величины больше, чем в x. Предположим, что x и y иметь различные модули.

x = rand(1,500)/100; 
y = 2.*(rand(1,500)-0.5).*90; 
z = (x.*1e2).^2; 

Используйте выборочные данные для построения сетки точек запроса. Интерполируйте выборочные данные на сетке и постройте график результатов.

X = linspace(min(x),max(x),25); 
Y = linspace(min(y),max(y),25); 
[xq, yq] = meshgrid(X,Y); 
zq = griddata(x,y,z,xq,yq); 

plot3(x,y,z,'mo')
hold on
mesh(xq,yq,zq)
xlabel('x')
ylabel('y')
hold off

Figure contains an axes. The axes contains 2 objects of type line, surface.

Результат, полученный griddata не очень гладко и кажется шумным. Этому способствуют различные шкалы в независимых переменных, поскольку небольшое изменение размера одной переменной может привести к гораздо большему изменению размера другой переменной.

Начиная с x и y иметь различные модули, нормализация их так, чтобы они имели одинаковые величины, должна помочь получить лучшие результаты. Нормализуйте точки выборки с помощью z-значений и регенерируйте интерполяцию с помощью griddata.

% Normalize Sample Points
x = normalize(x);
y = normalize(y);

% Regenerate Grid 
X = linspace(min(x),max(x),25); 
Y = linspace(min(y),max(y),25); 
[xq, yq] = meshgrid(X,Y); 

% Interpolate and Plot
zq = griddata(x,y,z,xq,yq);
plot3(x,y,z,'mo')
hold on
mesh(xq,yq,zq)

Figure contains an axes. The axes contains 2 objects of type line, surface.

В этом случае нормализация точек выборки позволяет griddata для вычисления более плавного решения.

См. также

| |