要使用K-均值聚类方法进行聚类,python算法和实现的全过程(代码和答案)

该代码示例展示了如何使用Python实现简单的K-均值聚类算法,以平均值作为分割点对数据进行分类。首先,计算初始分割值,然后通过迭代检查是否达到收敛条件,最后计算每个类别组的平均值并更新分割点。

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

因为这种作业一般是手写,所以考虑的是简单的距离,所以可以通过平均值来简单计算。

假设给定如下,要使用K-均值聚类方法进行聚类:

 {3,5,6,9,4,11,15,21,20}

并假设k =2。

import numpy as np
a = [3,5,6,9,4,11,15,21,20]#修改数组
p = (a[0]+a[1])/2
k = 0
good=0
print("抽取a[0]:",a[0],"抽取a[1]:",a[1],"以两个值的平均值为最初分割值:",p)
for  i  in a:
    k+=1
for number in range(10):
    if p == good :
        print("迭代后无变化,收敛完成")
        break
    good = p
    x = []
    x1 = []
    for j in range(k) :
        if a[j] <= p:
            x.append(a[j])
        else:
            x1.append(a[j])

    print("分类后的数组1:",x)
    print("分类后的数组2:",x1)
    num = 0
    mean =0
    for i in x :
        mean+= x[num]
        num+=1
    mean1 = mean/num
    print("数组1平均值:",mean1)

    num = 0
    mean =0
    for i in x1 :
        mean+= x1[num]
        num+=1
    mean2 = mean/num
    print("数组2平均值:",mean2)

    p= (mean1+mean2)/2
    print("数组1和数组2的分割值:",p)

输出结果:

 假设给定如下,要使用K-均值聚类方法进行聚类:

 {7,3,5,23,5,11,16,7,20}

并假设k =3。

import numpy as np

a = [7, 3, 5, 23, 5, 11, 16, 7, 20]  # 修改数组
a1 = []
a1.append(min(a))
a1.append((min(a) + max(a)) / 2)
a1.append(max(a))
p = (a1[0] + a1[1]) / 2
p1 = (a1[1] + a1[2]) / 2
k = 0
good = 0
good1 = 0
print("抽取a1[0]:", a1[0], "抽取a1[1]:", a1[1], "抽取a1[2]:", a1[2], "以三个值各自平均值为最初分割值", p, "和", p1)
for i in a:
    k += 1
for number in range(10):
    if good == p and good1 == p1:
        print("迭代后无变化,收敛完成")
        break
    good = p
    good1 = p1
    x = []
    x1 = []
    x2 = []
    for j in range(k):
        if a[j] <= p:
            x.append(a[j])
        elif a[j] <= p1:
            x1.append(a[j])
        else:
            x2.append(a[j])

    print("分类后的数组1:", x)
    print("分类后的数组2:", x1)
    print("分类后的数组3:", x2)
    num = 0
    mean = 0
    for i in x:
        mean += x[num]
        num += 1
    mean1 = mean / num
    print("数组1平均值:", mean1)

    num = 0
    mean = 0
    for i in x1:
        mean += x1[num]
        num += 1
    mean2 = mean / num
    print("数组2平均值:", mean2)

    num = 0
    mean = 0
    for i in x2:
        mean += x2[num]
        num += 1
    mean3 = mean / num
    print("数组3平均值:", mean3)

    p = (mean1 + mean2) / 2
    p1 = (mean2 + mean3) / 2
    print("数组1和数组2的分割值:", p)
    print("数组2和数组3的分割值:", p1)

输出结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值