spss实现k均值聚类
机器学习中的k均值聚类属于无监督学习,所谓k指的是簇类的个数,也即均值向量的个数。算法初始状态下,要根据我们设定的k随机生成k个中心向量,随机生成中心向量的方法既可以随机从样本中抽取k个样本作为中心向量,也可以将中心向量固定在样本的维度范围之内,避免中心向量过偏远离大多数样本点。然后每个样本点需要与k个中心向量分别计算欧氏距离,取欧氏距离最小的中心向量作为该样本点的簇类中心,当第一轮迭代完成之后,中心向量需要更新,更新的方法是每个中心向量取前一次迭代所得到各自簇类样本点的均值,故称之为均值向量。迭代终止的条件是,所有样本点的簇类中心都不在发生变化。
在spss中导入的二维数据如下所示:
点击菜单栏的“分析”,找到“分类”选中“k-均值聚类”
将需要进行聚类的变量选入右侧框中
聚类数由用户设定,方法一般选择“迭代与分类”,“读取初始聚类中心”和“写入最终聚类中心”一般不勾选,除非自定义的聚类中心(自定义聚类中心一般意义不大),如果最后想将最终迭代得到的聚类中心写入指定文件,那么可以勾选第二个复选框。
设定迭代次数,收敛条件默认为0,即当前均值向量与前一次迭代得到的均值向量之差。
保存按钮,勾选以上复选框,最终得到的结果会包含以上两个信息。
选项按钮中,一般勾选以上复选框,spss会统计出初始聚类的中心向量以及每个样本的聚类信息(包括每个样本所属类别,与各自簇类中心向量的欧氏距离)。之后,点击“确定”按钮,完成均值聚类。
得到初始聚类中心和迭代历史记录,我们发现第二次迭代的时候,聚类中心就已经不变了。
以下是每个样本所属类别以及每个样本与各自簇类中心的欧氏距离。
以上是最终得到的聚类中心的横纵坐标,以及聚类中心与中心之间的欧氏距离、每个类别中的样本数量。
以下是通过python编程实现k-均值聚类算法所得结果:
最终得到的聚类中心:
[[ 2.6265299 3.10868015]
[-2.46154315 2.78737555]
[-3.53973889 -2.89384326]
[ 2.65077367 -2.79019029]]
显然,与spss得到的聚类结果是一样的。
上一篇: 关于 QAbstractItemModel 学习的一点分享
下一篇: k均值聚类python实现