所以,您有具有不同点数的 k 曲线,在两个维度上都绑定在 [0..1] 区间内。首先,您需要计算指定查询点的每条曲线的插值。现在你有了新的曲线,点数固定,可以计算它们的平均值。 interp1 函数将执行插值部分。
%% generating sample data
k = 10;
X = cell(k, 1);
Y = cell(k, 1);
hold on;
for i=1:k
n = 10+randi(10);
X{i} = sort([0 1 rand(1, n)]);
Y{i} = sort([0 1 rand(1, n)].^.5);
end
%% Calculating interpolations
% location of query points
X2 = linspace(0, 1, 50);
n = numel(X2);
% initializing values for different curves at different query points
Y2 = zeros(k, n);
for i=1:k
% finding interpolated values for i-th curve
Y2(i, :) = interp1(X{i}, Y{i}, X2);
end
% finding the mean
meanY = mean(Y2, 1);
请注意,不同的插值方法会影响您的结果。例如,ROC 图数据是一种楼梯数据。要在此类曲线上找到准确的值,您应该使用先前邻居插值方法,而不是 interp1 的默认方法线性插值:
Y2(i, :) = interp1(X{i}, Y{i}, X2); % linear
Y3(i, :) = interp1(X{i}, Y{i}, X2, 'previous');
这就是它对最终结果的影响: