一、问题描述。
现有sonar和wdbc这两个样本数据集,取一半数据作为训练样本集,其余数据作为测试样本集,通过编程实现分别用c均值算法对测试样本集中的数据进行分类,进行10次分类求正确率的平均值。
二、算法描述。
1.初始化:选择c个代表点。
2.建立c个空间聚类表:
3.按照最小距离法则逐个对样本x进行分类:
4.计算j及用各聚类列表计算聚类均值,并用来作为各聚类新的代表点(更新代表点)
5.若j不变或代表点未发生变化,则停止。否则转2.
6.计算正确率:将dtat(i,1)与trueflag(i,1)(i=1~n)进行比较,统计正确分类的样本数,并计算正确率将上述过程循环10次,得到10次的正确率,并计算平均正确率**e
算法流程图。
三、实验数据。
表1 实验数据。
四、实验结果。
表2 实验结果准确率(%)
注:表中准确率是十次实验结果的平均值。
五、程序源码。
用c均值算法对sonar分类(对wdbc分类的**与之类似)
clc;clear;
accuracy = 0;
for i = 1:10
data = xlsread(''
data = data';
%初始划分2个聚类。
rand(:,1:size(data,2)) data(:,randperm(size(data,2))'使矩阵元素按列重排。
a(:,1) =rand(:,1);
b(:,1) =rand(:,2); 选取代表点。
m = 1;
n = 1;
for i = 3:size(rand,2)
temp1 = rand(:,i) -a(:,1);
temp2 = rand(:,i) -b(:,1);
temp1(61,:)
temp2(61去掉标号后再计算距离。
if norm(temp1) m = m + 1; %a类中样本个数。 a(:,m) =rand(:,i); elsen = n + 1; %b类中样本个数。 b(:,n) =rand(:,i); endend %划分完成。 m1 = mean(a,2); m2 = mean(b,2); %计算jej = 0; for i = 1:m temp = a(:,i) -m1; temp(61去掉标号的均值。 j = j + norm(temp)^2; endfor i = 1:n temp = b(:,i) -m2; temp(61,:) j = j + norm(temp)^2; endtest = a,b]; n = 0; %je不变的次数。 while n < m + n rarr = randperm(m + n); 产生1-208即所有样本序号的随机不重复序列向量。 y = test(:,rarr(1,1)); if rarr(1,1) if m ==1 continue elsetemp1 = y - m1; temp1(61,:) temp2 = y - m2; temp2(61,:) p1 = m / m - 1) *norm(temp1); p2 = n / n + 1) *norm(temp2); if p2 < p1 test = test,y]; test(:,rarr(1,1)) m = m - 1; n = n + 1; end end elsey属于b类时。 if n ==1 continue elsetemp1 = y - m1; temp1(61,:) temp2 = y - m2; temp2(61,:) p1 = m / m + 1) *norm(temp1); p2 = n / n - 1) *norm(temp2); if p1 < p2 test = y,test]; test(:,rarr(1,1)) m = m + 1; n = n - 1; end end enda(:,1:m) =test(:,1:m); b(:,1:n) =test(:,m + 1:m + n); m1 = mean(a,2); m2 = mean(b,2); 计算jetempj = 0; for i = 1:m temp = a(:,i) -m1; temp(61去掉标号的均值。 tempj = tempj + norm(temp)^2; endfor i = 1:n temp = b(:,i) -m2; temp(61,:) tempj = tempj + norm(temp)^2; endif tempj ==j n = n + 1; elsej = tempj; endend %while循环结束。 %判断正确率。 correct = 0; false = 0; a(:,1:m) =test(:,1:m); b(:,1:n) =test(:,m + 1:m + n); c = mean(a,2); if abs(c(61,1) -1) for i = 1:m if a(61,i) =1 correct = correct + 1; elsefalse = false + 1; endend for i = 1:n if b(61,i) =2 correct = correct + 1; elsefalse = false + 1; endend else聚类a中大多为2类元素。 for i = 1:m if a(61,i) =2 correct = correct + 1; elsefalse = false + 1; endend for i = 1:n if b(61,i) =1 correct = correct + 1; elsefalse = false + 1; endend endaccuracy = accuracy + correct / correct + false); 一。问题重述。利用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线性判别分析的基本思想 通过寻找一个投影方向 线性变换,线性组合 将高维问题降低到一维问题来解...模式识别大作业
模式识别大作业
模式识别大作业