物以类聚——浅述k-means聚类算法
Posted Stata and Python数据分析
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物以类聚——浅述k-means聚类算法相关的知识,希望对你有一定的参考价值。
本文编辑:寇晓璇
技术总编:王子一
Python云端课程来啦!
01
非监督学习与监督学习
在介绍k-means算法的基本原理时,需要先理解非监督学习与监督学习的本质区别。监督学习是从标注数据中学习预测模型的机器学习问题,其最大特点是在进行计算前数据本身已经具有了标签。非监督学习则是从无标注数据中学习预测模型的机器学习问题,在进行计算前数据本身并不含有标签信息,只有其本身的特征信息。k-means则是无监督学习的一种算法,在进行聚类之前我们并不知道每个样本数据属于哪个类,只能通过先验信息人为给定一个类别个数k,并通过算法来判断每个样本数据之间的相似性,相似的便归为一类,不相似的便区分开来,在聚类完成后,再通过具体结果来分析每个类有何潜在特点。
02
模型
03
策略
k-means聚类方法的策略是使得通过损失函数最小化选取一个最佳的划分准则C。
04
算法
05
代码实现
参数 | 参数类型及取值范围 | 解释说明 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
在实例中,本文将以经典的鸢尾花数据集为例,简要实现对一组数据的聚类过程。鸢尾花数据集包含3个类别共150条样本数据,每个类别各有50个样本个数,每个样本具有4个特征:花萼长度,花萼宽度,花瓣长度,花瓣宽度。首先,调用相关的库,并利用sklearn.datasets导入数据集:
1from sklearn.cluster import KMeans
2from sklearn.datasets import load_iris
3from matplotlib import pyplot as plt
4import pandas as pd
5import numpy as np
6from mpl_toolkits.mplot3d import Axes3D
7from sklearn.metrics import silhouette_score
8
9iris = load_iris() # 实例化
10data = iris.data # 我们只需要数据集的特征,不需要数据集的标注
实例化k-means方法,设定k=3,并进行计算:
1km = KMeans(n_clusters=3)
2km.fit(data)
3predict = km.predict(data)
提取鸢尾花数据集的前三个特征,绘制三维散点图,查看聚类效果:
1color_list = ['orange','green','blue']
2color = [color_list[i] for i in predict]
3
4x = data[:, 0]
5y = data[:, 1]
6z = data[:, 2]
7
8# 绘制散点图
9fig = plt.figure()
10ax = Axes3D(fig)
11ax.scatter(x, y, z,color=color)
12
13# 添加坐标轴
14ax.set_zlabel('petal length (cm)')
15ax.set_ylabel('sepal width (cm)')
16ax.set_xlabel('sepal length (cm)')
17plt.show()
聚类效果显示如下。直观来看,k-means算法的聚类效果较好。
最后,计算该聚类方法的轮廓系数,查看聚类效果好坏。其中,轮廓系数公式如下:
调用方法,评估该算法的聚类效果:
1score = silhouette_score(X=data,labels=predict) # 评判聚类效果
2print(score)
06
总结
k-means是一种迭代式的聚类算法,直观易懂且十分实用。但其缺点是容易收敛到局部最优解,无法达到全局最优。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
关于我们
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
以上是关于物以类聚——浅述k-means聚类算法的主要内容,如果未能解决你的问题,请参考以下文章
☀️机器学习入门☀️ 图解K-Means聚类算法 | 附加小练习