再免费多看一章--k-means++
时间:2022-05-08
本文章向大家介绍再免费多看一章--k-means++,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在k-means算法里开始选取的聚类中点是随机的,每次都会照成不同的聚类结果。有一个解决方案叫做k-means++,可以有效的选择初始聚类中心点。参考 http://theory.stanford.edu/~sergei/papers/kMeansPP-soda.pdf。
在《白话大数据与机器学习》里使用了sklearn里的KMeans来处理数据, 默认使用的就是k-means++: 训练模型 clf = KMeans(n_clusters=3, init=’k-means++’).fit(x, y)
这里我们来实现一下k-means++算法,看看该算法具体是如何实现的。
1 训练模型 使用kmeans++算法初始化聚类中点: 假设有一个数据集合X,里面有N条记录。
[x1, x2, x3, x4, x5, x6, ...]
第一次从X中随机取一条记录xi,当做聚类的第一个中心点。 然后重复以下步骤: 对每条记录,计算其与最近的一个中点之间的距离D(xn)并保存到一个数据组里,计算距离公式有很多,欧式距离,曼哈顿距离等。
D(x) = [D(x1), D(x2), D(x3), D(x4), D(x5), D(x6), ...]
对计算得到的距离加和
Sum(D(x))
然后再用D(x)里的各条记录分别除以距离加和值 D(xn)/Sum(D(x))
[D(x1)/Sum(D(x)),
D(x2)/Sum(D(x)),
D(x3)/Sum(D(x)),
D(x4)/Sum(D(x)),
D(x5)/Sum(D(x)),
D(x6)/Sum(D(x)), ... ...]
得到下面这样的概率分布数组
[P(x1),
P(x2),
P(x3),
P(x4),
P(x5),
P(x6),
...]
接着计算累加和
[P(x1),
P(x1) + P(x2),
P(x1) + P(x2) + P(x3),
P(x1) + P(x2) + P(x3) + P(x4),
P(x1) + P(x2) + P(x3) + P(x4) + P(x5),
P(x1) + P(x2) + P(x3) + P(x4) + P(x5) + P(x6),
... ...]
从该数组中随机取一条记录,用它的下标在记录X中取值 当做下一个聚类中心点。
当聚类中心点初始完毕之后接下来就是使用k-means算法,聚拢各类: 计算所有点和各个中心点之间的距离,取离自己最近的中心点归为那个聚类。
{0: [x1, x2, x3],
1: [x4, x5, x6],
......}
重新计算各个簇的中点,取各个特征列的均值,得到新的中心点。
[(x1 + x2 + x3) / 3,
(x4 + x5 + x6) / 3,
...]
重复上述步骤 直到没有中心点移动。
完整代码可以访问https://github.com/azheng333/Ml_Algorithm.git进行下载。
- Spring-Boot:Spring Cloud构建微服务架构
- Python-WXPY实现微信监控报警
- MySQL InnoDB Lock(一)
- Java 时间类-Calendar、Date、LocalDate/LocalTime
- Java消息队列--JMS概述
- Java FtpClient 实现文件上传服务
- Java消息队列--ActiveMq 实战
- Java消息队列-Spring整合ActiveMq
- 【知识】SAS数据分析完整笔记(3)
- 深入浅出Redis-Spring整合Redis
- Stream-快速入门Stream编程
- MySQL Regular Expression
- Jenkin-持续集成
- 4.3.4.7 Pattern Matching
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Oracle字符集检查和修改
- Vue3 DOM Diff 核心算法解析
- PHP的LZF压缩扩展工具
- Python函数定义及参数详解
- 代码失而复得心塞往事 - git stash命令
- 如何通过 Shell 监控异常等待事件和活跃会话
- PHP中环境变量的操作
- 一文读懂JAVA并发容器类ConcurrentHashMap
- Creator3D新版本震撼来袭
- SpringBoot源码学习(十)-Spring类级别注解解析原理
- 从安全切面到Security Mesh
- SpringBoot源码学习(十一) - bean的实例化过程
- 每天一杯力扣快乐水
- Typescript的tsconfig.json
- python和R语言计算蛋白质内部氨基酸相互作用