[Python数据挖掘] KMeans聚类算法原理底层实现

本文探讨了KMeans聚类算法的底层实现,通过Python代码仅依赖random.sample和math.sqrt实现了KMeans,对grade.txt数据集进行了聚类,并与sklearn库的结果进行了对比。虽然结果基本一致,但算法的稳定性不佳,欢迎读者提供改进意见。
摘要由CSDN通过智能技术生成

[问题背景]

关于KMeans聚类原理的动画演示,我在B站的投稿《Kmeans聚类原理 动画演示》中已作了介绍,有兴趣的朋友可以先看一下链接中的1分钟动画演示。

[Python数据挖掘] sklearn-KMeans聚类一文中,我们调用sklearn库的KMeans聚类方法,成功对以下ANSI编码的grade.txt文本文档数据集进行了聚类:

YZN,133,108,76
ZHY,96,145,101
WYZ,132,107,60
DHY,100,102,120
CYH,139,99,93
LHY,73,149,81
ZHY,85,148,93
TQP,39,138,85
ZZL,145,112,71
HJC,101,116,118
XZY,99,98,117

[问题分析]

下面从底层实现的角度,只使用外部的random.sample和math.sqrt,无需使用numpy,逐步实现KMeans聚类算法。

完整代码如下:

针对grade.txt文本文档进行数据预处理并聚类的实例代码:

(grade.txt需要与代码的.py文件位于同一目录下)

from random import sample
from math import sqrt

# 函数名:means
# 函数接口:大列表data
# 函数功能:返回data大列表内所有点的平均点,是一个小列表
def means(data):
    len_data = len(data)
    len_item = len(data[0])
    ret = []
    for j in range(len_item):
        ret_item = 0
        for i in range(len_data):
            ret_item += data[i][j]
        ret_item /= len_data
        ret.append(ret_item)
    return ret

# 函数名:distance
# 函数接口:两个数据点列表data1和data2
# 函数功能:返回两个数据点的距离
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值