【机器学习】k-means算法对数据进行聚类

本文介绍了K-means聚类算法的基本原理,包括随机选择初始中心点、迭代优化过程以及如何在Python中使用sklearn库实现。通过实例展示了如何对二维数据进行聚类,并展示了不同参数的选择对结果的影响。

算法原理

为了处理学习数据,数据挖掘中的 K-means 算法首先随机选取第一组中心点,作为每个聚类的起始点,然后进行迭代(重复)计算(计算的是每个点到簇点的欧几里得距离),以优化中心点的位置。

当出现以下两种情况之一时,它将停止创建和优化群集:

  1. 中心点已经稳定--由于聚类成功,其值没有变化。
  2. 已达到规定的迭代次数。

代码实现

随机数据

import numpy as np
import pandas as pd
from sklearn import metrics
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 创建一组随机数据 维度为二维

X= -2 * np.random.rand(100,2)
X1 = 1 + 2 * np.random.rand(50,2)
X[50:100, :] = X1
plt.scatter(X[ : , 0], X[ :, 1], s = 50, c = 'brown',marker="p")
plt.show()

随机数据

# 模型构建

model = KMeans(n_clusters=2, init="k-means++", n_init=10, max_iter=300)

"""
参数解释:

n_clusters=2 聚类个数(簇)
init="k-means++" 初始化聚类中心的方法
n_init=10 初始化次数
max_iter=300最大迭代次数

"""

model.fit(X)

result = model.predict(X) # result equals model.labels_
centers = model.cluster_centers_ # 簇的点位

# 画图

plt.figure(figsize=(15,5))
plt.subplot(121)
plt.scatter(X[ : , 0], X[ :, 1], s = 80, c = result, marker="+",cmap="rainbow")
plt.subplot(122)
plt.scatter(X[ : , 0], X[ :, 1], s = 80, c = result, marker="p")
plt.scatter(centers[:,0], centers[:,1], s = 80, c = "green", marker="o")
# 中心点用绿色圆表示出来
plt.show()

 

更换数据

数据引用:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间icon-default.png?t=N7T8https://pan.baidu.com/s/1en3DIGZtb8-B8iQeOmVnRQ?pwd=1111

# 不再赘述 直接上完整代码

data = pd.read_excel("K_Means.xlsx")
X, y = data["X"], data["Y"]


model = KMeans(n_clusters=4, init="k-means++", max_iter=300, n_init=10)
model.fit(data)

prediction = model.predict(data)
center_clusters = model.cluster_centers_

plt.figure(figsize=(15,5))
plt.subplot(121)
plt.scatter(X,y,c=prediction,marker="p",s=80)

plt.subplot(122)
plt.scatter(X,y,c=prediction,marker="p",s=80)
plt.scatter(center_clusters[:,0],center_clusters[:,1],color='red',s=100)

plt.show()

 参考资料

https://towardsdatascience.com/understanding-k-means-clustering-in-machine-learning-6a6e67336aa1icon-default.png?t=N7T8https://towardsdatascience.com/understanding-k-means-clustering-in-machine-learning-6a6e67336aa12.3. Clustering — scikit-learn 1.3.2 documentationClustering of unlabeled data can be performed with the module sklearn.cluster. Each clustering algorithm comes in two variants: a class, that implements the fit method to learn the clusters on trai...icon-default.png?t=N7T8https://scikit-learn.org/stable/modules/clustering.html#k-means

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值