机器学习 - Kmeans及其变体

本文介绍了K-means算法的基本原理和流程,并探讨了其变体,包括mini-batch K-means、二分K-means和K-means++。通过实例展示了这些变体如何改善计算效率和聚类效果,特别强调了初始化质心的重要性。
摘要由CSDN通过智能技术生成

K-means算法就是基于距离来对数据进行划分,基于的思想是类内距离最小化,即SSE最小。


1. K-means

基本的K-means算法非常简单,算法流程如下:

1)从所给数据中抽取n个样本,设为初始中心,应该尽可能使得这个初始中心靠近真实质心。比如先画图观察,又或者我先随机抽10次,然后从里面找一组最好的。

2)计算所有样本到n个中心的位置,把样本划分到最近,最相似的簇中。

3)更新簇质心,即计算每个簇的均值向量。

4)迭代更新直到误差或者迭代次数满足一定要求

这里使用sklearn跑一个demo

# -*- coding: utf-8 -*-
"""
file: standKmeans - 标准K-means算法
author: UniqueZ_
date: 2017-07-28
"""
from sklearn.cluster import KMeans
from utils import load_data, draw_result, timing

def clustering(train_x, **params):
    clf = KMeans(**params)
    clf.fit(train_x)
    return clf

@timing
def main():
    train_x = load_data()
    params = {
                "n_clusters": 4,
                "max_iter": 100,
                "n_init": 10,
                "init": "k-means++",
                "algorithm": "full",
                "tol": 1e-4,
                "n_jobs": -1,
                "random_state": 1
            }
    clf = clustering(train_x, **params)
    print("SSE = {0}".format(clf.inertia_))
    draw_result(train_x, clf.labels_, clf.cluster_centers_, "kmeans").show()


if __name__ == "__main__":
    main()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值