近期開始了模式识别的学习,在此之前须要对模式和模式类的概念有一个了解,这里使用MATLAB实现一些模式类的生成。在此之前,引用百科上对于模式识别和模式类的定义。也算加深以下了解:

    模式识别(Pattern Recognition):人类在日常生活的每一个环节,从事着模式识别的活动。

能够说每一个有正常思维的人,在他没有入睡时都在进行模式识别的活动。

坐公共汽车找汽车站,骑车判别可行进道路。对观察到的现象作出推断。对听到的声音作出反应,推断东西的好与坏以及水果的成熟与否等等都是人们推断是非,判别事物的过程。可是对模式识别这个词就显得陌生而难以理解了。

确切地说,模式识别在这里是针对让计算机来推断事物而提出的。如检測病理切片中是否有癌细胞,文字识别,话语识别,图像中物体识别等等。该学科研究的内容是使机器能做曾经仅仅能由人类才干做的事。具备人所具有的、对各种事物与现象进行分析、描写叙述与推断的部分能力。
模式类与模式,或者模式与样本在集合论中是子集与元素之间的关系。 当用一定的度量来衡量两个样本,而找不出它们之间的区别时,它们在这样的度量条件下属于同一个等价类。这就是说它们属于同一子集,是一个模式,或一个模式类。 而不同的模式类之间应该是能够区分的,它们之间应有明白的界线。可是对实际样本来说,有时又往往不能对它们进行确切的划分,即在所使用的度量关系中。分属不同的类别的样本却表现出同样的属性。因而无法确凿无误地对它们进行区分。比如在癌症初期,癌细胞与正常细胞的界线是含糊的,除非医术有了进一步发展,能找到更准确有效的分类方法。

以下是练习:

在Matlab 中提供了非常多产生随机数和随机向量的函数,以及计算随机函数的概率密度值的函数。以下是几个较经常使用的函数:

rand() 生成均匀分布随机数

randn() 生成高斯分布随机数

mvnrnd() 生成多元高斯分布的随机向量矩阵

mvnpdf() 计算多元高斯分布的概率密度函数值

在阅读了上述函数的MATLAB在线帮助后,完毕以下的程序实现,分为三个练习:

练习一:在一维区间[10,70]中,生成1000个均匀分布的随机数,然后统计并绘制这些数的直方图;在二维区间[1,5]☓[20,30]中,生成5000 个均匀分布的二维随机点,并绘制出它们的二维散点图。在三维区间[10,50]☓[30,60]☓[10,15]中,生成10000 个均匀分布的三维随机点量,并绘制出它们的三维散点图。

% rand()生成区间[10,70]的1000个随机数
% 并显示直方图 for i = 1:1000
a(i) = rand() * 60 + 10;
end
b = hist(a, 10:70);
figure,bar(10:70, b, 'g');
grid on
title('rand()产生1000个[10,70]的随机数直方图'); for k = 1:5000
TwoDimension(k,1) = rand() * 4 + 1;
TwoDimension(k,2) = rand() * 10 + 20;
end
figure,plot(TwoDimension(:,1), TwoDimension(:,2), '*');
xlim([0 6]);
ylim([10 40]);
grid on
title('在[1,5]*[20,30]中产生5000个均匀分布的二维随机点'); for j = 1:10000
ThreeDimension(j,1) = rand() * 40 + 10;
ThreeDimension(j,2) = rand() * 30 + 30;
ThreeDimension(j,3) = rand() * 5 + 10;
end
figure,scatter3(ThreeDimension(:,1),ThreeDimension(:,2),ThreeDimension(:,3),'r');
xlim([0 60]);
ylim([20 70]);
zlim([0 20]);
grid on;
title('产生10000个均匀分布的三维随机点');

输出一维、二维和三维随机点生成效果(边界限定參照要求):

以下是在练习一基础上的扩展:利用均匀分布的随机数函数,编写能够生成具有三角分布、以及梯形分布的随机数的函数。

用它们生成一定数量的样本数据,并绘制数据分布图。

% 产生5000个随机点,然后依据公式剔除三角形外的点
n = 5000;
x = rand(n,2) * 2;
% 变量名 = @(输入參数列表)运算表达式
fx = @(x)(x < 1).*(2*x)+(x >= 1).*(4-2*x);
g=0:0.2:2;
y=fx(g);
% 绘制边界直线。设定直线粗细
figure,plot(g,y,'r-','linewidth',3);
hold on % 推断元素在y轴上的值是否超出三角形的边界
% 对边界外的点标记为一个值
for t = 1:n
if x(t,2) > fx(x(t,1))
x(t,:) = [0, 0];
end
end
% 扫描标定的值并删除这些元素,剩下边界内的元素
for t = n:-1:1
if x(t,:) == [0, 0]
x(t,:) = [];
end
end
plot(x(:,1),x(:,2),'o');
title('若干个三角分布的随机点');
% 绘制随机点分布直方图
[f, y] = hist(x(:,1), g);
figure,bar(y,f,1);
title('随机点分布直方图'); % 产生5000个随机点,然后依据公式剔除梯形外的点
n = 5000;
x = rand(n,2) * 3;
% 变量名 = @(输入參数列表)运算表达式
fx = @(x)(x <= 1).*(3*x)+( x > 1 & x <= 2).*3 + (x > 2).*(9-3*x);
g=0:0.1:3;
y=fx(g);
% 绘制边界直线。设定直线粗细
figure,plot(g,y,'r-','linewidth',3);
hold on % 推断元素在y轴上的值是否超出梯形的边界
% 对边界外的点标记为一个值
for t = 1:n
if x(t,2) > fx(x(t,1))
x(t,:) = [0, 0];
end
end
% 扫描标定的值并删除这些元素,剩下边界内的元素
for t = n:-1:1
if x(t,:) == [0, 0]
x(t,:) = [];
end
end
plot(x(:,1),x(:,2),'o');
title('若干个梯形分布的随机点');
% 绘制随机点分布直方图
[f, y] = hist(x(:,1), g);
figure,bar(y,f,1);
title('随机点分布直方图');

输出三角分布和梯形分布的随机点结果、直方图:

练习二:生成两组各1000个具有不同均值和方差的一维高斯分布的随机数。然后统计并绘制这些点的直方图;生成三组各1000 个具有不同均值矢量和协方差矩阵的二维随机矢量,并绘制出它们的二维散点图。生成五组各1000个具有不同均值矢量和协方差矩阵的三维随机矢量。并绘制出它们的三维散点图。

进一步,绘制上述三维随机矢量数据集合的二维投影散点图。能够指定模式向量的当中两个分量,将集合中每一个向量的这两个分量提取出来构成一个2维模式子分量的向量集合,然后在二维平面上画出该子分量集合的二维散点图。

% 使用randn()两组1000个随机数
% 并显示直方图
% 产生一个随机分布的指定均值和方差的矩阵:将randn产生的结果乘以标准差,然后加上期望均值就可以。 for i = 1:1000
Gaussian(i,1) = sqrt(1) * randn() + 5;
Gaussian(i,2) = sqrt(2) * randn() + 10;
end
G1 = hist(Gaussian(:,1), 0:20);
G2 = hist(Gaussian(:,2), 0:20);
figure,subplot(1,2,1),bar(0:20, G1, 'g');
grid on
title('均值为5,方差为1的高斯分布随机数直方图');
subplot(1,2,2),bar(0:20, G2, 'g');
grid on
title('均值为10,方差为2的高斯分布随机数直方图'); % mvnrnd(mu,sigma,n)
% 产生二维正态随机数,mu为期望向量。sigma为协方差矩阵,n为规模。 mu = [2 2];
sigma = [1 0; 0 2];
r = mvnrnd(mu,sigma,1000);
figure,plot(r(:,1),r(:,2),'r+');
hold on;
mu = [7 10];
sigma = [ 3 0; 0 3];
r2 = mvnrnd(mu,sigma,1000);
plot(r2(:,1),r2(:,2),'b*')
hold on;
mu = [15 20];
sigma = [ 2 0; 0 2];
r3 = mvnrnd(mu,sigma,1000);
plot(r3(:,1),r3(:,2),'go')
grid on;
title('三组高斯二维随机矢量散点图'); % 产生五组不同的三维高斯随机矢量
mu1 = [2 2 2];
sigma1 = [1 0 0; 0 2 0; 0 0 3];
r1 = mvnrnd(mu1,sigma1,1000); mu2 = [6 0 -4];
sigma2 = [1 0 0; 0 2 0; 0 0 3];
r2 = mvnrnd(mu2,sigma2,1000); mu3 = [-9 7 0];
sigma3 = [1 0 0; 0 2 0; 0 0 3];
r3 = mvnrnd(mu3,sigma3,1000); mu4 = [0 15 -2];
sigma4 = [1 0 0; 0 2 0; 0 0 3];
r4 = mvnrnd(mu4,sigma4,1000); mu5 = [-12 12 -12];
sigma5 = [1 0 0; 0 2 0; 0 0 3];
r5 = mvnrnd(mu5,sigma5,1000); figure,plot3(r1(:,1),r1(:,2),r1(:,3),'r+',...
r2(:,1),r2(:,2),r2(:,3),'g+',...
r3(:,1),r3(:,2),r3(:,3),'b+',...
r4(:,1),r4(:,2),r4(:,3),'m+',...
r5(:,1),r5(:,2),r5(:,3),'k+');
grid on
title('五组不同的三维高斯随机矢量'); % 绘制三维随机矢量的二维投影散点图
figure,plot(r1(:,2),r1(:,3),'r+',...
r2(:,2),r2(:,3),'g+',...
r3(:,2),r3(:,3),'b+',...
r4(:,2),r4(:,3),'m+',...
r5(:,2),r5(:,3),'k+');
grid on
title('三维高斯随机矢量的二维投影,取第2、3维');

练习三:确定一个二维的均值矢量和协方差矩阵。然后利用matlab 中的meshgrid 函数生成一个二维网格。利用mvnpdf 函数计算在每一个网格点上的概率密度函数值,并绘制出这些函数值的三维曲面图。

% 用meshgird,mvnpdf等函数绘制三维网格图
mu = [0 0];
SIGMA = [1 0; 0 1];
[X,Y] = meshgrid(-5:0.2:5, -5:0.2:5); %在XOY面上。产生网格
p = mvnpdf([X(:),Y(:)],mu,SIGMA); % 求取联合概率密度,相当于Z轴
p = reshape(p,size(X)); % 将Z值相应到相应的坐标上
mesh(X,Y,p); % 绘制
title('三维正态分布图曲面图');

扩展实验2,编写一个生成N 个d 维向量的混合高斯类数据集的函数。当中,生成的数据集中共同拥有N个模式向量。它们分成c 类。

各个类相应的样本数分别为Ni。i = 1, 2, …, c,服从N(mi。Si),i = 1, 2, …, c 的高斯分布, mi,Si 各自是第i 类的均值向量和协方差矩阵。

取不同的值,在二维空间和三维空间中生成数据。并绘制出散点图进行验证。这里我们创建一个函数实现这个功能MixGaussian():

% 随机点个数N ,类别C ,维度d 。均值mu, 方差sigma
function result = MixGaussian(N, C, d, mu, sigma)
color = {'r.', 'g.', 'm.', 'b.', 'k.', 'y.'}; % 用于存放不同类数据的颜色
% if nargin <= 3 & N < 0 & C < 1 & d < 1
% error('參数太少或參数错误');
if d == 1
for i = 1 : C
for j = 1 : N/C
r(j,i) = sqrt(sigma(1,i)) * randn() + mu(1,i);
end
X = round(mu(1,i)-5);
Y = round(mu(1,i) + sqrt(sigma(1,i))+5);
b = hist(r(:,i), X:Y);
subplot(1,C,i),bar(X:Y, b,'b');
title('三类一维随机点的分布直方图');
grid on
end
elseif d == 2
for i = 1:C
r(:,:,i) = mvnrnd(mu(:,:,i),sigma(:,:,i),round(N/C));
plot(r(:,1,i),r(:,2,i),char(color(i)));
hold on;
end
elseif d == 3
for i = 1:C
r(:,:,i) = mvnrnd(mu(:,:,i),sigma(:,:,i),round(N/C));
plot3(r(:,1,i),r(:,2,i),r(:,3,i),char(color(i)));
hold on;
end
else disp('维数仅仅能设置为1,2或3');
end
result = r;

效果例如以下。依据输入的维度、方差、均值等參数的不同均能够输出模式类:

扩展实验3。编写一个绘制由c类共N个d 维模式向量构成的多模式类集合的二维投影画图函数。当中。模式的类别标记已知。不同类别的模式绘制时用不同的颜色表示。当中,d维模式的2维子空间,简单来说就是由d 维模式矢量中的当中2个分量构成向量空间,在作图时以这两个分量做为坐标量,这里定义一个函数TwoDProject()。

% 输入数据。输出二维投影。X,Y为坐标轴选择
function TwoDProject(data, X, Y)
color = {'r.', 'g.', 'm.', 'b.', 'k.', 'y.'}; % 用于存放不同类数据的颜色
figure;
[a,b,c] = size(data);
if X == 1 && Y == 2
for i = 1:c
plot(data(:,X,i),data(:,Y,i),char(color(i)));
hold on;
end
elseif X == 1 && Y == 3
for i = 1:c
plot(data(:,X,i),data(:,Y,i),char(color(i)));
hold on;
end
elseif X == 2 && Y == 3
for i = 1:c
plot(data(:,X,i),data(:,Y,i),char(color(i)));
hold on;
end
else
disp('维数设置错误');
end
grid on;
title('多维随机点的二维投影图');

以上完整代码可在此处下载:http://download.csdn.net/detail/liyuefeilong/8499915

模式识别:利用MATLAB生成模式类的更多相关文章

  1. 利用Matlab生成一个网格化的三维球面(生成直角坐标)

    利用Matlab生成一个网格化的三维球面,分别对径向方向.经度方向和纬度方向进行网格化,代码如下: %生成一个笛卡尔坐标系下球面网格的x,y,z坐标 %r为球面距离 %nJingdu,nWeidu分别 ...

  2. 【转】利用matlab生成随机数函数

    原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵  rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成 ...

  3. 使用hibernate利用实体类生成表和利用表生成实体类

    1,配置数据库,这里以oracle数据库为例.点击右侧Database图标:

  4. [04] 利用注解生成实体类对应的建表sql语句

    1.实现功能 我们已经对注解有了基本的认识,知道了如何自定义注解,如何使用和最基本的处理注解. 本篇主要介绍,如何使用运行时级别的注解,配合反射来自动生成建表的sql语句.如下例: 我们有实体类Stu ...

  5. 利用Matlab生成一个网格化的三维三轴椭球面(生成直角坐标)

    代码很简单,a,b,c分别为椭球的三轴轴长,a=b=c时得到的是三维球面,a=b!=c时得到的是三维椭球面,a!=b且a!=c且b!=c时得到的是三维旋转椭球面 %生成一个笛卡尔坐标系下三轴椭球表面的 ...

  6. 面向对象:MATLAB的自定义类 [MATLAB]

    https://www.cnblogs.com/gentle-min-601/p/9785812.html 面向对象:MATLAB的自定义类 [MATLAB]   这几天刚刚开始学习MATLAB的面向 ...

  7. [转载]Matlab生成Word报告

    最近在进行一批来料的检验测试,一个个手动填写报告存图片太慢了,就有了种想要使用Matlab在分析完后数据可以自动生成PDF报告的想法,于是就去网上搜索了相关的资料,发现Matlab中文论坛上有xiez ...

  8. IDEA03 连接数据库、自动生成实体类

    1 版本说明 JDK:1.8 MAVEN:3.5 SpringBoot:2.0.4 IDEA:旗舰版207.2 MySQL:5.5 2 利用IDEA连接数据库 说明:本案例以MySQL为例 2.1 打 ...

  9. Matlab生成Word--xdd

    摘自<MATLAB统计分析与应用:40个案例分析>(谢中华老师著)P452页function CreatWord %利用Matlab生成word filespec_user = [pwd ...

随机推荐

  1. img 标签下多余空白的解决方法

    在浏览器中,图片默认的vertical-align是baseline.那么,我们该如何去掉这多余的空白呢? 1)将图片转换为块级 img{display:block;} 2) 设置图片的垂直对齐方式 ...

  2. 关于each()、find()、filter()遍历节点的操作方法

    关于each().find().filter()遍历节点的操作方法 each语法: each(fn)  ; 返回值:jQuery fn:代表对于每个匹配元素所要执行的函数 each()方法共有三种形式 ...

  3. Oracle中DBMS_LOB包使用小结

    本文主要介绍oracle数据库中dbms_lob包的使用以及使用dbms_lob包来维护lob数据库类型的基本方法.随着社会的发展,在现代信息系统的开发中,需要存储的已不仅仅是简单的文字信息,同时还包 ...

  4. Visual Studio跨平台开发(3):Xamarin iOS多页面应用开发

    前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode进行iOS基本控制项的操作. 但都是属于单一画面的应用程式. 这次我们要来练习如何通过Navigation Contr ...

  5. maven工程开始

    clipse中,maven工程,更新pom.xml文件后,会让你更新工程.快捷键是Alt + F5,也可以右键工程,Maven-->update project...,这样有个问题就是默认的JR ...

  6. HDU 6301.Distinct Values-贪心、构造字典序最小的数列 (2018 Multi-University Training Contest 1 1004)

    HDU6301.Distinct Values 这个题就是给你区间要求区间内的数都不相同,然后要求是字典序最小,直接贪心走一遍,但是自己写的时候,思路没有错,初始化写挫了... 将区间按左端点小的排序 ...

  7. PL/SQL&存储过程||存储函数&触发器

    plsql 有点:交互式  非过程化   数据操纵能力强   自动导航语句简单   调试简单   想率高 声明类型的方式 1.基本类型 2.引用变量 3.记录型变量 基本格式 declare 声明 b ...

  8. luogu P1195 口袋的天空

    题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在 ...

  9. Map集合-根据宠物昵称查找宠物

    package collection; /** * 宠物类 * @author * */ public class Pet { private String name; private String ...

  10. iptables实现IP地址重定向(转发)

    iptables不单只防火墙这么简单,NAT转发这些都很强大.但是市面上iptables的教程基本都是围绕着CentOS 6来展开的,而对于CentOS 7和Ubuntu又不一样的写法,尤其是Ubun ...