欧氏距离分类器

欧氏距离分类器的Matlab实现

欧氏距离分类器是贝叶斯分类器的退化版本,在样本满足一定条件下成立。

代码如下:

function cls = mahalanobisClassifier(varargin)
    [x,m,sigma] = parseInputs(varargin{:});		%分析输入的变量
    dis = zeros(size(m,1),1);				%欧氏距离
    cls = zeros(size(x,1),1);				%每个样本所属的类别
    for i = 1:size(x,1)					%进行分类
        for j = 1:size(m,1)
            dis(j) = (x(i,:)-m(j,:))/sigma*(x(i,:)-m(j,:))';
        end
       [~,cls(i)] = min(dis);
    end
    
    function [x,m,sigma] = parseInputs(varargin)	%用于分析输入的变量的函数
        narginchk(2,inf)
        validateattributes(varargin{1},{'numeric'},{'nonempty','nonsparse',...
            '2d'})
        x = varargin{1};
        if nargin == 2
            validateattributes(varargin{2},{'numeric'},{'nonempty','nonsparse',...
            '2d','ncols',size(x,2)})
            m = varargin{2};
            sigma = eye(size(m,1));
        elseif nargin == 3
            validateattributes(varargin{2},{'numeric'},{'nonempty','nonsparse',...
            '2d','ncols',size(x,2)})
            validateattributes(varargin{3},{'numeric'},{'nonempty','nonsparse',...
                '2d','nrows',size(varargin{2},1),'ncols',size(varargin{2},1)})
            assert(logical(prod(varargin{3}==varargin{3}')))
            m = varargin{2};
            sigma = varargin{3};
        else
            n = length(varargin);
            m = zeros(n-2,size(x,2));
            for k = 2:n-1
                validateattributes(varargin{k},{'numeric'},{'nonempty','nonsparse',...
                    '2d','nrows',1,'ncols',size(m,2)})
                m(k-1,:) = varargin{k};
            end
            validateattributes(varargin{end},{'numeric'},{'nonempty','nonsparse',...
                '2d','nrows',size(m,2),'ncols',size(m,2)})
            assert(logical(prod(prod(varargin{end}==varargin{end}'))))
            sigma = varargin{end};
        end
    end

发布了1 篇原创文章 · 获赞 1 · 访问量 29

猜你喜欢

转载自blog.csdn.net/weixin_44498530/article/details/104053337