机器学习: K-means 聚类
今天介绍机器学习里常见的一种无监督聚类算法,K-means。我们先来考虑在一个高维空间的一组数据集,S={x1,x2,...,xN}" role="presentation" style="position: relative;">S={x1,x2,...,xN}S={x1,x2,...,xN}, x∈RD" role="presentation" style="position: relative;">x∈RDx∈RD,假设我们需要把这组数据聚集长 K" role="presentation" style="position: relative;">KK 类,不失一般性,我们可以假设每个聚好的类都有一个中心 μk" role="presentation" style="position: relative;">μkμk,如果聚类完成的话,那么数据集中的每一个点 x" role="presentation" style="position: relative;">xx 会有一个中心 μk" role="presentation" style="position: relative;">μkμk 离这个点的距离最近。可以构造一个变量 rnk={0,1}" role="presentation" style="position: relative;">rnk={0,1}rnk={0,1} 表示变量 x" role="presentation" style="position: relative;">xx 离第 k" role="presentation" style="position: relative;">kk 类最近 rnk=1" role="presentation" style="position: relative;">rnk=1rnk=1,离其他的类更远 rnj=0,j≠k" role="presentation" style="position: relative;">rnj=0,j≠krnj=0,j≠k,那么我们可以定义如下的目标函数:
这个目标函数就是要求 rnk,μk" role="presentation" style="position: relative;">rnk,μkrnk,μk,使得目标函数 J" role="presentation" style="position: relative;">JJ 的值最小。
为了解决上面这个问题,因为要同时求 rnk,μk" role="presentation" style="position: relative;">rnk,μkrnk,μk 两个变量,所以我们会采取分步迭代的方法,当我们求 rnk" role="presentation" style="position: relative;">rnkrnk 可以让 μk" role="presentation" style="position: relative;">μkμk 固定不动,当我们求 μk" role="presentation" style="position: relative;">μkμk 的时候,可以让 rnk" role="presentation" style="position: relative;">rnkrnk 固定不动。
很显然,当我们求 rnk" role="presentation" style="position: relative;">rnkrnk,只有比较每一个 xn" role="presentation" style="position: relative;">xnxn 与 μk" role="presentation" style="position: relative;">μkμk 的距离,选择距离最近的一个类即可:
而求 μk" role="presentation" style="position: relative;">μkμk 的时候,我们可以 让 rnk" role="presentation" style="position: relative;">rnkrnk 固定不动, 对目标函数 J" role="presentation" style="position: relative;">JJ 求导,
从而我们可以求得 μk" role="presentation" style="position: relative;">μkμk :
通过这样的反复迭代,直到所有的 rnk,μk" role="presentation" style="position: relative;">rnk,μkrnk,μk 都不再变化。
机器学习: K-means 聚类的更多相关文章
- 吴裕雄 python 机器学习——K均值聚类KMeans模型
import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...
- 机器学习算法与Python实践之(五)k均值聚类(k-means)
机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学 ...
- 机器学习算法与Python实践之(六)二分k均值聚类
http://blog.csdn.net/zouxy09/article/details/17590137 机器学习算法与Python实践之(六)二分k均值聚类 zouxy09@qq.com http ...
- 机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例
k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k.k均值是基于相似度的聚类,为没有标签的一簇实例分为一类. 一 经典的k-均值聚类 思路: 1 随机创建k个质心(k必须指定,二维的很容易确定 ...
- 机器学习之路:python k均值聚类 KMeans 手写数字
python3 学习使用api 使用了网上的数据集,我把他下载到了本地 可以到我的git中下载数据集: https://github.com/linyi0604/MachineLearning 代码: ...
- 机器学习之K均值聚类
聚类的核心概念是相似度或距离,有很多相似度或距离的方法,比如欧式距离.马氏距离.相关系数.余弦定理.层次聚类和K均值聚类等 1. K均值聚类思想 K均值聚类的基本思想是,通过迭代的方法寻找K个 ...
- 100天搞定机器学习|day44 k均值聚类数学推导与python实现
[如何正确使用「K均值聚类」? 1.k均值聚类模型 给定样本,每个样本都是m为特征向量,模型目标是将n个样本分到k个不停的类或簇中,每个样本到其所属类的中心的距离最小,每个样本只能属于一个类.用C表示 ...
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- 机器学习六--K-means聚类算法
机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...
- 机器学习理论与实战(十)K均值聚类和二分K均值聚类
接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...
随机推荐
- ORACLE SQL 函数 INITCAP()
INITCAP() 假设c1为一字符串.函数INITCAP()是将每个单词的第一个字母大写,其它字母变为小写返回. 单词由空格,控制字符,标点符号等非字母符号限制. select initcap('h ...
- 784. Letter Case Permutation C++字母大小写全排列
网址:https://leetcode.com/problems/letter-case-permutation/ basic backtracking class Solution { public ...
- 浙江省赛 ZOJ4029
Now Loading!!! Time Limit: Second Memory Limit: KB DreamGrid has integers . DreamGrid also has queri ...
- centos7安装nginx 报./configure: error: C compiler cc is not found
CentOS 7 下 安装 nginx 执行配置命令 ./configure 时提示以下错误: 解决: 执行以下命令: yum -y install gcc gcc-c++ autoconf auto ...
- Spring @Scheduled @Async联合实现调度任务(2017.11.28更新)
定时任务之前一直用的是quartz之类,但是注意到Spring中其实也提供了一种简单的调度注释@Scheduled,也就想尝一下鲜.. 代码示意如下: @Component @EnableSchedu ...
- react router @4 和 vue路由 详解(三)react如何在路由里面定义一个子路由
完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 5.react如何在路由里面定义一个子路由? a.引入在需要子路由的页面引入Rout ...
- Oracle.PL/SQL高级
一.匿名块 .使用returning ... INTO 保存增删改表数据时的一些列的值 ()增加数据时保存数据 DECLARE v_ename emp.ename%TYPE; v_sal emp.sa ...
- windows 路由的配置
查看ip路由表 route print : netstat -r windows 下添加一条路由 route命令 route [-f][-p][command [distinataion] [MASK ...
- learning scala control statement
1 .if satement 与其它语言不同的是,scala if statement 返回的是一个值 scala> val a = if ( 6 > 0 ) 1 else -1a: In ...
- wpf自定义控件中使用自定义事件
wpf自定义控件中使用自定义事件 1 创建自定义控件及自定义事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...