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

假设给定如下,要使用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)

输出结果:

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: