博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模式识别(第四版)上机实验 【2.2~2.5】
阅读量:6114 次
发布时间:2019-06-21

本文共 3058 字,大约阅读时间需要 10 分钟。

  • 由高斯类生成数据集
% 输入% 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);    endfunction 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

你可能感兴趣的文章
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>