K-means

Demo

 

                         

Model & Solution

  • Objective function :

                                                                                       

  • Solution :

                                            ,  

  • General :

                                            

Relation to MoG

 MoG[MoG传送门]模型为:

                                              

参数更新:

                                                    

                                                      

                                                      

特别地,如果K个Gaussian分布的协方差矩阵相同,均为 \epsilon I,即:

                                                                

各样本点对应的responsibility计算公式为:

                                                              

\epsilon \rightarrow 0^{+}时,,即responsibility从soft转变为K-means的hard模式。btw,此时各类点分别集中于各类的中心!

Code

  • utils
# cal dist
def distEclud(x,y):
    return np.sqrt(np.sum((x-y)**2))


# initial center
def randCent(dataSet,k):

    m,n = dataSet.shape
    centroids = np.zeros((k,n))
    for i in range(k):
        index = int(np.random.uniform(0,m))
        centroids[i,:] = dataSet[index,:]
    return centroids
  • K-means
def KMeans(dataSet, k):

    m = np.shape(dataSet)[0]
    clusterAssment = np.mat(np.zeros((m, 2)))
    clusterChange = True

    # initial centroids
    centroids = randCent(dataSet, k)

    while clusterChange:

        clusterChange = False
        for i in range(m):

            minDist = 100000.0
            minIndex = -1

            # update pseudo_label for each instance
            for j in range(k):
                distance = distEclud(centroids[j,:], dataSet[i,:])
                if distance < minDist:
                    minDist = distance
                    minIndex = j
            if clusterAssment[i,0] != minIndex:
                clusterChange = True
                clusterAssment[i,:] = minIndex,minDist**2

        # update pseudo_center for each cluster
        for j in range(k):
            pointsInCluster = dataSet[np.nonzero(clusterAssment[:,0].A == j)[0]]
            centroids[j,:] = np.mean(pointsInCluster,axis=0)

    return centroids, clusterAssment

Application

 

                                

                                

Reference

[1]. Bishop, Christopher M. Pattern recognition and machine learning. Springer Science+ Business Media, 2006.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReLuJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值