聚类方法
github 代码及笔记:click here
- 聚类是什么
- 针对给定的样本,依据它们特征的相似度或距离,将其归并到若干个类或簇的数据分析问题
- 聚类的目的
- 通过得到的类或簇来发现数据的特点或对数据进行处理,在数据挖掘、模式识别等领域有着广泛的作用
- 聚类属于无监督学习
- 根据相似度或距离划分,初始时多少类并不知道
- 聚类算法:
- 层次聚类(hierarchical clustering)
- 聚合法:自下而上,即开始时将每个样本各自分为一个类,之后将相距最近的两类合并,建立一个新的类,重复此操作直至满足条件,得到层次化的类别
- 分裂法:自上而下,即开始时将所有样本归为一类,之后将已有的类中距离相距最远的样本分到两个新的类,重复此操作直至满足条件,得到层次化的类别
- k均值聚类(k-means clustering):基于中心的聚类,通过迭代,将样本分到 $ k $ 个类中,使得每个样本与其所属类的中心或均值最近,得到 $ k $ 个平坦的、非层次化的类别,构成对空间的划分
- 层次聚类(hierarchical clustering)
14.1 聚类的基本概念
14.1.1 相似度或距离
-
聚类的对象是观测数据或样本集合。假设有 $ n $ 个样本,每个样本有 $ m $ 个属性的特征向量组成。样本集合表示为:
- 元素 $ x_{ij} $ 表示第 $ i $ 个样本第 $ j $ 个属性,\(i = 1 , 2 , ..., n, j = 1, 2, ..., m\)
-
聚类的核心概念是相似度或距离,有多种相似度或距离的定义。因为相似度直接影响聚类的结果,所以其选择是聚类的根本问题
闵可夫斯基距离
-
在聚类中,可以将样本集合想象成向量空间中的点,以该空间的距离表示样本之间的相似度
马哈拉诺比斯距离(马氏距离)
-
考虑各个分量(特征)之间的相关性并与各个分量的尺度无关
-
马氏距离越大相似度越小,距离越小相似度越大
相关系数
-
相关系数的绝对值越接近于1,表示样本越相似
-
相关系数的绝对值越接近于0,表示样本越不相似
夹角余弦
-
夹角余弦越接近于1,表示样本越相似
-
夹角余弦越接近于0,表示样本越不相似
14.1.2 类或簇
-
通过聚类得到的类或簇,本质是样本的子集
- 硬聚类方法:一个聚类方法假定一个样本只能属于一个类,或类的交集为空集
- 软聚类方法:一个聚类方法假定一个样本可以属于多个类,或类的交集不为空集
-
类的特征可以通过不同角度来刻画,常用的特征有下面三种
14.1.3 类与类之间的距离
14.2 层次聚类
聚合聚类算法
-
聚合聚类开始将每个样本各自分为一个类,之后将距离最近的两个类合并,建立一个新类,重复此操作直至满足停止条件,得到层次化的类别
-
具体步骤:
-
输入:$ n $ 个样本组成的样本集合及样本之间的距离
-
输出:对样本集合的一个层次化聚类
-
计算 $ n $ 个样本两两之间的欧氏距离 $ d_{ij} $ ,记作矩阵 $ D= [d_{ij}]_{n×n} $
-
构造 $ n $ 个类,每个类只包含一个样本
-
合并类间距离最小的两个类,其中最短距离为类间距离,构建一个新的类
-
计算新类与当前各类的距离,若类的个数为1,终止计算,否则回到(3)
-
-
聚合层次聚类算法的复杂度为 $ O(n^3m) $ ,其中 $ m $ 是样本的维数,\(n\) 是样本个数
-
分裂聚类算法
- 分裂聚类算法开始将所有样本分为一个类,之后将已有类中距离最远的样本分到两个新类,重复此操作直至满足停止条件,得到层次化的类别
- 具体步骤:
- 输入:$ n $ 个样本组成的样本集合及样本之间的距离
- 输出:对样本集合的一个层次化聚类
- 计算 $ n $ 个样本两两之间的欧氏距离 $ d_{ij} $ ,记作矩阵 $ D= [d_{ij}]_{n×n} $
- 将样本集中的所有的样本归为一个类
- 在同一个类 $ c $ 中计算两两样本之间的距离,找出距离最远的两个样本 $ a $ 和 $ b $ ,之后将样本 $ a $ 和 $ b $ 分配到不同的类 $ c1 $ 和 $ c2 $ 中
- 计算原类 \(c\) 中剩余的其他样本点和 $ a $ 和 $ b $ 的距离,若是 $ distance(a)<distance(b) $ ,则将样本点归到 $ c1 $ 中,否则归到 $ c2 $ 中
- 重复步骤4直至达到聚类的数目或者达到设定的条件
14.3 $ k $ 均值聚类
- $ k $ 均值聚类将样本集合划分为 $ k $ 个子集,构成 $ k $ 个类,将 $ n $ 个样本分到 $ k $ 个类中,每个样本到其所属类的中心的距离最小
- k均值聚类属于硬聚类,每个样本属于一个类
14.3.1 模型
14.3.2 策略
-
$ k $ 均值聚类的策略是通过损失函数最小化选取最优的划分或函数 $C^* $
-
采用欧氏距离平方作为样本之间的距离
-
定义样本与其所属类的中心之间的距离的总和为损失函数
-
$k $ 均值聚类就是求解最优化问题:
- 相似的样本被聚到同类时,损失函数值最小,这个目标函数的最优化能达到聚类的目的
-
该优化问题是 $ n $ 个样本分到 \(k\) 个类,所有可能分法数量:
- 该数量是指数级的,采用迭代求解
14.3.3 算法
14.3.4 算法特性
- 总体特点
- 基于划分的聚类算法
- 类别数 \(k\) 事先指定
- 以欧氏距离平方表示样本之间的距离,以中心或样本的均值表示类别
- 以样本和其所属类的中心之间的距离的总和为最优化的目标函数
- 得到的类别是平坦的、非层次化的
- 算法是迭代算法,不能保证全局最优
- 收敛性
- 启发式算法,无法保证全局最优
- 初始中心点的选择会影响聚类结果
- 类中心随着训练移动,但是移动不会太大,因为在每一步中,样本分到与其最近的中心的类中
- 初始类的选择
- 选择不同的初始中心,会得到不同的聚类结果
- 初始中心的先用层次聚类对样本进行聚类,得到 $ k $ 个类是停止
- **类别数 \(k\) 的选择 **
- 尝试用不同的 \(k\) 值聚类
- 一般而言,类别数变小时,平均直径会增加,类别数变大超过某一个值时,平均直径不变,即得到最优的 \(k\) 值
Write by zhgqcn
原文地址:https://www.cnblogs.com/zgqcn/p/15118096.html
- MySQL数据库(四):约束条件
- hdu----(2084)数塔(dp)
- golang简单tls协议用法完整示例
- spark开发环境详细教程1:IntelliJ IDEA使用详细说明
- MySQL数据库(五):索引
- hdu----(1466)计算直线的交点数(dp)
- golang模板template自定义函数用法示例
- 程序员你为什么这么累【续】:编写简陋的接口调用框架 - 动态代理学习
- hdu---(Tell me the area)(几何/三角形面积以及圆面积的一些知识)
- MySQL数据库(六):体系结构和存储引擎
- hdu----(2222)Keywords Search(trie树)
- MySQL数据库(七):数据导出与导入
- flume与kafka整合高可靠教程
- Oracle 12c系列(一)|多租户容器数据库
- 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 数组属性和方法
- php日志函数error_log用法实例分析
- Laravel 实现关系模型取出需要的字段
- php设计模式之职责链模式定义与用法经典示例
- php实现多站点共用session实现单点登录的方法详解
- php实例化一个类的具体方法
- PHP MVC框架中类的自动加载机制实例分析
- smarty模板的使用方法实例分析
- 关于Yii中模型场景的一些简单介绍
- php文件包含的几种方式总结
- 一个基于Laravel5的个人博客系统:Lablog搭建教程
- php快速导入大量数据的实例方法
- Laravel 模型关联基础教程详解
- yunBT:一个基于TP3.1的多用户BT离线下载程序,支持在线播放
- 使用Chihaya搭建一个可以屏蔽迅雷的Tracker
- [jio本]Debian9一键安装各种下载工具