【算法周】人以类聚咋个聚!K-means了解一下~(上篇)

欢迎关注哈希大数据微信公众号《哈希大数据》

上一周我们给大家讲了四篇机器学习的扫盲篇,把机器学习需要的一些常识以及需要的计算机环境理了一遍,这一周我们的系列名称是【算法周】!!毕竟算法是机器学习的灵魂嘛~~

今天我们给大家介绍算法的Chaper1——K-means~ 由于篇幅较长本次介绍分为上下两篇

K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体方法。包括初始化优化K-Means++, 距离计算优化elkan K-Means算法和大数据情况下的优化Mini Batch K-Means算法。
 1.K-Means原理初探

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

如果用数据表达式表示,假设簇划分为(C1,C2,...Ck),则我们的目标是最小化平方误差E


其中μi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
层次算法是一种基于距离的类方法,它的主要思想是将最相似的数据点组合成一个簇,然后逐步地将其他数据点加入到簇中,直到所有的数据点都被分配到某个簇中。Python中有很多库可以实现层次算法,比如scikit-learn、SciPy等。 下面是一个使用SciPy库实现层次算法的简单例子: ```python import numpy as np from scipy.cluster.hierarchy import dendrogram, linkage import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(4711) a = np.random.multivariate_normal([10, 0], [[3, 1], [1, 4]], size=[100,]) b = np.random.multivariate_normal([0, 20], [[3, 1], [1, 4]], size=[50,]) X = np.concatenate((a, b),) print(X.shape) # (150, 2) # 计算距离矩阵 Z = linkage(X, 'ward') # 绘制树状图 plt.figure(figsize=(25, 10)) plt.title('Hierarchical Clustering Dendrogram') plt.xlabel('sample index') plt.ylabel('distance') dendrogram(Z, leaf_rotation=90., leaf_font_size=8.) plt.show() ``` 在上面的代码中,我们首先生成了一个随机数据集,并利用`linkage`函数计算了距离矩阵。然后,我们使用`dendrogram`函数绘制了树状图。 运行上面的代码,你可以得到一个类似于下面这样的树状图: ![层次类树状图](https://img-blog.csdn.net/20180511123043737?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1aGFv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75) 从图中可以看出,不同颜色的线段代表不同的簇,簇之间的高度差表示它们的距离。你可以根据需要调整`linkage`函数中的参数,比如`method`参数可以设置类的方法,`metric`参数可以设置距离度量方式等等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值