Stanford ML - Clustering 聚类

到无监督机器学习算法了 - 训练集没有标识,算法根据具体的需要自己找到其中的一些规律。首先是聚类算法,这个应用的感觉比较广泛,比如新闻主题的聚合,市场的划分,微博上圈子的挖掘等。聚类用的K-means算法比较简单,主要是两个步骤:找到距离当前元素最近的类,把当前元素划分到该类;用类中所有元素的均值中心作为新的类中心。重复这两个步骤,直到类中心不再变化为止(小于某个阈值)。


聚类算法的优化目标就是使各个元素与所属类中心的距离方差最小:


最开始的聚类中心怎么选择呢?可以随机从训练集里面选择K个作为中心,当然前提是K小于训练集元素数目。这里有个局部最优问题,也就是依据初始的K个聚类中心,最终得到的聚类不是整体最优的。为了解决这个问题,可以多次运行聚类算法,从中选择代价方式最小的作为最终的结果。


怎么选择划分为多少个聚类呢?感觉最靠谱的是由需求来决定,也是聚类之后最终的目的。

找最近点,貌似没有好办法,双重循环:

for i = 1:size(X,1)
    min_dis = intmax;
    for j = 1:K
        gap = (X(i,:) - centroids(j,:));
        distance = gap * gap';
        if (double(min_dis) > distance)
            min_dis = distance;
            idx(i) = j;
        end
    end
end

计算Centriod,这个有巧妙的算法,Matlab很强大呀。

for i = 1:K
    centroids(i,:) = (X' * (idx == i))' / sum(idx == i);
end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值