关闭

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

标签: 模式识别
717人阅读 评论(0) 收藏 举报
分类:

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
0
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【机器学习】推导支持向量机SVM二分类

SVM从实际问题到对偶问题的推导,不包含求解过程。求解请看最小二乘支撑向量机
  • lpsl1882
  • lpsl1882
  • 2016-08-23 14:27
  • 1213

分类算法之二——特征提取与特征选择

文本的表示及其特征项的选取是文本挖掘、信息检索的一个基本问题,它把从文本中抽取出的特征词进行量化来表示文本信息。将它们从一个无结构的原始文本转化为结构化的计算机可以识别处理的信息,即对文本进行科学的抽...
  • bob908
  • bob908
  • 2014-08-19 16:20
  • 6156

模式识别(二):分类问题简介

根据上一节的知识,不难看出,模式识别的核心任务是——分类。 这一节我们通过一个识别动物种类的简单例子,说明一下分类的基本类别和方法。 一般地,分类问题可以分为两类和多类两种,如下图所示: 有人可能...
  • longyindiyi
  • longyindiyi
  • 2014-02-28 10:27
  • 5296

支持向量机的近邻理解:图像二分类为例(1)

一个古老的哲学原理:世界并不是以小包的形式来到我们面前,除非遍历整个空间,任何训练得到的模型都是过拟合的。面对学习问题,首先面对这一个空间的认知问题,对空间结构的认识来自于接口,而全面的认识来自于遍历...
  • wishchin
  • wishchin
  • 2016-10-19 17:37
  • 684

SVM多类分类---多个二值分类combine

SVM 算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一...
  • shinide1989
  • shinide1989
  • 2013-12-30 09:58
  • 652

模式识别2-线性分类器(最小二乘法)

2.1:算法原理分析 有两类样本,X1,和X2,如果将这两类数据正确分类,则X1对应的y=1,X2对应的y=-1,但是,往往分类的结果不会都正确,这个时候就有分类错误,将这种错误用就是期望值与真实值...
  • CV_YOU
  • CV_YOU
  • 2017-10-25 12:46
  • 332

机器学习(二)--- 分类算法详解

感觉狼厂有些把机器学习和数据挖掘神话了,机器学习、数据挖掘的能力其实是有边界的。机器学习、数据挖掘永远是给大公司的业务锦上添花的东西,它可以帮助公司赚更多的钱,却不能帮助公司在与其他公司的竞争中取得领...
  • china1000
  • china1000
  • 2015-09-20 15:47
  • 11371

分类算法SVM(支持向量机)

支持向量机(Support Vector Machine ,SVM)的主要思想是:建立一个最优决策超平面,使得该平面两侧距离该平面最近的两类样本之间的距离最大化,从而对分类问题提供良好的泛化能力。对于...
  • dcrmg
  • dcrmg
  • 2016-11-01 22:24
  • 4262

实验二 分类算法实验

一.实验目的1.巩固4种基本的分类算法的算法思想:朴素贝叶斯算法,决策树算法,人工神经网络,支持向量机算法; 2.能够使用现有的分类器算法代码进行分类操作 3.学习如何调节算法的参数以提高分类性能...
  • tangyuanzong
  • tangyuanzong
  • 2017-12-24 16:32
  • 559

感知器算法(二分类问题)

感知器二分类
  • hlx371240
  • hlx371240
  • 2014-11-06 15:14
  • 2532
    个人资料
    • 访问:121524次
    • 积分:1834
    • 等级:
    • 排名:千里之外
    • 原创:55篇
    • 转载:49篇
    • 译文:0篇
    • 评论:22条
    最新评论