贝叶斯分类器可由下列假设进行简化处理:
(1)分类类别是等概率事件的;
(2)分类数据服从高斯分布;
(3)对于所有类别而言,协方差矩阵是相同的;
(4)协方差矩阵式对角阵,且对角元素相等,协方差矩阵S=delta*delta*I ,I为单位矩阵。
基于以上四条假设,贝叶斯分类器等效于欧氏距离分类器,对于待分类的x,分类到wi 需满足:
||x-mi|| = sqrt( (x-mi)* (x-mi) ) < ||x-mj|| , 任意的 i != j
欧氏距离分类器函数如下: - function [z]=euclidean_classifier(m,X)
- %实现欧式距离分类器设计
- % 输入:
- % m: 列向量,均值向量,每一列表示待分类数据的均值向量
- % X: 每一列表示待分类的数据
- %输出:
- % z: 输出属于哪一类的标签
- %
- [l,c]=size(m); % 维数
- [l,N]=size(X); % 维数
-
- for i=1:N
- for j=1:c
- de(j)=sqrt((X(:,i)-m(:,j))'*(X(:,i)-m(:,j))); % 欧氏距离
- end
- [num,z(i)]=min(de); % 最小距离
- end
复制代码
如果对贝叶斯分类器做前三条假设,也就是去掉“假设(4)协方差矩阵式对角阵,且对角元素相等,协方差矩阵S=delta*delta*I ,I为单位矩阵。”,那么贝叶斯分类器等价于马氏距离分类器,对于待分类的x,分类到wi 需满足: sqrt( (x-mi) / S (x-mi) ) <sqrt( (x-mj) / S (x-mj) ), 任意的 i != j
马氏距离分类器函数如下: - function z=mahalanobis_classifier(m,S,X)
- % 实现马氏距离分类器设计
- % 输入:
- % m: 列向量,均值向量,每一列表示待分类数据的均值向量
- % S: 方阵,协方差矩阵
- % X: 每一列是待分类的数据
- %输出:
- % z: 输出属于哪一类的标签
- [l,c]=size(m); % 维数
- [l,N]=size(X); % 维数
-
- for i=1:N
- for j=1:c
- dm(j)=sqrt((X(:,i)-m(:,j))'*inv(S)*(X(:,i)-m(:,j))); % 马氏距离计算
- end
- [num,z(i)]=min(dm); % 最小距离
- end
复制代码
例如主程序如下: - clc,clear,close all % 清屏、清工作区、关闭窗口
- warning off % 消除警告
- feature jit off % 加速代码执行
- % 马氏距离分类器
- x=[0.1 0.5 0.1]'; % 初始化
- m1=[0 0 0]'; % 初始化
- m2=[0.5 0.5 0.5]'; % 初始化
- m=[m1 m2];
- S=[0.8 0.01 0.01;
- 0.01 0.2 0.01;
- 0.01 0.01 0.2];
- z=mahalanobis_classifier(m,S,x) % 马氏距离分类
复制代码
|