当前位置: 首页 > news >正文

模式识别(第四版)上机实验 【2.2~2.5】

  • 由高斯类生成数据集
% 输入
% m 是l*c矩阵,第i列是第i类分布的平均向量,c表示类别
% S是l*l*c矩阵,第i个二维l*l成分是i类分布的协方差
% P是c维向量,它由类的先验概率组成
% 返回值
% (估计)N列向量的矩阵X,矩阵的每一列都是一个l维数据向量
% 行向量y的每i个表示基于第i个数据向量的类
function[X,y] = generate_gauss_classes(m, S, P, N)
    [l, c]=size(m);
    X=[];
    y=[];
    for j=1:c
        %从每个分布生成[p(j)*N]向量
        t = mvnrnd(m(:, j), S(:, :, j), fix(P(j) * N));
        % 由于固定操作,样本总数可能略小于N
        X=[X t'];
        y=[y ones(1, fix(P(j) * N)) * j];
    end
  • 贝叶斯分类器
% 输入参数
% m:均值向量
% X:基于上述类的包含列向量的矩阵X
% 输出为一个N维向量,它的第i部分包含一个类,这个类的相应向量是根据最小欧几里得距离给定的
function z = euclidean_classifier(m, X)
    [l, c] = size(m);
    [l, N] = size(X);
    for i = 1:N
        for j = 1:c
            t(j) = sqrt((X(:, i) - m(:, j))' * (X(:,i) - m(:,j)));
        end
        [num, z(i)] = min(t);
    end

function z = comp_gauss_dens_val(m, S, x)
    [l, q] = size(m);
    z = (1/((2*pi)^(1/2)*det(S)^0.5))*exp(-0.5*(x-m)'*inv(S)*(x-m));
    
  • 欧几里得距离分类器  
% 输入参数
% m:均值向量
% X:基于上述类的包含列向量的矩阵X
% 输出为一个N维向量,它的第i部分包含一个类,这个类的相应向量是根据最小欧几里得距离给定的
function z = euclidean_classifier(m, X)
    [l, c] = size(m);
    [l, N] = size(X);
    for i = 1:N
        for j = 1:c
            t(j) = sqrt((X(:, i) - m(:, j))' * (X(:,i) - m(:,j)));
        end
        [num, z(i)] = min(t);
    end
  • Mahalanobis距离分类器
% 输入参数
% m:均值向量
% S:c类问题的类分布的协方差矩阵
% X:基于上述类的包含列向量的矩阵X
% 输出为一个N维向量,它的第i部分包含一个类,这个类的相应向量是根据最小Mahalanobis距离给定的
function z = mahalanobis_classifier(m, S, X)
    [l, c] = size(m);
    [l, N] = size(X);
    for i = 1:N
        for j = 1:c
            t(j) = sqrt((X(:, i) - m(:, j))' * inv(S(:, :, j)) * (X(:, i) - m(:, j)));
        end
        [num, z(i)] = min(t);
    end
  • 数据画图
% 注意:本函数可以处理多达6个不同的类
function plot_mul_group_data(X, y, class_error, title_text, m)
    [l, N] = size(X); % N=数据向量的编号,l=维数
    [l, c] = size(m); % c=类的编号
    [ll, N] = size(y);    
    if(l ~= 2)
        fprintf('NO PLOT CAN BE GENERATED \\ n')
        return
    else
        figure(1);
        pale = ['r.'; 'g.'; 'b.'; 'y.'; 'm.'; 'c.'];
        for k = 1:ll
            subplot(2,2,k);
            hold on
            for i = 1: N
                plot(X(1, i), X(2, i), pale(y(k,i), :))
            end
            % 绘制类均值
            for j = 1: c
                plot(m(1, j), m(2, j), 'k + ')
            end
            tt = sprintf('%s(分类错误率:%.3f)', title_text{k}, class_error(k));
            title(tt);
        end
    end
  • 上机实验【2.2】(其他题目,注意更换m,S的数据)
randn('seed', 0);
m = [1 1;12 8;16 1]';
S(:,:,1) = [4 0;0 4];
S(:,:,2) = [4 0;0 4];
S(:,:,3) = [4 0;0 4];
P=[1/3;1/3;1/3];
N=1000;
[X1,y] = generate_gauss_classes(m,S,P,N);

% 贝叶斯分类
z1 = bayes_classifier(m, S, P, X1); 
ans1 = compute_error(y, z1);

% 欧几里得距离
z2 = euclidean_classifier(m, X1); 
ans2 = compute_error(y, z2);

% Mahalanobis距离
z3 = mahalanobis_classifier(m, S, X1); 
ans3 = compute_error(y, z3);

% 绘图
plot_mul_group_data(X1, [y;z1;z2;z3], [0;ans1;ans2;ans3], {'样本数据集';'贝叶斯分类';'欧几里得距离';'Mahalanobis距离'}, m);
  • 【2.2】图形结果(参数:m = [1 1;12 8;16 1]'; S = [4 0;0 4]; )

  • 【2.3】图形结果(参数:m = [1 1;14 7;16 1]'; S = [5 3;3 4];)

  • 【2.4】图形结果(参数:m = [1 1;8 6;13 1]'; S = [6 0;0 6];)

  • 【2.5】图形结果(参数:m = [1 1;10 5;11 1]'; S = [7 4;4 5];)

转载于:https://www.cnblogs.com/tuty/p/5184020.html

相关文章:

  • 第23讲: Scala高阶函数实战详解
  • SQL Server代理(5/12):理解SQL代理错误日志
  • Spring中@Autowired注解、@Resource注解的区别
  • jquery easyui的datagrid在初始化的时候会请求两次URL?
  • KBEngine 服务器端-loginapp-协议构建、解析执行
  • android 三级菜单 BaseExpandableListAdapter
  • [linux]linux命令学习-netstat
  • 内容观察者
  • iOS学习笔记19-抽屉MMDrawerController使用
  • thrift 远程服务调用 简单示例
  • 中国移动短信网关错误代码汇总(完整版)
  • 编译安装 apache+mysql+php 详细步骤
  • OC基础--常用类的初步介绍与简单实用之NSString
  • iOS UIViewController生命周期控制
  • Java 异常处理的 9 个最佳实践
  • 《Java编程思想》读书笔记-对象导论
  • 2017年终总结、随想
  • css选择器
  • learning koa2.x
  • PHP那些事儿
  • Python_网络编程
  • Python学习之路16-使用API
  • spring + angular 实现导出excel
  • tweak 支持第三方库
  • ubuntu 下nginx安装 并支持https协议
  • VuePress 静态网站生成
  • 阿里云前端周刊 - 第 26 期
  • 高性能JavaScript阅读简记(三)
  • 精彩代码 vue.js
  • 普通函数和构造函数的区别
  • 深度学习在携程攻略社区的应用
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 赢得Docker挑战最佳实践
  • gunicorn工作原理
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #android不同版本废弃api,新api。
  • #define 用法
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (八)Flask之app.route装饰器函数的参数
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十五)使用Nexus创建Maven私服
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core Swagger 过滤部分Api
  • .NET Core 版本不支持的问题
  • .NET NPOI导出Excel详解
  • .NET Reactor简单使用教程
  • .NET Standard 的管理策略
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .netcore 获取appsettings
  • .net连接oracle数据库