大概流程是:
1、遍历散点集合中的每个点,对每个点在局部窗口范围内取点,仅x方向距离做权重进行最小二乘拟合,得到每个点的yhat;
2、用第一遍拟合的所有点yhat和原始点的y的差值的中值,计算得到y方向的权重,在乘以滑窗的x方向权重作为新权重,重新拟合散点集合,得到新的yhat
3、代码中2过程遍历了两次
%% Primary Function: lowess
% The main engine for this function.
function [dataout lowerLimit upperLimit xy] = lowess(datain,f,wantplot,imagefile,xdata)
% start timer
start = tic;
rowcol = size(datain);
if rowcol(2) == 3
% assume time index for first column
dte = datain(:,1);
x_data = datain(:,2);
y_data = datain(:,3);
else % assign empty set
dte = [];
x_data = datain(:,1);
y_data = datain(:,2);
end
....
end
翻译为c++代码,测试效果图: