简述

K-means Algorithm(s)

  • Assumes Euclidean space/distance 假设是在欧式空间下的。因为means本身是需要在欧式空间下才可以计算。但K-means有很多的推广版本,将欧式空间中所提到的Centroid转成Clustroid,是一种比较常见的推广方式。
  • 算法先取k个类: Initialization 的时候需要避免ill-initialization 这里考虑到病态的初始化。最为经典的是使用 Rival penalized competitive learning1

总之,通过一定的方式,可以实现初始化的K个类中心的选取。

算法流程

  • For each point, place it in the cluster whose current centroid it is nearest.对于每个点,将其放在那个类中心离它最近的那个类中。
  • After all points are assigned, update the locations of centroids of the K clusters. 每个点都被分配完之后,更新每个类的中心位置。
  • Reassign all points to their closet centroid. 再分配每个点(方法类似)直到整个分配没什么变化。(直到收敛)

收敛性证明

这里我只给出不是很严谨的证明~ 至于详细的可以看60年前的那篇论文。

我们认为K-means一定会收敛。
下面使用反证法:
假设该算法不收敛。

那么根据假设就存在有这样的一个点。在添加它之后,即类中心发生移动后,就该删除掉它。
而这是不合理的。添加上该点之后,该类中心会向该点的发生移动。即距离比之前更近了。而根据算法,我们知道这样的点是不会被抛弃的。所以,这样的点不存在。即该算法会收敛。

证明不是很严谨,但是却可以拿来做对于算法收敛的直观认知~
欢迎大家在评论区补充~

Python实现

  • 注意,这里采用的是完全随机初始化,这样的效果不是很好。因为可能会存在有病态的初始化结果。
def k_means(X, k=3):index_list = np.arange(len(X))np.random.shuffle(index_list)centroids_index = index_list[:k]centroids = X[centroids_index]y = np.arange(len(X))while True:y_new = np.arange(len(X))for i, xi in enumerate(X):y_new[i] = np.argmin([np.linalg.norm(xi - cj) for cj in centroids])if sum(y != y_new) == 0:breakfor j in range(k):centroids[j] = np.mean(X[np.where(y_new == j)], axis=0)y = y_new.copy()return y
  • 直接用PCA截取部分特征,主要是为了画图
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.decomposition import PCA
X_reduced = PCA(n_components=2).fit_transform(iris.data)
import matplotlib.pyplot as plt
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y, cmap=plt.cm.Set1)

原图:

K-means:

  • 直接选用前两个特征
plt.scatter(iris.data[:, 0], iris.data[:, 1], c=y, cmap=plt.cm.Set1)
y_test_2 = k_means(iris.data)
plt.scatter(iris.data[:, 0], iris.data[:, 1], c=y_test, cmap=plt.cm.Set1)

原图:

K-means:


  1. https://ieeexplore.ieee.org/abstract/document/238318) ↩︎

K-Means算法理论及Python实现相关推荐

  1. 时间序列 预处理 python_时间序列算法理论及python实现(1-算法理论部分)

    如果你在寻找时间序列是什么?如何实现时间序列?那么请看这篇博客,将以通俗易懂的语言,全面的阐述时间序列及其python实现. 就餐饮企业而言,经常会碰到如下问题. 由于餐饮行业是胜场和销售同时进行的, ...

  2. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  3. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  4. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  5. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  6. 文献记录(part89)--I-k-means-+:An iterative clustering algorithm based on an enhanced k -means

    学习笔记,仅供参考,有错必究 关键词:k均值:解决方案改进:准确的k均值:迭代改进 I-k-means-+:An iterative clustering algorithm based on an ...

  7. 强化学习的学习之路(十)_2021-01-10:K臂老虎机介绍及其Python实现

    作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助.这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学 ...

  8. 详解 Benders 分解与一个算例的 python 代码

    听说过 benders 分解几年了,在生产管理.路径规划与选址问题中经常应用,一直没有细看,最近论文里面也见到,还是有必要了解一下它的基本思想与用法的. 目录 1. 基本思想 2. 线性规划模型与对偶 ...

  9. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

最新文章

  1. 我所感兴趣的iOS10新特性
  2. [目录]Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案
  3. 【postgresql初始化失败】initdb: invalid locale settings; check LANG and LC_* environment variables(之二)
  4. valid parentheses java_Valid Parentheses Java
  5. 揭秘 .NET 5 和Java 互操作
  6. lua 调用文件中的函数调用_深入Lua:调用相关的指令
  7. vue 解决: *!!vue-style-loader!css-loader?{“sourceMap“:true}!../../../../vue-loader
  8. 【django】使用django-crontab执行django自定义指令
  9. selenium webdriver学习(八)------------如何操作select下拉框(转)
  10. springboot actuator_Spring Boot之程序性能监控
  11. 关于console.log() 打印得引用类型得数据得相关问题
  12. 儿科常见疾病的中成药疗法
  13. lower_bound 、upper_bound 、binary_search
  14. python透视表画图_透视表、交叉表、matplotlib作图
  15. BigWorld文件夹结构
  16. 网址大放松 让网络一族网上过个新年(转)
  17. 深度系统deepin
  18. 【BZOJ4327】[JSOI2012] 玄武密码(AC自动机的小应用)
  19. 全能型终端神器!好用、免费!
  20. 自编码器(autoencoder)了解一下

热门文章

  1. Android5.1设备无法识别exFAT文件系统的64G TF卡问题
  2. 关机充电如何实现短按pwrkey灭屏
  3. mtk camera 移植步骤
  4. WINCE5.0下SQL server compact版本更新
  5. db browser连接mysql_MyEclipse DB Browser 连接 MySQL 配置 mysql select
  6. python常用的集成开发环境有哪些_python IDE有哪些?哪个好用?
  7. springboot + profile(不同环境读取不同配置)
  8. 黑马程序员:java基础之装饰设计模式
  9. 【AwayPhysics学习笔记】:Away3D物理引擎的简介与使用
  10. 【数据挖掘知识点六】假设检验