机器学习Sklearn系列:(五)聚类算法
K-means
原理
首先随机选择k个初始点作为质心
1. 对每一个样本点,计算得到距离其最近的质心,将其类别标记为该质心对应的类别
2. 使用归类好的样本点,重新计算K个类别的质心
3. 重复上述过程,直到质心不发生变化
距离计算方法
在K-Means算法中,需要注意的是,对于距离的计算有很多中方法:
(1)闵可夫斯基距离( Minkowski )
\]
注意这里p=2时则为常用的欧氏距离。
(2) 余弦相似度( Cosine Similarity )
\]
(3) 皮尔逊相关系数 ( Pearson Coefficient )
\]
sklearn中的k-mean方法
class sklearn.cluster.KMeans (n_clusters=8, init=’k-means++’,
n_init=10, max_iter=300, tol=0.0001,
precompute_distances=’auto’, verbose=0,
random_state=None, copy_x=True, n_jobs=None,
algorithm=’auto’)
n_clusters: 设置聚类的数量
init:设置初心质心的方法,可输入"k-means++","random"或者一个n维数组。这是初始化质心的方法,默认"k-means++"。输入k-means++":一种为K均值聚类选择初始聚类中心的聪明的办法,以加速收敛。如果输入了n维数组,数组的形状应该是(n_clusters,n_features)并给出初始质心。
random_state:控制每次质心随机初始化的随机数种子
n_init:整数,默认10,使用不同的质心随机初始化的种子来运行k-means算法的次数。最终结果会是基于Inertia来计算的n_init次连续运行后的最佳输出。等价于运行10次,选择最好一次的质心种子
max_iter:整数,默认300,单次运行的k-means算法的最大迭代次数
tol:浮点数,默认1e-4,两次迭代间Inertia下降的量,如果两次迭代之间Inertia下降的值小于tol所设定的值,迭代就会停下
precompute_distances: 是否余弦把所有点之间的距离计算出来,这样的好处是在后面只需要检索,不需要计算了,但是比较耗费内存。
一个例子:
from sklearn cluster import KMeans
model = Kmeans(n_cluster=3, max_iter=10)
model.cluster_centers_ #获取聚类中心
model.labels #获取样本所属类别
model.inertia # 查看总距离平方和,主要用来比较聚类效果
层级聚类AgglomerativeClustering
层次聚类的思想是通过层次化的自上而下,或者下而上来将相似的类别归到一起,最终实现聚类目的。具体流程如下:
1. 首先将所有样本都看做成是单独的类别,m个样本表示m 个类别
2. 计算类别之间的距离,然后将距离最短的两个类进行合并。
3. 重复2操作,直到类别个数为设置的聚类数k停止。
在层次聚类中,有两个点需要注意,第一是选择哪个作为类别的代表,二是两个类别的代表点如何计算距离。这其中,距离的计算选择比较多,例如上述K-Means聚类中提到的算法,都是可以的,但是关于类比代表的选择是需要多关注的,这个会影响聚类的效果,在实际应用中可以灵活选择。
关于代表点的选择有以下几种方法, 不同的代表点选择方法,也就代表了不同的类别融合方法
最小距离
选择两个类之间距离最近的两个点作为代表点最大距离
选择两个类之间距离最远的点作为代表点中心距离
计算类别中的平均值,作为代表点均值距离
计算两个类别所有点之间的距离,求平均,然后平均值最小的进行融合最小方差
直接将几个类别俩俩混到一起,计算方差,方差小的两个类融合到一起
sklearn中的层次聚类
from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_clusters=3,affinity="euclidean",
linkage="complete")
print("每个样本的举例",model.labels_)
这里有两个参数需要注意:
affinity: 主要表示距离计算的方法
linkage: 表示两个类别之间的融合方法,有些也可以理解为两个类中代表点的选择方法,常用的方法如下:
# ward 最小方差
# complete 最大距离
# average 平均距离
# single 最小距离
密度聚类 DBSCAN
密度聚类不同于上述的两种,密度聚类是不需要设置聚类的个数的,它可以自动找到聚类的个数,但是相应的,密度聚类需要其他参数的设置,这些设置会影响最终聚类的效果。
在理解密度聚类之前,需要理解几个概念:
\(\epsilon\)邻域
核心对象(Core object)
密度直达( directly density-reachable)
密度可达( density-reahable)
假设样本空间一个点为 \(x\), 那么\(\epsilon\)邻域表示的是,以\(x\)为中心,\(\epsilon\)为半径的空间。如果这个空间内,样本的数量≥ minpts(预先设置的样本阈值)这个时候,\(x\)可以被称为这个空间的核心对象。同时,如果存在一个样本点\(x_i\),处于以\(x\)为核心对象的\(\epsilon\)邻域内,那么就称为密度直达。假设有n个核心对象\(x_1,x_2....x_n\), 如果有一条路径是的\(x_1\)通过多次 密度直达 到达\(x_n\), 那么就称为密度可达。
密度聚类算法原理
算法思路,注意这里这个方法不需要指定要最终要聚多少类别
- 首先要设置一个参数是邻域半径\(\epsilon\),其次是核心对象所需要的最小点个数minpts
- 确定核心对象,通过设置的邻域半径和最小点个数,可以找到所有满足要求的核心对象,并保存到一个列表\(\Omega\)中。
- 从列表\(\Omega\)随机选择一个核心对象\(x\),找到所有\(x\)密度可达的所有样本,组成一个类别,并且将已经归类的核心对象从\(\Omega\)中所找的的列表中删除。
- 重复步骤3 , 直到所有核心对象列表为空结束。
sklearn中的密度聚类
from sklearn.cluster import DBSCAN
model = DBScan(eps = 0.5, min_samples = 5, metric = "euclidean")
model.fit(X)
print(model.labels_)
这里eps就是上述的参数\(\epsilon\), min_samples就是上述的参数minpts, metric参数用来设置距离计算方法。
应用-压缩信息
聚类算法一个很大的应用就是信息压缩,可以将数据进行聚类,然后,使用类别中的一个样本代替全体样本。
机器学习Sklearn系列:(五)聚类算法的更多相关文章
- 机器学习:Python实现聚类算法(一)之AP算法
1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...
- 机器学习:Python实现聚类算法(二)之AP算法
1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...
- 机器学习算法总结(五)——聚类算法(K-means,密度聚类,层次聚类)
本文介绍无监督学习算法,无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类,常见的无监督学习就是聚类算法. 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善 ...
- 机器学习:Python实现聚类算法(三)之总结
考虑到学习知识的顺序及效率问题,所以后续的几种聚类方法不再详细讲解原理,也不再写python实现的源代码,只介绍下算法的基本思路,使大家对每种算法有个直观的印象,从而可以更好的理解函数中参数的意义及作 ...
- ML.NET技术研究系列-2聚类算法KMeans
上一篇博文我们介绍了ML.NET 的入门: ML.NET技术研究系列1-入门篇 本文我们继续,研究分享一下聚类算法k-means. 一.k-means算法简介 k-means算法是一种聚类算法,所谓聚 ...
- 机器学习——详解经典聚类算法Kmeans
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法. 在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公 ...
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- 机器学习——利用K-均值聚类算法对未标注数据分组
聚类是一种无监督的学习,它将相似的对象归到同一簇中.它有点像全自动分类.聚类方法几乎可以应用到所有对象,簇内的对象越相似,聚类的效果越好. K-均值(K-means)聚类算法,之所以称之为K-均值是因 ...
- 机器学习:Mean Shift聚类算法
本文由ChardLau原创,转载请添加原文链接https://www.chardlau.com/mean-shift/ 今天的文章介绍如何利用Mean Shift算法的基本形式对数据进行聚类操作.而有 ...
随机推荐
- AI框架类FAQ
AI框架类FAQ 数据处理 问题:如何在训练过程中高效读取数量很大的数据集? 答复:当训练时使用的数据集数据量较大或者预处理逻辑复杂时,如果串行地进行数据读取,数据读取往往会成为训练效率的瓶颈.这种情 ...
- 深度学习框架集成平台C++ Guide指南
深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...
- C#中关于Cookie的理解
本文链接出自:https://www.cnblogs.com/xiangzhe-C/p/4230042.html 1.Cookie简介 Cookie 提供了一种在 Web 应用程序中存储用户特定信息的 ...
- 如何打造高性能的 Go 缓存库
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/531 文中代码位置: https://github.com/devY ...
- Jmeter读取python生成的参数
一.环境准备 1.准备python文件,测试脚本执行结果:下图中的打印的信息即JMeter预期要获取的参数信息 2.准备bat文件 3.添加 OS Process Sampler读取批处理文件 二. ...
- MongoDB学习笔记01:入门
MongoDB简介 MongoDB是一个开源.高性能.无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种.是最 像关系型数据库(MySQL)的非关系型数据库. ...
- 「题解」小 R 打怪兽 monster
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目描述 小 R 最近在玩一款游戏.在游戏中,小 R 要依次打 \(n\) 个怪兽,他需要打败至少 \(k\) 个怪兽才能通关.小 ...
- GD32F330 | ADC实例 基于DMA方式
GD32F330 | ADC实例 基于DMA方式 简单记录一下 ADC多通道转换 DMA搬运 的使用,以 GD32F330G8U6 为例: 一.ADC 基础知识 12位ADC是一种采用逐次逼近方式的模 ...
- 用Python爬取分析【某东618】畅销商品销量数据,带你看看大家都喜欢买什么!
618购物节,辰哥准备分析一波购物节大家都喜欢买什么?本文以某东为例,Python爬取618活动的畅销商品数据,并进行数据清洗,最后以可视化的方式从不同角度去了解畅销商品中,名列前茅的商品是哪些?销售 ...
- NOIP模拟测试8「寿司」
考试时打的类似$n^2$暴力,然后炸了只有10分 后来验证我的算法伪了. 题解 显然你有一种解法,假设你要在一个B点断开将R分别移向最左 最右,这样只用分别计算B点右面蓝色数量左面蓝色数量就得到了一个 ...