《 — 人工智能方向实习—》 实 习 报 告 专业: 计算机科学与技术 班级: 12419013 学号: 姓名: 江苏科技大学计算机学院 2016年 3 月 实验一 数据聚类分析 一、实验目的 编程实现数据聚类的算法。 二、实验内容 k-means聚类算法。 三、实验原理方法和手段 k-means算法接受参数k ;然后将事先输入的n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类 中的对象相似度较高. 四、实验条件 Matlab2014b 五、实验步骤 1) 初始化k个聚类中心。 2) 计算数据集各数据到中心的距离,选取到中心距离最短的为该数据所属类别。 3) 计算(2)分类后,k个类别的中心(即求聚类平均距离) 4) 继续执行(2)(3)直到k个聚类中心不再变化(或者数据集所属类别不再变化) 六、实验代码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % main.m % k-means algorithm % @author matcloud %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; close all; load fisheriris; X = [meas(:,3) meas(:,4)]; figure; plot(X(:,1),X(:,2),'ko','MarkerSize',4); title('fisheriris dataset','FontSize',18,'Color','red'); [idx,ctrs] = kmeans(X,3); figure; subplot(1,2,1); plot(X(idx==1,1),X(idx==1,2),'ro','MarkerSize',4); hold on; plot(X(idx==2,1),X(idx==2,2),'go','MarkerSize',4); hold on; plot(X(idx==3,1),X(idx==3,2),'bo','MarkerSize',4); hold on; plot(ctrs(:,1),ctrs(:,2),'kx','MarkerSize',12); title('official kmeans','FontSize',16,'Color','red'); [idx,ctrs] = my_kmeans(X,3); subplot(1,2,2); plot(X(idx==1,1),X(idx==1,2),'ro','MarkerSize',4); hold on; plot(X(idx==2,1),X(idx==2,2),'go','MarkerSize',4); hold on; plot(X(idx==3,1),X(idx==3,2),'bo','MarkerSize',4); hold on; plot(ctrs(:,1),ctrs(:,2),'kx','MarkerSize',12); title('custom kmeans','FontSize',16,'Color','red'); function [idx,ctrs] = my_kmeans(m,k) [row col] = size(m); %init k centroids p = randperm(size(m,1)); for i = 1 : k ctrs(i,:) = m(p(i),:); end idx = zeros(row,1);%idex is pointer of group while 1 d = dist2matrix(m,ctrs); [z,g] = min(d,[],2); if(g == idx) break; else idx = g; end %update ctroids for i = 1 : k v = find(g == i); if v ctrs(i,:) = mean(m(v,:),1); end end end end function [idx,ctrs] = my_kmeans(m,k) [row col] = size(m); %init k centroids p = randperm(size(m,1)); for i = 1 : k ctrs(i,:) = m(p(i),:); end idx = zeros(row,1);%idex is pointer of group while 1 d = dist2matrix(m,ctrs); [z,g] = min(d,[],2); if(g == idx) break; else idx = g; end %update ctroids for i =
在本篇人工智能实验报告中,实习生探讨了数据聚类分析,特别是通过编程实现k-means算法。k-means是一种常用的距离驱动的无监督学习方法,主要用于发现数据集中的结构和模式,将数据对象分组到不同的类别中。该算法的核心思想是通过迭代找到最佳的聚类中心,使得同一聚类内的数据对象具有较高的相似性。
实验的目标是编程实现k-means算法,这有助于提升实习生在机器学习领域的实践能力,尤其是对数据处理和模式识别的理解。实验条件为Matlab2014b,这是一个广泛用于科学研究和工程计算的软件平台,提供了丰富的数学函数库,便于进行数据处理和算法实现。
实验步骤如下:
1. 初始化:随机选择k个数据点作为初始聚类中心。
2. 分配类别:计算所有数据点与k个聚类中心的距离,将每个数据点分配到最近的中心所在的类别。
3. 更新中心:根据当前类别中的所有数据点计算新的聚类中心(即类别内数据的均值)。
4. 迭代检查:重复步骤2和3,直到聚类中心或数据点的类别分配不再发生变化,达到算法收敛。
报告中提供了两个k-means的实现:一个使用了Matlab内置的`kmeans`函数,另一个是实习生自定义的`my_kmeans`函数。通过比较两者的运行结果,可以评估自定义实现的准确性和效率。自定义函数的迭代过程包括计算数据点到聚类中心的距离矩阵,寻找距离最近的中心,并根据新分配的类别更新聚类中心,直至收敛。
在实验代码中,使用了`fisheriris`数据集,这是一个经典的多变量分析数据集,包含了鸢尾花的测量特征,如花萼长度和花瓣长度。通过可视化结果,可以看到数据点被分为了3类(红色、绿色和蓝色),并展示了官方k-means和自定义k-means的聚类效果。
通过这个实验,实习生能够深入理解k-means算法的运作机制,并锻炼了编程实现复杂算法的能力。此外,实验还涉及到了数据预处理、距离计算以及可视化技巧,这些都是数据分析和机器学习领域中的重要技能。对于未来的人工智能和数据科学项目,这些实践经验将非常有价值。