手写kmean

n=20
m=2
X=np.random.randn(n,m)

def kmeans(X,h,min_err=0.000001,max_iter=1000000000):
    n,m=X.shape
    err,iter=1,1
    c0=X[:h,:]
    while True:
        clusters=[np.zeros([0,m]) for i in range(h)]
        for i in range(n):
            sub=np.tile(X[i,:],[h,1])-c0
            dist=np.sum(sub**2,1)
            j=np.argmin(dist)
            clusters[j]=np.concatenate([clusters[j],X[i,None]],0)
        c1=np.zeros_like(c0)
        for i in range(h):
            c1[i,:]=np.mean(clusters[i],0)
        err=np.sum(np.sum((c0-c1)**2,1),0)
        iter+=1
        c0=c1
        print(err)
        if iter>max_iter or err<min_err:
            break
    return c0

pt=kmeans(X,10)

plt.scatter(X[:,0],X[:,1],c='r')
plt.scatter(pt[:,0],pt[:,1],c='g')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值