模式识别几何分类算法实现(二)

原创 2015年07月07日 13:45:14

1.位势函数法:

% 位势函数法的实现
function Kx = potential(dataset,classf)
%input:
%dataset       :   训练样本数据集
%classf        :   对应的类别集
%output:
%Kx            :   最终的位势函数表达式

%% 算法流程
N = size(dataset,1);
class_all = unique(classf);
k = 0;
Nc = 0;
syms x1 x2;
X = cell(1,2);
X{1} = x1;
X{2} = x2;
alpha = 1;            % 控制位势函数的衰减速度
 while( Nc < N)
    kn = mod(k,N)+1;
    Xn = dataset(kn,:);
    if(k == 0)
        if(classf(kn) == class_all(1))   
            Kx = exp(-alpha * ((X{1}-Xn(1))^2+ (X{2}-Xn(2))^2));
            k = k + 1;
            continue;
        else
            Kx = -exp(-alpha * ((X{1}-Xn(1))^2+ (X{2}-Xn(2))^2));
            k = k + 1;
            continue;
        end
    end    
    Kx_f = matlabFunction(Kx);    %将符号表达式转化为函数;
    if(classf(kn) == class_all(1))
        if(Kx_f(Xn(1),Xn(2)) > 0)
            Nc = Nc + 1;
        else
            Kx = Kx + exp(-alpha * ((X{1}-Xn(1))^2+ (X{2}-Xn(2))^2));
            Nc = 0;
        end
    else
        if(Kx_f(Xn(1),Xn(2)) < 0)
            Nc = Nc + 1;
        else
            Kx = Kx - exp(-alpha * ((X{1}-Xn(1))^2+ (X{2}-Xn(2))^2));
            Nc = 0;
        end
    end
    k = k + 1;
 end

end
%% 位势函数

% function  y = K(X,Xn,opts)
%    syms X;
%    alpha = 1;           % 控制位势函数的衰减速度
%    switch(opts)
%        case 1           % 指数函数形式
%              y = exp(-alpha * sum((X - Xn).^2));
%        case 2           % 分数形式
%              y = 1 / ( 1 + alpha * sum((X - Xn).^2));
%    end
% end

注意:上述函数得到的是一个表达式kx,需要使用fun = matlabFunction(kx)将其转换为可以传参的函数。

2.支持向量机:

% 最优分类超平面算法实现
function [W,wd] = support_vector(dataset,classf)
%inpput:
%dataset   :   样本数据集
%classf:   :   样本对应的类别集
%output:
%W         :   最优的权向量
%b         :   超平面参数

N = size(dataset,1);
class_all = unique(classf);

%% 转化为求解二次规划问题
X = dataset';      %转化为列向量
y = ones(N,1);
for i = 1:N
    if(classf(i) == class_all(2))
      y(i) = -1;
    end
end

H = zeros(N); 
for i = 1:N
    for j = 1:N
        H(i,j) = 1/2 * y(i)* X(:,i)' * y(j) * X(:,j);
    end
end

f = -1*ones(1,N);
A = [];
b = [];
Aeq = y';
beq = 0;
lb = zeros(N,1);
ub = [];
opts = optimset('Algorithm','active-set','Display','off');
[lamda,~,~] = quadprog(H,f,A,b,Aeq,beq,lb,ub,[],opts);    %解二次规划

W = zeros(2,1);              %计算权向量
Nsv = 0;                     % 统计支持向量的个数
Nsv_y = 0;
Nsv_X = zeros(2,1);

for i = 1:N   
    if (lamda(i) > 0)

        W(1,1) = W(1,1) + lamda(i) * y(i) * X(1,i);  % 只有lamda大于0的样本才是支持向量
        W(2,1) = W(2,1) + lamda(i) * y(i) * X(2,i);

        Nsv = Nsv + 1;
        Nsv_y = Nsv_y + y(i);
        Nsv_X = Nsv_X + X(:,i);
    end
end

wd = 1/Nsv * (Nsv_y - W' * Nsv_X);
end

3.fisher最佳投影方向:

% Fisher 最佳投影方向法实现
function W = Fisher_projective(dataset,classf)
%inpput:
%dataset      :   样本数据集
%classf:      :  样本对应的类别集
%output:
%W            :   最佳投影方向向量

%% 算法流程
row = size(dataset,1);
class_all = unique(classf);

%% 计算类别的均值向量
mean_1 = zeros(1,2);  
mean_2 = zeros(1,2);    
class1_num = 0;
for i = 1:row
    if(classf(i) == class_all(1))
        mean_1 = mean_1 + dataset(i,:);
        class1_num = class1_num + 1;
    else
        mean_2 = mean_2 + dataset(i,:);
    end
end

mean_1 = mean_1/class1_num;           %类别1的均值向量
mean_2 = mean_2/(row - class1_num);   %类别2的均值向量

%% 计算类内总离散度矩阵
Sw = zeros(2);

for i = 1:row
    if(classf(i) == class_all(1))
        temp = dataset(i,:) - mean_1;
        Sw = Sw + temp' * temp;
    else
        temp = dataset(i,:) - mean_2;
        Sw = Sw + temp' * temp;
    end
end

%% 计算最佳投影方向
W = Sw\(mean_1' - mean_2');

end
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

模式识别几何分类算法实现(二)

1.位势函数法:% 位势函数法的实现 function Kx = potential(dataset,classf) %input: %dataset : 训练样本数据集 %class...

模式识别几何分类算法实现(一)

1.感知器算法:% 感知器算法的实现 function [W,b] = new_perceptron(dataset,classf,MaxIter) %% 功能说明 % 求解两类的线性可分问题 %%...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

模式识别(聚类分析算法))

实验一:最大最小距离聚类法 算法源程序如下: #if 1 #include #include #define N 10 using namespace std; struct XX {...

模式识别ID3算法实现

一、决策树ID3算法描述        决策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策...

poj-2002-Squares--二分

确定两点(a,b),(c,b)..可确定另外两点,使之组成正方形 大概如上图所示,可得另外两点坐标 x1=a+b-d; y1=b+c-a; x2=c+b-d; y2=d+c-a; ...

模式识别中分级聚类算法

分级聚类原理具体原理参见清华大学出版社出版张学工编著的模式识别一书或者任意一本模式识别书。其分类规则有最大、最小、均值分类。本练习实现最小规则分类,即根据类间最小距离的最小值判定为一类。

HDU3264 Open-air shopping malls【几何】

题意:有很多圆,选其中一个圆的圆心作为新圆的圆心,新圆要求能覆盖每个圆面积的一半,求最小半径 思路:枚举每个圆,二分半径。这个要用到两个圆相交的面积,存下模板。 #include ...

NOIP提高A组集训第10场11.8 力场护盾

DescriptionZMiG成功粉碎了707的基因突变计划,为了人类的安全,他决定向707的科学实验室发起进攻!707并没有想到有人敢攻击她的实验室,一时间不知所措,决定牺牲电力来换取自己实验室的平...

boosting算法简介

摘自百度搜索研发部,官方博客 http://stblog.baidu-tech.com/?p=19 一、Boosting算法的发展历史   Boosting算法是一种把若干个...

Fisher线性分类器和贝叶斯决策

Fisher的原理 其实就是将所有的样本投影到一个一维的线性空间,然后做分类。 第一步是求解最优的投影方向。 原理推导可能复杂些,但是根据结果的代码实现还是很容易的。 这部分是主代码1 ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)