K-means聚类算法编程实践

  大家好久不见!之前给大家介绍了分类和聚类的区别聚类的进一步介绍以及K-means聚类算法,大家看懂了吗? 

  本期,我们将带领大家动手实践,向大家讲解之前介绍的“K-means”算法如何通过编程实现。

4.1 Python的编程实现

  如果您有过Python的编程经验,那么可以动手试试下面的编程实践!

01、代码:数据获取

#Python
import matplotlib.pyplot as plt            # 导入用于绘图的包(这里用的是matplotlib的工具)
from sklearn.cluster import KMeans         # 导入K-means算法的包
from sklearn import datasets               # 导入sklearn自带的数据集

iris = datasets.load_iris()     # 下载和导入iris鸢尾花数据集    英文单词iris : 鸢尾属植物
X = iris.data[:, :4]            # 抽取特征空间中的前4个维度

print(X.shape) 
print(X)

  X.shape的输出结果:(150, 4)

  说明该数据集是有具有4个维度的150行数据

02、代码:绘制数据分布图

# 绘制数据分布图

plt.scatter(X[:, 0], X[:, 1], c="red", marker='D', alpha=0.3)
# plt.scatter()函数的作用是绘制散点图      英文单词scatter : 零星散布的东西
# “c”指的是color颜色,作用是为散点图上的点设置颜色; 在上面的代码中将散点图的点的颜色设置为红(red)
# “marker”指的是散点图上的点的形状;    英文单词marker : 标识, 标记

plt.xlabel('sepal length')  # 设置横轴名称                
补充:英文单词sepal : [植]萼片;花萼 
plt.ylabel('sepal width')   # 设置纵轴名称

plt.title(label='Data Distribution Map',  # 图的标题
          fontsize=18,                    # 标题字体大小
          color='white',                  # 标题字体颜色
          backgroundcolor='#334f65',      # 标题的底色
          pad=20)

plt.show()  # 展示绘制好的散点图

  数据分布图如下,横轴为花瓣长度,纵轴为花瓣宽度。

 03、代码:聚类并绘制结果

#Python
estimator = KMeans(n_clusters=3)           # 构造聚类器, 设置聚类类别数为3
estimator.fit(X)                           # 聚类
label_pred = estimator.labels_             # 获取聚类标签

x0 = X[label_pred == 0]                    # 获取类别是“0”的数据对象
x1 = X[label_pred == 1]                    # 获取类别是“1”的数据对象
x2 = X[label_pred == 2]                    # 获取类别是“2”的数据对象
# “label_pred”的全称应为“label_prediction”

# 绘制 k-means 聚类结果
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='H', label='label0', alpha=0.3)
# 补充: plt.scatter()是绘制散点图的函数
# c指的是颜色
# marker指的是散点的形状
# label指的是标签的名称
# alpha指的是散点的透明度,取值为[0, 1],0表示完全透明,1表示完全不透明

plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1', alpha=0.3)
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='D', label='label2', alpha=0.3)


# 给散点图加上标题
plt.title('Clustering results',                # 标题的名称 
           fontsize=18,                        # 标题的字体大小
           color='white',                      # 标题的字体颜色
           backgroundcolor='#334f65',          # 标题的背景
           pad=20)                             # 标题的边距

plt.xlabel('sepal length')                     # 横坐轴
plt.ylabel('sepal width')                      # 纵坐轴

plt.legend(loc=2)                          # 显示图例;“loc”为“location”的意思,设置这个
                                           # 英文单词legend: (图片或地图的)文字说明,图例
plt.show()                                 # 记得要加上这句话,散点图才会显示出来

最终K-means聚类结果如下图所示


如果还存在疑惑的,可以在评论区留下您的吐槽

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值