模式识别大作业

发布 2021-03-07 07:30:28 阅读 3891

均值聚类算法。

聚类是对数据空间中数据对象进行分类,位于同一类中的数据对象之间的相似度较大,而位于不同类之间的数据对象差异度较大。聚类是一种无监督学习,能自动对数据集进行划分。常见的聚类算法:

k-means,dbscan,cure等算法。

k均值聚类算法:

第一步:选k个初始聚类中心,z1(1),z2(1),…zk(1),其中括号内的序号为寻找聚类中心的迭代运算的次序号。聚类中心的向量值可任意设定,例如可选开始的k个模式样本的向量值作为初始聚类中心。

第二步:逐个将需分类的模式样本按最小距离准则分配给k个聚类中心中的某一个zj(1)。

假设i=j时,其中k为迭代运算的次序号,第一次迭代k=1,sj表示第j个聚类,其聚类中心为zj。

第三步:计算各个聚类中心的新的向量值,zj(k+1),j=1,2,…,k

求各聚类域中所包含样本的均值向量:

其中nj为第j个聚类域sj中所包含的样本个数。以均值向量作为新的聚类中心,可使如下聚类准则函数最小:

在这一步中要分别计算k个聚类中的样本均值向量,所以称之为k-均值算法。

第四步:若 ,j=1,2,…,k,则返回第二步,将模式样本逐个重新分类,重复迭代运算;

若 ,j=1,2,…,k,则算法收敛,计算结束。

ii**。1. sonar数据。

clc, clear

sonar = csvread('e:\power\专业课程\大作业们\')

aa, bb]= size(sonar);

data1= sonar( (1: (floor(aa/2)) 1: bb-1 );划分前一半的数据作为第一类。

data2= sonar( (floor(aa/2): aa) )1: bb-1); 划分后一半的数据作为第二类。

p1=randsample(1:floor(aa/2), 1);

p2=randsample(floor(aa/2)+1:aa, 1);

y1= sonar(p1, 1:bb-1); 第一类的均值。

y2= sonar(p2, 1:bb-1); 第二类的均值。

for iii=1:500

num1= 0;

num2= 0;

sum1= zeros(1, bb-1);

sum2= zeros(1, bb-1);

for ii=1:aa

y11= sqrt( (sum( (y1- sonar(ii, 1:bb-1)).2 ))

y22= sqrt( (sum( (y2- sonar(ii, 1:bb-1)).2 ))

if (y11> y22)

sum2= sum2+ sonar(ii, 1:bb-1);

num2= num2+1;

l(ii)= 2;

elsesum1= sum1+ sonar(ii, 1:bb-1);

num1= num1+1;

l(ii)= 1;

endend %算出整体到所认为的均值之间的欧式距离。

找到离它距离近的数据作为与它一样的类别。

sum1= sum1/num1;

sum2= sum2/num2;

y1= sum1;

y2= sum2;

endnumber1 = 0;

number2 = 0;

for ii= 1:aa

if(l(ii)- sonar(ii, bb)==1)

number1 = number1+1;

elseif(l(ii)- sonar(ii, bb)==1)

number2= number2+1;

endend

correctate1to2= 1- number1/aa

correctate2to1= 1- number2/aa

2. wdbc数据。

clc; clear;

m = load('e:\power\专业课程\大作业们\')

aa, bb] =size(m);

wdbc= m(:,3:bb);

wdbc(:,bb-1)= m(:,2);

aa, bb]= size(wdbc);

data1= wdbc( (1: (floor(aa/2)) 1: bb-1 );划分前一半的数据作为第一类。

data2= wdbc( (floor(aa/2): aa) )1: bb-1); 划分后一半的数据作为第二类。

p1=randsample(1:floor(aa/2), 1);

p2=randsample(floor(aa/2)+1:aa, 1);

y1= wdbc(p1, 1:bb-1); 第一类的均值。

y2= wdbc(p2, 1:bb-1); 第二类的均值。

m1= wdbc(p1,bb)+j*p1

m2= wdbc(p2,bb)+j*p2

for iii=1:50

num1= 0;

num2= 0;

sum1= zeros(1, bb-1);

sum2= zeros(1, bb-1);

for ii=1:aa

y11= sqrt( (sum( (y1- wdbc(ii, 1:bb-1)).2 ))

y22= sqrt( (sum( (y2- wdbc(ii, 1:bb-1)).2 ))

if (y11> y22)

sum2= sum2+ wdbc(ii, 1:bb-1);

num2= num2+1;

l(ii)= 2; %如果数据距离y22近则把它划分到第二类去。

elsesum1= sum1+ wdbc(ii, 1:bb-1);

num1= num1+1;

l(ii)= 1; %如果数据距离y22近则把它划分到第1类去。

endend %算出整体到所认为的均值之间的欧式距离。

找到离它距离近的数据作为与它一样的类别。

sum1= sum1/num1;

sum2= sum2/num2;

hold on

plot(y11,'^

plot(y22,'*

y1= sum1;

y2= sum2;

endnumber1 = 0;

number2 = 0;

for ii= 1:aa

if(l(ii)- wdbc(ii, bb)==1)

number1 = number1+1; %数据认为在第二类被划分到第一类。

elseif(l(ii)- wdbc(ii, bb)==1)

number2 = number2+1; %数据认为在第一类被划分到第二类。

endend

counter1= 0;

counter2= 0;

correctrate1to2= 1- number1/aa;

counter1= counter1+ correctrate1to2

correctrate2to1= 1- number2/aa;

counter2= counter2+ correctrate2to1

iii. 实验结果分析。

1. sonar数据。

经过多次迭代后(其中迭代终止条件是迭代次数,此时数据收敛),将数据按均值分开,分成两类,我们将分好的两类数据于原始分类比较,找出它的错误率,将第一类划分到第二类的错误率和将第二类划分到第一类的错误率。上图是用1减去错误率后得到的识别率。

2. wdbc数据。

上图是wdbc数据的识别率,第二幅图是均值划分时,每一代的均值移动。从图中可以很好地看出来均值在不断的往好的方向移动。

同理,上图是wdbc数据的另一组识别率,第二幅图是均值划分时,每一代的均值移动。从图中可以很好地看出来均值在不断的往好的方向移动。可以发现有两组数据,因为k均值算法对初值的划分特别敏感。

所以他可能会有不同的划分,但是在多次实验中第二组数据次数比较多。所以wdbc稳定正确的划分识别率应该是第二组。

iv. 报告总结。

本次大作业让我学会了k-均值算法在模式识别中的应用,提高了编程能力,复习了迭代算法的思想。同样在这次报告中也发现了很多问题,在wdbc数据中发现了两组识别率,从图中可以看出来,可能因为是第一类和第二类的原始分类次序不同而导致的。k-均值算法对初值的要求很高,初值原本属于哪一类而被划分到哪一类,这些会影响到最终的划分,而不单单是迭代收敛的结果。

模式识别大作业

一。问题重述。利用fisher线性判别法和最近邻算法对sonar数据进行分类,并得出正确率。二。fisher线性判别法思路。用训练样本求出d维空间到一维空间的投影方向w,进而求出样本均值,进而可求出阈值t,带入测试样本得到投影点y,将y与t相比,即可进行分类判别。2.1 fisher准则函数中的基本...

模式识别大作业

作业1 用身高和 或体重数据进行性别分类 一 基本要求 用和的数据作为训练样本集,建立bayes分类器,用测试样本数据对该分类器进行测试。调整特征 分类器等方面的一些因素,考察它们对分类器性能的影响,从而加深对所学内容的理解和感性认识。具体做法 1 应用单个特征进行实验 以 a 身高或者 b 体重数...

模式识别大作业

一 题目。对sonar和wdbc中数据 如表1所示 进行分类,并将实验结果填入表2。不降维方法用邻近法,降维用fisher判别 表1 实验数据。表2实验结果 准确率 二 fisher线性判别法。fisher线性判别分析的基本思想 通过寻找一个投影方向 线性变换,线性组合 将高维问题降低到一维问题来解...