一、实验目的
学习sklearn模块中的KMeans算法
二、实验内容
学习KMeans算法,了解模型创建、使用模型及模型评价等操作
三、实验原理或流程
实验原理:
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:
1、随机选取k个聚类质心点(cluster centroids)为
2、重复下面过程直到收敛{
对于每一个样例i,计算其应该属于的类
对于每一个类j,重新计算该类的质心
K是我们事先给定的聚类数,c(i)代表样例i与k个类中距离最近的那个类,c(i)的值是1到k中的一个。质心uj代表我们对属于同一个类的样本中心点的猜测,拿星团模型来解释就是要将所有的星星聚成k个星团,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离,然后选取距离最近的那个星团作为c(i),这样经过第一步每一个星星都有了所属的星团;第二步对于每一个星团,重新计算它的质心uj (对里面所有的星星坐标求平均)。重复迭代第一步和第二步直到质心不变或者变化很小。求点群中心的算法:
一般来说,求点群中心点的算法你可以使用各个点的X/Y坐标的平均值。
四、实验过程及源代码
1.打开终端模拟器,切换到/data目录下,使用wget命令下载实验数据
2.开启jupyter notebook
3.创建一个.ipynb文件
4.使用pandas的read_table方法读取protein.txt文件,以\t分隔并传入protein
5.查看protein的描述性统计
6.查看protein的列名
7.用.shape方法可以读取矩阵的形状
8.导入sklearn模块中的preprocessing函数
9.导入sklearn模块中的KMeans方法
10.导入Matplotlib模块
11.使用KMeans算法生成实例myKmeans
12.利用.fit(方法对sprotein_scaled进行模型拟合
13.打印输出myKmeans模型
14.使用.predict方法,用训练好的模型进行预测
15.编写print_kmcluster函数并输出结果
五、实验结论及心得
结论:
kmean算法的特点是不能保证该算法收敛域全局最优解,并且它常常终止于一个局部最优解。结果可能依赖于初始簇中心的随机选择,所以为了尽可能的得到好的结果,我们通常会选择不同的初始簇中心,来多疑运行K-均值算法。
算法优点:
1)原理比较简单,实现也是很容易,收敛速度快。
2)聚类效果较优。
3)算法的可解释度比较强。
4)主要需要调参的参数仅仅是簇数k。
算法缺点:
1)K值的选取不好把握
2)对于不是凸的数据集比较难收敛
3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
4) 采用迭代方法,得到的结果只是局部最优。
心得体会:
学习sklearn模块中的KMeans算法,我了解到它是一种聚类分析的算法。该算法通过不断迭代调整簇心的位置,将数据集划分为多个簇,使得每个簇内部的样本相似度越高,而不同簇之间的样本相似度越低。在使用KMeans算法时,需要指定簇的数量,同时也可以通过设置不同的参数来调整算法的性能。此外,sklearn中还提供了其他的聚类算法,如DBSCAN、层次聚类等,可以根据实际任务需求进行选择。