机器学习:KMeans聚类算法

目录

一、理论知识

1、KMeans算法介绍

2、KMeans算法的计算步骤

二、代码实现

1、导入Python包

2、Kmeans算法核心代码

3、载入鸢尾花数据集

4、运行Kmeans算法


一、理论知识

1、KMeans算法介绍

        KMeans算法又称K均值算法,是应用最广泛的聚类算法之一。所谓聚类,即根据样本间的相似性将具有较高相似度的样本划分至同一类簇,以此揭示数据中的潜在规律。聚类与分类最大的区别在于,聚类属于无监督算法,在训练过程中没有标签监督训练,而分类属于有监督算法,训练过程中会利用标签来引导模型参数优化。

2、KMeans算法的计算步骤

(1)随机选择k个样本作为初始簇类中心;
(2)将数据集中的每个样本划分至离它距离最近的簇;
(3)根据每个簇下的所属样本,更新簇类中心;
(4)重复(2)(3)步,当达到设置的迭代次数或着簇类中心不再改变时停止迭代,并输出聚类结果;

二、代码实现

1、导入Python包

import numpy as np
from sklearn.datasets import load_iris
from sklearn.metrics import adjusted_rand_score

2、Kmeans算法核心代码

def run_Kmeans(X, k, max_iter=100):
    # 1.随机选择k个样本作为初始聚类中心
    ind_center = np.random.choice(range(len(X)), size=k, replace=False)
    center = X[ind_center]
    
    for _ in range(max_iter):
        # 2.将每个样本分配给距离最近的聚类中心
        dist = np.linalg.norm(np.repeat(X[:,None,:], k, 1)-np.repeat(center[None,:,:], len(X), 0), axis=-1)
        ind = np.argmin(dist, axis=-1)
        
        # 3.更新聚类中心
        center = np.array([np.mean(X[ind==i], axis=0) for i in range(k)])
    
    return ind  # 返回聚类结果

3、载入鸢尾花数据集

iris_dataset = load_iris()
X = iris_dataset["data"]
Y = iris_dataset["target"]
print(X.shape, Y.shape)

(150, 4) (150,)

4、运行Kmeans算法

np.random.seed(2023)

pred = run_Kmeans(X, k=len(set(Y)))
print("ARI: {:.4f}".format(adjusted_rand_score(Y, pred)))

ARI: 0.7302

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值