Python实现k-means算法

本文深入探讨了K-Means聚类算法的原理与应用,通过实例代码展示了如何实现该算法对一组数据进行聚类。重点阐述了算法的核心步骤,包括初始化质心、计算距离、重新计算质心等,并通过具体代码实现,帮助读者掌握算法的实践操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k-means算法描述如下:

输入:期望得到的簇的数目k,n个对象的数据D
输出:k个簇的集合
方法:

(1)选择k个对象作为初始的簇的质心

(2)repeat

(3)计算对象与各个簇的质心的距离,将对象划分到距离其最近的簇

(4)重新计算每个新簇的均值

(5)Until簇的质心不再变化

Python代码:

假设:给定如下要进行聚类的对象:
 {2,4,10,12,3,20,30,11,25},k = 2

# coding=utf-8
'''
计算两点之间的距离
'''
def distance(n1, n2):
    d = n1 - n2
    if d < 0:
        d = -d
    return d
    
'''
计算一串数的中点
'''
def center(nums):
    sum = 0
    for item in nums:
        sum = sum + item
    return sum / len(nums)

'''
k-means算法
'''
def main():
    n = 2
    nums = [2, 4, 10, 12, 3, 20, 30, 11, 25]
    
    c1 = nums[0]            #类1的中心点,初始为第一个数
    c2 = nums[1]            #类2的中心点,初始为第二个数
    new_c1 = c1-1           #一次聚类后类1新的中心点
    new_c2 = c2 - 1         #一次聚类后类2新的中心点
    g1 = []                 #类1
    g2 = []                 #类2
    isFirst = True
    step = 1

    #k-means核心算法
    while not c1 == new_c1 or not c2 == new_c2:
        print "----------------------------------------------"
        print  "step %d"  % step 
        step = step + 1

        #不是第一次运行,使用新的中心点
        if not isFirst:
            c1 = new_c1
            c2 = new_c2
        isFirst = False

        #通过距离划分族
        for item in nums :
            d1 = distance(item, new_c1)
            d2 = distance(item, new_c2)
            if d1 <= d2 :
                g1.append(item)
            else:
                g2.append(item)

        #计算新类的中点
        new_c1 = center(g1)
        new_c2 = center(g2)

        g1.sort()
        g2.sort()
        print  "group 1 is",  g1
        print  "group 2 is",  g2

        #清空g1, g2
        del g1[:]
        del g2[:]
        print "----------------------------------------------"

#开始运行
main()

初学数据挖掘,很多原理都不懂,写个算法练练手。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值