因为这种作业一般是手写,所以考虑的是简单的距离,所以可以通过平均值来简单计算。
假设给定如下,要使用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)
输出结果:
好文推荐
发表评论