matlab模式类,模式识别:利⽤MATLAB⽣成模式类
近期開始了模式识别的学习,在此之前须要对模式和模式类的概念有⼀个了解,这⾥使⽤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(‘若⼲个梯形分布的随机点‘);
matlab生成随机数
% 绘制随机点分布直⽅图
[f, y] = hist(x(:,1), g);
figure,bar(y,f,1);
title(‘随机点分布直⽅图‘);
输出三⾓分布和梯形分布的随机点结果、直⽅图: