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. jquery deferred 转载

      阮一峰的网络日志 » 首页 » 档案 JavaScript http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquer ...

    2. 【TensorFlow】TensorFlow获取Variable值,将Variable保存为list数据

      Variable类型对象不能直接输出,因为当前对象只是一个定义. 获取Variable中的浮点数需要从数据流图获取: initial = tf.truncated_normal([3,3], stdd ...

    3. git push 的解决方案

      如果输入$ git push origin master 提示出错信息: 或者 失败的原因:不能 push 远端仓库 原因分析:由于你当前分支落后与远程端对应分支,所以无法更新: 解决方案:使用 gi ...

    4. FFmpeg命令读取RTMP流如何设置超时时间

      子标题:FFmpeg命令录制RTMP流为FLV文件时如何设置超时时间 | FFmpeg命令如何解决录制产生阻塞的问题0x001: 前言 今天在测试程序时遇到两个问题.Q1:ffmpeg录制RTMP流并 ...

    5. Transformer 详解

      感谢:https://www.jianshu.com/p/04b6dd396d62 Transformer模型由<Attention is all your need>论文中提出,在seq ...

    6. 使用helm安装jenkin和gitlab

      一.使用服务介绍 存储: 阿里云NAS k8s网络插件: calico k8s版本: 1.15.2 二.helm安装 https://www.cnblogs.com/zhangb8042/p/1020 ...

    7. php oci 和 pdo_oci 安装

      安装非常复杂,必须记录 CentOS服务器上已有相关环境:apache.php5 需要安装:1.oracle客户端.2.oci8扩展.3.pdo_oci扩展. 一. 准备文件 1) oracle客户端 ...

    8. light oj 1035 - Intelligent Factorial Factorization 素因子分解

      1035 - Intelligent Factorial Factorization Given an integer N, you have to prime factorize N! (facto ...

    9. 制作OpenOffice的Docker镜像并添加中文字体解决乱码问题

      官网下载openoffice http://www.openoffice.org/download/index.html 本文使用的是Docker官方发布的CentOS7镜像作为基础镜像.镜像的获取方 ...

    10. 用PHP&JS实现的ID&密码校验程序

      声明:本程序纯粹是本人在学习过程中突发奇想做的,并未考虑任何可行性,实用性,只是留下来供以后参考. 前端页面 sign.html <!DOCTYPE html> <html> ...