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