k-means算法原理

K-means中心思想:事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。

聚类算法:是一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。

聚类算法与分类算法最大的区别是:聚类算法是无监督的学习算法,而分类算法属于监督的学习算法,分类是知道结果的。

在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。

k-means算法流程

1.选择聚类的个数k(kmeans算法传递超参数的时候,只需设置最大的K值)

2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。

3.对每个点确定其聚类中心点。

4.再计算其聚类新中心。

5.重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变。)

k-means优点与缺点

优点:

1、原理简单(靠近中心点) ,实现容易

2、聚类效果中上(依赖K的选择)

3、空间复杂度o(N)时间复杂度o(IKN,N为样本点个数,K为中心点个数,I为迭代次数)

缺点:

1、对离群点, 噪声敏感 (中心点易偏移)

2、很难发现大小差别很大的簇及进行增量计算

3、结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)

k-means的经典案例与适用范围

1.文档分类器:根据标签、主题和文档内容将文档分为多个不同的类别。这是一个非常标准且经典的K-means算法分类问题。

2.物品传输优化:使用K-means算法的组合找到无人机最佳发射位置和遗传算法来解决旅行商的行车路线问题,优化无人机物品传输过程。

3.识别犯罪地点:使用城市中特定地区的相关犯罪数据,分析犯罪类别、犯罪地点以及两者之间的关联,可以对城市或区域中容易犯罪的地区做高质量的勘察。

4.客户分类聚类能过帮助营销人员改善他们的客户群(在其目标区域内工作),并根据客户的购买历史、兴趣或活动监控来对客户类别做进一步细分。

5.球队状态分析:分析球员的状态一直都是体育界的一个关键要素。随着竞争越来愈激烈,机器学习在这个领域也扮演着至关重要的角色。如果你想创建一个优秀的队伍并且喜欢根据球员状态来识别类似的球员,那么K-means算法是一个很好的选择。

6.保险欺诈检测:利用以往欺诈性索赔的历史数据,根据它和欺诈性模式聚类的相似性来识别新的索赔。由于保险欺诈可能会对公司造成数百万美元的损失,因此欺诈检测对公司来说至关重要。

7.乘车数据分析:面向大众公开的Uber乘车信息的数据集,为我们提供了大量关于交通、运输时间、高峰乘车地点等有价值的数据集。分析这些数据不仅对Uber大有好处,而且有助于我们对城市的交通模式进行深入的了解,来帮助我们做城市未来规划。

8.网络分析犯罪分子:网络分析是从个人和团体中收集数据来识别二者之间的重要关系的过程。网络分析源自于犯罪档案,该档案提供了调查部门的信息,以对犯罪现场的罪犯进行分类。

9.呼叫记录详细分析:通话详细记录(CDR)是电信公司在对用户的通话、短信和网络活动信息的收集。将通话详细记录与客户个人资料结合在一起,这能够帮助电信公司对客户需求做更多的预测。

10.IT警报的自动化聚类:大型企业IT基础架构技术组件(如网络,存储或数据库)会生成大量的警报消息。由于警报消息可以指向具体的操作,因此必须对警报信息进行手动筛选,确保后续过程的优先级。对数据进行聚类可以对警报类别和平均修复时间做深入了解,有助于对未来故障进行预测。

sk-learns的参数详解与调优流程

不像监督学习的分类问题和回归问题,无监督聚类没有样本输出,也就没有比较直接的聚类评估方法。目前来讲有两种方法能够比较好的确定k的取值:

(1)惯性确定法,惯性只样本到其最近聚类中心的平方距离之和。基于欧几里得距离,K-Means算法需要优化的问题就是,使得簇内误差平方和(within-cluster sum of squared errors,SSE)最小,也叫簇惯性(cluster intertia)。随着分类数量的增多,SE的数值也会变得越来越小,但并不是分类数量越多越好,在选择时就需要选择‘拐点处的k值’后边有详细介绍。

SSE

(2)另一种方法是从簇内的稠密程度和簇间的离散程度来评估聚类的效果。常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index。个人比较喜欢Calinski-Harabasz Index,这个计算简单直接,得到的Calinski-Harabasz分数值s越大则聚类效果越好。Calinski-Harabasz分数值s的数学计算公式是:

Calinski-Harabasz

其中m为训练集样本数,k为类别数。Bk为类别之间的协方差矩阵,Wk为类别内部数据的协方差矩阵。tr为矩阵的迹。也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabsaz_score.

实战案例-使用sk_learn里的KMeans模块进行演示:

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeansfrom sklearn.datasets import make_blobs ##为聚类产生数据集from sklearn import metrics#以下利用sklearn的make_blobs生成k-means测试数据n_samples=5000 #样本数量:5000random_state=10 #随机种子centers=5 #分类数x, y = make_blobs(centers=centers,n_samples=n_samples, random_state=random_state) #生成随机数plt.figure(figsize=(25, 25))plt.subplot(4,3,1)plt.scatter(x[:,0],x[:,1],c=y)plt.title('initial data')

生成的测试数据如下:

原始数据

对数据进行计算,n_clusters的取值范围在2~9,并记录每一个n_clustrs取值时的SSE与calinski_harabaz_score取值:

inertia=[]calinski_harabaz_score=[]a=2for i in range(2,10): km = KMeans(n_clusters=i,n_init=10,init='k-means++').fit(x) y_pred=km.predict(x) center_=km.cluster_centers_ inertia.append([i,km.inertia_]) z=metrics.calinski_harabaz_score(x, y_pred)  calinski_harabaz_score.append([i,z]) plt.subplot(4,3,a) a=a+1 plt.scatter(x[:,0],x[:,1],c=y_pred) plt.scatter(center_[:,0],center_[:,1],color='red') plt.title('n_clusters=%s'%i)inertia=np.array(inertia)plt.subplot(4,3,10)plt.plot(inertia[:, 0], inertia[:, 1])plt.title('SSE - n_clusters')plt.subplot(4,3,11)calinski_harabaz_score=np.array(calinski_harabaz_score)plt.plot(calinski_harabaz_score[:, 0], calinski_harabaz_score[:, 1])plt.title('calinski_harabaz_score - n_clusters')plt.show()

最终结果如下:n_clusters=2

n_clusters=2

n_clusters=5

n_clusters=5

n_clusters=9

n_clusters=9

在不同的n_clusters取值情况下,SSE与calinski_harabaz_score的取值情况:

SSE随n_clusters变化

metrics.calinski_harabsaz_score随n_clusters的变化

通过SSE的定义可知,SSE随着n_clusters的增大是会变小的,一般会在SSE出现拐点的地方取值,同时还需要参考calinski_harabaz_score的取值。在此案例中能够看出,SSE在n_clusters=5的时候出现较大的拐点,calinski_harabaz_score在n_clusters=5的时候取得最大值。

kmeans设置中心_kmeans算法相关推荐

  1. kmeans设置中心_Kmeans 聚类算法

    什么是聚类 聚类可以将相似的样本归到同一簇中,是无监督学习中最常见的问题.聚类的结果是,簇内的对象越相似,聚类的效果就越好.一个簇的意思就是一个类别. 以人学习习题为例,仔细观察习题,就会发现高频出现 ...

  2. kmeans设置中心_kmeans聚类与支持向量机(1)

    本篇文章主要讲一下k-means聚类和支持向量机(SVM),这两种方法都是机器学习中基本的分类方法(分类一词可能不准确),作用都是把一堆数据按照一定的规则分成两类或几类. 该篇文章还是注重于通过pyt ...

  3. 数据挖掘经典十大算法_K-Means算法

    数据挖掘经典十大算法_K-Means算法 一.从故事理解K-Means Clustering Algorithm 1.有四个牧师去郊区布道,一开始牧师们随意选了几个布道点,并且把这几个布道点的情况公告 ...

  4. Kmeans、Kmeans++和KNN算法比较

    FROM:http://blog.csdn.net/loadstar_kun/article/details/39450615 K-Means介绍 K-means算法是聚类分析中使用最广泛的算法之一. ...

  5. 超越kmeans:聚类算法概述

    kmeans属于聚类算法当中最早也是最经典一个算法,但是我们可以发现kmeans算法属于刚性聚类,例如,一则谈论政治对生物信息技术影响的新闻报道,既可以归类于政治类别,也可以归类于生物技术类别,但不能 ...

  6. 聚类 python 代码_不足 20 行 Python 代码,高效实现 k-means 均值聚类算法

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法-1.jpg (143.81 KB, ...

  7. 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法!

    作者 | 许文武 责编 | 郭芮 出品 | CSDN 博客 scikti-learn 将机器学习分为4个领域,分别是分类(classification).聚类(clustering).回归(regre ...

  8. K-Means集群算法

    无论什么数据集,理论上都可以形成一定数量的集群. 例如,党我们拿到学生成绩表时,我们可以把成绩分数划分为优(90分左右).良(80分左右).中(70分左右).差(60分及以下). 再例如对于工人工资表 ...

  9. Kmeans均值聚类算法

    Kmeans均值聚类算法 Kmeans白话理解 Kmeans原理详解 聚类与分类 原理介绍 工作流程 评价指标 Kmeans代码实现 聊一聊Kmeans的缺点及优化 Kmeans白话理解 Kmeans ...

  10. 机器学习 — K-Means、K-Means++ 原理及算法实现

    文章目录 机器学习 - K-Means.K-Means++ 原理及算法实现 一.K-Means 1. 概念 2. K-Means算法思想 3. K-Means特点 4.K-Means算法实现 二.K- ...

最新文章

  1. 14_传智播客iOS视频教程_instancetype
  2. 收藏!一篇文章搞懂甘特图
  3. 网上书店 整体需求分析
  4. 一分钟了解spark的调优
  5. elasticSearch6源码分析(1)启动过程
  6. Matlab 进行离散时间信号序列的生成
  7. python读程序是什么意思_0基础学Python之一:什么是程序?
  8. 关于Faster R-CNN的一切——笔记3:Faster R-CNN
  9. linux下ifconfig只剩下lo的解决方法
  10. python加载模型包占用内存多大_加载pickle python对象会占用大量内存
  11. 以Spring方式构建企业Java应用程序
  12. 金税开票软件,开票时弹出FRM-000013
  13. 2022保密教育线上培训考试参考答案 05
  14. sqlserver 项目中连接失败,驱动程序无法通过使用安全套接字层(SSL) 与 java.security.cert.CertificateException
  15. 用 Pandas 读写网页中的 HTML 表格数据
  16. 隐写术----LSB隐写
  17. 想知道游戏建模师每天都在做什么吗?在工作中应具备哪些能力?
  18. h5在线1v1客服|web在线客服系统|h5即时聊天
  19. m6000查看端口状态_M6000日常查看维护命令 -
  20. 域控制器组策略:利用脚本安装exe软件

热门文章

  1. 在创建生成WIFI二维码手机扫码链接
  2. 在服务器上搭建Cadence16.6 CIS共享库
  3. Ant Design for vue
  4. ant design loading 使用
  5. 服务器字体放在服务器什么位置,服务器缺少字体如何查看与添加
  6. CCF CSP 202104-1
  7. 什么是SPU、SKU、ARPU
  8. ue4材质节点大全_UE4材质节点大全
  9. 大数据之路:阿里巴巴大数据实践(数据模型篇)
  10. 千兆以太网芯片88E1111 RGMII模式的驱动