一、K-means 聚类算法介绍

1.K-means聚类算法原理

(1)先抛出一个情景问题

航空公司怎么样对客户分群,区分高价值客户、无价值客户等,对不同的客户群体实施个性化的营销策略,实现利润最大化? 对于该类情景题,可使用聚类分析方法。

(2)聚类分析相关概念

在没有给定划分类别的情况下,根据数据的相似度进行分组的一种方法,分组的原则是组内距离最小化而组间距离最大化。

K-means算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的K类别,采用距离作为相似性的评级指标,即认为两个对象的距离越近,其相似度越大。

算法过程:

1、从N个样本数据中随机选取K个对象作为初始的聚类质心。

2、分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中。

3、所有对象分配完成之后,重新计算K个聚类的质心。

4、与前一次的K个聚类中心比较,如果发生变化,重复过程2,否则转过程5.

5、当质心不再发生变化时,停止聚类过程,并输出聚类结果。

2.K-means算法优缺点

优点:

(1)原理简单,速度快

(2)对大数据集有比较好的伸缩性,因为分类簇数为k<<n、而迭代计算次数为t<<n,其中n是所有对象的数目,k是簇的数目,t是迭代的次数

缺点:

(1)需要指定聚类数量K

(2)对异常值敏感,聚类前需剔除离群点

(3)对初始值敏感,一量初始值选择不好,可能无法得到有效的聚类结果,可以多设置些不同的初始值,对比最后的运算结果,一直到结果趋于稳定来解决这一问题,也可采用K-Means++算法

3.K-menas++算法

K-Means++算法就是对K-Means随机初始化质心的方法的优化,其基本思想就是:初始的聚类中心之间的相互距离要尽可能远,方法如下:

(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心

(2)计算数据集中每个点与第一个聚类中心的距离D(x)

(3)选择一个D(x)较大的点作为新的聚类中心,且该D(x)较大的点(需主观判断)作为聚类中心的概率较大

(4)重复2和3直到k个聚类中心被选出来

(5)利用这k个初始的聚类中心来运行标准的k-means算法

二、语法函数 及 案例

1.K-means语法函数

from sklearn.cluster import KMeans

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=1,

algorithm='auto'

)

参数的意义:

  • n_clusters:簇的个数,即你想聚成几类
  • init: 初始簇中心的获取方法
  • n_init: 获取初始簇中心的更迭次数,默认会初始10次质心,然后返回最好的结果。
  • max_iter: 最大迭代次数
  • tol: 容忍度,即kmeans运行准则收敛的条件
  • precompute_distances:是否需要提前计算距离
  • verbose: 冗长模式
  • random_state: 随机生成簇中心的状态条件。
  • copy_x: 对是否修改数据的一个标记,如果True,即复制了就不会修改数据。
  • n_jobs: 并行设置
  • algorithm: kmeans的实现算法,有:‘auto’, ‘full’, ‘elkan’, 其中 'full’表示用EM方式实现

使用时很多参数已给出了默认值,一般不用去修改这些参数

2.K-means简单案例

import numpy as np

from sklearn.cluster import KMeans

#生成一个随机数据,样本大小为100, 特征数为3

data = np.random.rand(100, 3)

#构造一个聚类数为3的聚类器

estimator = KMeans(n_clusters=3)#构造聚类器

estimator.fit(data)#聚类

label_pred = estimator.labels_ #获取聚类标签

centroids = estimator.cluster_centers_ #获取聚类中心

inertia = estimator.inertia_ # 获取聚类准则的总和

其中:

estimator初始化Kmeans聚类;

estimator.fit聚类内容拟合;

estimator.label_聚类标签,这是一种方式,还有一种是predict;

estimator.cluster_centers_聚类中心均值向量矩阵

estimator.inertia_代表聚类中心均值向量的总和

3.K-means案例2

from sklearn.cluster import KMeans

import numpy as np

data = np.random.rand(100, 3)

km_cluster = KMeans(n_clusters=3, max_iter=300, n_init=40, init='k-means++')

#返回各自文本的所被分配到的类索引

result = km_cluster.fit_predict(data)

print("Predicting result: ", result)

km_cluster是KMeans初始化,其中用init的初始值选择算法用’k-means++’;

km_cluster.fit_predict相当于km_cluster.fit()+km_cluster.predict()合并,一次性得到聚类预测之后的标签;

km_cluster.labels_ 与 km_cluster.predict(data)这是两种聚类结果标签输出的方式,结果貌似都一样。都需要先km_cluster.fit(data),然后再调用。

机器学习 - K-means聚类分析相关推荐

  1. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  2. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  3. 手把手教你R语言做k均值聚类分析

    今天聊聊k均值聚类分析,我们先要知道什么是类,在大数据时代,我们每个人都被打上很多个性标签,比如:宅男,月光族,手机控,非主流等等,每个标签都可以算是一个类,因此,可以不严谨的说:类是一些有特殊属性个 ...

  4. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  5. 机器学习之K-means聚类分析NBA球员案例

    机器学习之K-means聚类分析NBA球员案例 本次案例利用k-means算法分析NBA球员球队实力,具体采用2种方式实现案例,一种为自己实现,一种为调用sklearn库,数据来源nba_2013.c ...

  6. 全国113个城市空气质量的K均值聚类分析--基于R

    下表给出了2017年全国113个环保重点城市空气质量年度数据(资料来源:中华人们共和国国家统计局).它们分别为:二氧化硫平均浓度(微克每立方米,),二氧化氮平均浓度(微克每立方米,);可吸入颗粒物(P ...

  7. 为了联盟还是为了部落 | K means

    1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...

  8. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  9. SPSS聚类分析:K均值聚类分析

    SPSS聚类分析:K均值聚类分析 一.概念:(分析-分类-K均值聚类) 1.此过程使用可以处理大量个案的算法,根据选定的特征尝试对相对均一的个案组进行标识.不过,该算法要求您指定聚类的个数.如果知道, ...

  10. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

最新文章

  1. 关于一个简易的实时内存监控系统的思维导图
  2. html的区域大小,JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性...
  3. getAffineTransform函数
  4. arch linux 同步时间,ArchLinux 设置系统时间
  5. 大于等于符号_英语标点符号怎么读,这下全知道了!
  6. Day-17: 网络编程
  7. Qt笔记-解决键盘事件不能正常响应(其他响应事件通用)
  8. 浅拷贝(副本)与深拷贝
  9. [tf] Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initial
  10. 用 Python 轻松搞定 Excel 中的 20 个常用操作
  11. Zabbix-server安装后的故障处理及Zabbix-agent的配置添加过程
  12. java8 jstack_java自带命令行工具(jcmd,jstack)
  13. python定时器 中止_定时器Timer如何终止运行的问题
  14. 5个很牛的黑科技网站分享
  15. 经纬度PLT文件格式说明
  16. Spring boot yml的格式
  17. E: 无法定位软件包
  18. 【AIOT】手表调研
  19. 百家讲坛之易中天品三国MP3全集
  20. Qt图像处理技术二:对QImage图片简单滤镜(暖色,冷色,反色,老照片,灰度)

热门文章

  1. 幸福的地图(千金百分百电视原声带)铃声 幸福的地图(千金百分百...
  2. .Net(C#)汉字和Unicode编码互相转换
  3. 工作中经常用到github上优秀、实用、轻量级、无依赖的插件和库(转)
  4. 点九图完全解析-附官方工具
  5. 中邮集团“天机网”剑指淘宝
  6. 关于接口中定义的变量
  7. CTex和WinEdt的安装以及中国科学期刊模板的打开方式
  8. Delphi常用通讯控件的应用札记
  9. cortex a7 a53_奥迪A7 升级原厂空气悬挂、FOGIAGO碳纤维进气套件、自动泊车辅助-改装作品...
  10. JavaGUI 10 初识 Swing 类库