K-means

  • 数据是没有label的,按照数据之间的相似性进行分类

原理and步骤

  • 是随机选取K个对象作为初始的聚类中心,
  • 计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心,
  • 聚类中心以及分配给它们的对象就代表一个聚类,
  • 每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件,
  • 终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

数学推导

简书

  • 对于一组没有标签的数据集X
    \(X=\left[\begin{array}{c}{x^{(1)}} \\ {x^{(2)}} \\ {\vdots} \\ {x^{(m)}}\end{array}\right]\)
  • 把这个数据集分成\(k\)个簇\(C_{k}\),\(C=C_{1}, C_{2}, \dots, C_{k}\)
  • 最小化的损失函数为
    \(E=\sum_{i=1}^{k} \sum_{x \in C_{i}}\left\|x-\mu_{i}\right\|^{2}\)
  • 其中\(\mu_{i}\)为簇\(C_{i}\)的中心点:
    \(\mu_{i}=\frac{1}{\left|C_{i}\right|} \sum_{x \in C i} x\)

  • 找到最优聚类簇,需要对每一个解进行遍历,因此,k-means使用贪心算法对每个解进行遍历
    • 1.在样本中随机选取\(k\)个样本点充当各个簇的中心点\(\left\{\mu_{1}, \mu_{2}, \dots, \mu_{k}\right\}\)
    • 2.计算所有样本点与各个簇中心之间的距离 \(\operatorname{dist}\left(x^{(i)}, \mu_{j}\right)\),然后把样本点划入最近的簇中\(x^{(i)} \in \mu_{\text {nearest}}\)
    • 3.根据簇中已有的样本点,重新计算簇中心

      \(\mu_{i}:=\partial g(x) 1\left|C_{i}\right| \sum_{x \in C i} x\)

    • 重复步骤2,3

通俗理解

  • 1.首先输入k的值,即我们希望将数据集经过聚类得到k个分组。
  • 2.从数据集中随机选择k个数据点作为初始大哥(质心,Centroid)
  • 3.对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。
  • 4.这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会,每一群选出新的大哥(其实是通过算法选出新的质心)。
  • 5.如果新大哥和老大哥之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
  • 6.如果新大哥和老大哥距离变化很大,需要迭代3~5步骤

    Unsupervise-learning-notes的更多相关文章

    1. rt-thread learning notes

      rt-thread learning notes 2018-01-15 > 001 具有相同优先级的线程,每个线程的时间片大小都可以在初始化或创建该线程时指定 rt_thread_t rt_th ...

    2. Mybatis Learning Notes 1

      Mybatis Learning Notes 主要的参考是博客园竹山一叶的Blog,这里记录的是自己补充的内容 实体类属性名和数据库不一致的处理 如果是实体类的结果和真正的数据库的column的名称不 ...

    3. Rust learning notes

      Rust learning notes Rust Version 1.42.0 $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs ...

    4. D3 learning notes

      D3 https://d3js.org/ 数据驱动文档显示, 利用 SVG HTML CSS技术. D3.js is a JavaScript library for manipulating doc ...

    5. Coursera, Machine Learning, notes

        Basic theory (i) Supervised learning (parametric/non-parametric algorithms, support vector machine ...

    6. 【Learning Notes】线性链条件随机场(CRF)原理及实现

      1. 概述条件随机场(Conditional Random Field, CRF)是概率图模型(Probabilistic Graphical Model)与区分性分类( Discriminative ...

    7. SQL Learning Notes

      Sams Teach Yourself SQL in 10 Minutes

    8. go learning notes

      1)  cgo $go install test.go # command-line-arguments /usr/bin/ld: unrecognized option '--build-id=no ...

    9. Java learning notes (1):Basic Knowlege points

      Basic Knowlege points: 1: it's necessary that there is only one public class in per .java file 2: .j ...

    10. Python Django Learning Notes..

      The first time I came across django was last month.. Since then I was considering it as the better c ...

    随机推荐

    1. 【Bullet引擎】Bullet物理引擎简单说明

      说明 Bullet是一款开源的物理模拟计算引擎,包括刚体.柔体.弹性体等,是世界三大物理模拟引擎之一(包括Havok和PhysX),被广泛应用于游戏开发(GTA5等)和电影(2012等)制作中. Bu ...

    2. 数据清洗:按照进行数据清洗,并将清洗后的数据导入hive数据库中。

      虚拟机: hadoop:3.2.0 hive:3.1.2 win10: eclipse 两阶段数据清洗: (1)第一阶段:把需要的信息从原始日志中提取出来 ip:    199.30.25.88 ti ...

    3. python学习(7)关于列表操作相关命令以及浅复制深复制

      在python中,[]表示的是列表.列表有各种操作命令. 1.append()方法,添加一个元素到列表尾部. 注意append()方法与extend()方法有区别:list.append(object ...

    4. Windwos日志分析

      Windows日志分析工具 查看系统日志方法: 在“开始”菜单上,依次指向“所有程序”.“管理工具”,然后单击“事件查看器” 按 "Window+R",输入 ”eventvwr.m ...

    5. js—二进制中1的个数

      题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 做题思路 代码 function NumberOf1(n) { // write code here var cnt = 0 ...

    6. printf函数中*修饰符的作用,如:%*d

      在printf函数中,我们可以用数字修饰来控制打印的字段宽度和精度,如下(为强调视觉效果,均填充0): #include <stdio.h> int main() { ; float f= ...

    7. 如何在SQL Server中生成和使用CRUD存储过程

      在本文中,请参阅如何在SQL Server中生成和使用CRUD存储过程. 大多数数据库系统基于缩写CRUD调用的最简单的4种数据操作操作进行操作. 此首字母缩写词代表CREATE,READ,UPDAT ...

    8. 常量, char[], const char[], char*, const char*, char* const以及const char* const的详解

      注意,这里用char类型只是举了一个例子,其他的int之类的也通用. 1: 常量: 例子: char str[] = "Hello world!"; char ch = 'a'; ...

    9. 127.0.0.1 拒绝了我们的连接请求--访问本地IP时显示拒绝访问

      问题描述 今天在访问http://127.0.0.1时,浏览器显示"127.0.0.1 拒绝了我们的连接请求",需要设置浏览器设置 解决方法 1.打开控制面板,搜索"程序 ...

    10. 利用js+ajax在jsp与servlet间进行简单数据交换

      直接上代码 jsp <%@ page language="java" contentType="text/html; charset=utf-8" pag ...