机器学习 - K-means聚类分析
一、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聚类分析相关推荐
- OpenCV官方文档 理解k - means聚类
理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...
- kmeans改进 matlab,基于距离函数的改进k―means 算法
摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...
- 手把手教你R语言做k均值聚类分析
今天聊聊k均值聚类分析,我们先要知道什么是类,在大数据时代,我们每个人都被打上很多个性标签,比如:宅男,月光族,手机控,非主流等等,每个标签都可以算是一个类,因此,可以不严谨的说:类是一些有特殊属性个 ...
- K means 图片压缩
k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...
- 机器学习之K-means聚类分析NBA球员案例
机器学习之K-means聚类分析NBA球员案例 本次案例利用k-means算法分析NBA球员球队实力,具体采用2种方式实现案例,一种为自己实现,一种为调用sklearn库,数据来源nba_2013.c ...
- 全国113个城市空气质量的K均值聚类分析--基于R
下表给出了2017年全国113个环保重点城市空气质量年度数据(资料来源:中华人们共和国国家统计局).它们分别为:二氧化硫平均浓度(微克每立方米,),二氧化氮平均浓度(微克每立方米,);可吸入颗粒物(P ...
- 为了联盟还是为了部落 | K means
1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...
- k均值聚类算法(K Means)及其实战案例
算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- SPSS聚类分析:K均值聚类分析
SPSS聚类分析:K均值聚类分析 一.概念:(分析-分类-K均值聚类) 1.此过程使用可以处理大量个案的算法,根据选定的特征尝试对相对均一的个案组进行标识.不过,该算法要求您指定聚类的个数.如果知道, ...
- OpenCV的k - means聚类 -对图片进行颜色量化
OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...
最新文章
- 关于一个简易的实时内存监控系统的思维导图
- html的区域大小,JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性...
- getAffineTransform函数
- arch linux 同步时间,ArchLinux 设置系统时间
- 大于等于符号_英语标点符号怎么读,这下全知道了!
- Day-17: 网络编程
- Qt笔记-解决键盘事件不能正常响应(其他响应事件通用)
- 浅拷贝(副本)与深拷贝
- [tf] Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initial
- 用 Python 轻松搞定 Excel 中的 20 个常用操作
- Zabbix-server安装后的故障处理及Zabbix-agent的配置添加过程
- java8 jstack_java自带命令行工具(jcmd,jstack)
- python定时器 中止_定时器Timer如何终止运行的问题
- 5个很牛的黑科技网站分享
- 经纬度PLT文件格式说明
- Spring boot yml的格式
- E: 无法定位软件包
- 【AIOT】手表调研
- 百家讲坛之易中天品三国MP3全集
- Qt图像处理技术二:对QImage图片简单滤镜(暖色,冷色,反色,老照片,灰度)
热门文章
- 幸福的地图(千金百分百电视原声带)铃声 幸福的地图(千金百分百...
- .Net(C#)汉字和Unicode编码互相转换
- 工作中经常用到github上优秀、实用、轻量级、无依赖的插件和库(转)
- 点九图完全解析-附官方工具
- 中邮集团“天机网”剑指淘宝
- 关于接口中定义的变量
- CTex和WinEdt的安装以及中国科学期刊模板的打开方式
- Delphi常用通讯控件的应用札记
- cortex a7 a53_奥迪A7 升级原厂空气悬挂、FOGIAGO碳纤维进气套件、自动泊车辅助-改装作品...
- JavaGUI 10 初识 Swing 类库