RANSAC 多元回归

Posted

技术标签:

【中文标题】RANSAC 多元回归【英文标题】:RANSAC Multivariate Regression 【发布时间】:2014-12-24 14:49:49 【问题描述】:

我使用 RANSAC 作为我稳健的回归方法。我找到了一个简洁的工具箱here,它执行 Marco Zuliani 的 RANSAC。我看到有直线和平面的示例,但是如果像多元回归中那样有许多自变量怎么办。有没有办法修改代码来处理这个问题?

到目前为止,我尝试的是修改 3D 代码以处理 N 维。当我这样做时,我得到了所有的点作为内点,我知道这可能是不正确的。这是对数据的过度拟合。以下是我厌倦的修改。

对于test_RANSAC_plane.m,我刚刚向X 添加了更多行

对于estimate_plane.m

function [Theta, k] = estimate_plane(X, s)
    % cardinality of the MSS
    k = size(X,1);

    if (nargin == 0) || isempty(X)
        Theta = [];
        return;
    end;

    if (nargin == 2) && ~isempty(s)
        X = X(:, s);
    end;

    % check if we have enough points
    N = size(X, 2);
    if (N < k)
        error('estimate_plane:inputError', ...
            'At least k points are required');
    end;

    A = [];
    for i=1:k
        A = [A transpose(X(i, :))];
    end
    A = [A ones(N, 1)];
    [U S V] = svd(A);
    Theta = V(:, k+1);

    return;

对于error_plane.m

function [E T_noise_squared d] = error_plane(Theta, X, sigma, P_inlier)
    % compute the squared error
    E = [];
    k = size(X,1);
    den = 0;

    if ~isempty(Theta) && ~isempty(X)
        for i=1:k
            den = den + Theta(i)^2;
        end

        sum = Theta(1)*X(1,:);
        for j=2:k
            sum = sum + Theta(j)*X(j,:);
        end
        sum = sum + Theta(j+1);
        E = (sum).^2 / den;                 
    end;

    % compute the error threshold
    if (nargout > 1)
        if (P_inlier == 0)
            T_noise_squared = sigma;
        else
            d = k;
            % compute the inverse probability
            T_noise_squared = sigma^2 * chi2inv_LUT(P_inlier, d);
        end; 
    end; 
    return;

【问题讨论】:

见csd.uwo.ca/~yuri/Abstracts/ijcv10_pearl-abs.shtml 一个例子展示了一个三维的情况,如果你只是尝试增加维度的数量会发生什么?另外,请分享您迄今为止的总体尝试。 到目前为止,我已经更新了问题以包含代码。 您的问题并不清楚:每个点的尺寸是多少?你要适合多少分?你的模型是什么:它是比输入维度低维的线性子空间,还是高维平面的混合? 我想做的是让代码更通用,这样有人可以输入任何维度的数据并得到结果。因此,预先不知道每个点的尺寸和要拟合的点数。对于模型,我遵循原始代码,因为模型是一个数组,其行数等于维数加一(常数)。这将是对内点进行建模的线的方程。 【参考方案1】:

我不知道这个工具箱,但我过去使用过这个功能:

http://www.peterkovesi.com/matlabfns/Robust/ransac.m

它没有那么复杂,但效果很好,并且在处理任意维度方面没有问题

【讨论】:

以上是关于RANSAC 多元回归的主要内容,如果未能解决你的问题,请参考以下文章

python机器学习手写算法系列——RANSAC(随机抽样一致)回归

python机器学习手写算法系列——RANSAC(随机抽样一致)回归

从 RANSAC 回归中提取系数

线性回归

PCL:多直线拟合(RANSAC)

PCL:多直线拟合(RANSAC)