K-n近邻分类算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一用身高和/或体重数据进行性别分类的实验
一、实验目的
1) 加深对k-近邻法原理的理解和认识
2) 掌握k-近邻法的设计方法
二、实验数据
⏹训练样本集
●FAMALE.TXT 50个女生的身高、体重数据
●MALE.TXT 50个男生的身高、体重数据
⏹测试样本集
●test1.txt 35个同学的身高、体重、性别数据(15个女生、20个男生)
●test2.txt 300个同学的身高、体重、性别数据(50个女生、250个男生)
三、实验内容
同时采用身高和体重数据作为特征,用压缩k-近邻法进行分类,考察训练和测试错误情况。将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。
四、原理简述、程序流程图
1、K-近邻法原理
给定一个训练数据集,确定样本特征。对新的输入实例,在训练数据集中根据样本特征找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
2
五、实验结果及分析
1、判别结果表格
K值 3 5 7 9 11 13
错误个数35 30 24 27 29 32
错误率11.67% 10.00% 8.00% 9.00% 9.67% 10.67
注:使用测试集test2.txt
2、分析
根据表格,当K取7时有最佳判别结果,此时错误个数最少,错误率最低。与Bayes分类器比较,当K值越来越大时,结果与Bayes分类器会渐渐接近。但是,在此次试验中,当均为最佳错误率时,K近邻法要优于Bayes分类器
六、附录
[a1,a2] = textread('FEMALE.txt','%f%f');
[b1,b2] = textread('MALE.txt','%f%f');
fid = fopen('test2.txt','r');
test1 = fscanf(fid,'%f %f %c',[3,inf]);
TEST = test1';
m = ones(50,1);
n = zeros(50,1);
GIRL = [a1,a2,m]; %女生 1
BOY = [b1,b2,n]; %男生 0
COMBINE = [GIRL;BOY];
error_num = 0; %错误个数
error_rate = 0; %错误率
k = 13; %手动k值
for q = 1:300
boy_num = 0; %男生个数
girl_num = 0; %女生个数
for p = 1:100
d(p,1) = sqrt((TEST(q,1)-COMBINE(p,1))^2+(TEST(q,2)-COMBINE(p,2))^2); end
DISTENCE = [COMBINE,d];
temp = sortrows(DISTENCE,4); %按照距离排序
for i = 1:k
if temp(i,3) == 1
girl_num = girl_num + 1;
end
if temp(i,3) == 0
boy_num = boy_num + 1;
end
end
if girl_num < boy_num
sex = 'M';
else
sex = 'F';
end
if sex ~= TEST(q,3)
error_num = error_num + 1;
end
end
a = error_num/300;
error_rate = vpa(a)
error_num