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

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

假设给定如下,要使用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-均值聚类方法进行聚类:

 {4,9,13,23,5,11,16,7,20}

并假设k =3。

import numpy as np
a = [4,9,13,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("抽取a[0]:",a[0],"抽取a[1]:",a[1],"抽取a[2]:",a[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)

输出结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值