Нормализация данных с отличающимися значениями

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

  • Преимущества: Нормализация ваших данных может потенциально улучшить результат интерполяции, когда независимые переменные имеют различные модули и существенно различные шкалы. В этом случае масштабирование входных параметров, чтобы иметь подобные значения может улучшить числовые аспекты интерполяции. Пример, где нормализация была бы выгодна, - то, если x представляет скорость вращения двигателя в RPMs от 500 до 3 500, и 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

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

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

% Normalize Sample Points
x = (x-mean(x))/std(x);
y = (y-mean(y))/std(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)

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

Смотрите также

| |

Была ли эта тема полезной?