KMeans聚类算法

  • 何为聚类?
  • 聚类与分类的区别
  • 常见聚类算法及KMeans算法
  • 算法实现步骤
  • KMeans的优缺点
  • KMeans聚类算法实例
  • 完整代码

何为聚类?

俗话说“物以类聚,人以群分”说的是把相同或相似的东西放在一起比较讨论,志同道合的朋友常常能够相聚在一起把酒言欢。朋友间正是因为有相同的志向和趣味,所以能够走到一起,与人一样,数据挖掘里面的聚类是指把具有相同或者相似(退后一步)的对象放在一起讨论,从而挖掘出放在一起的理由和不放在一起的理由以及这样放在一起与不放在一起所带来的额外效用。也许你会问用什么办法来衡量两个对象的相似性呢?这时候就需要把对象的各种属性考虑进来,通过对比分析两个对象的不同属性间的差异来进行判断,比如考察某个班所有学生的聚类情况,已经知道所有学生的期末考试成绩以及平时缺课次数两个属性,可以按照下面规则聚集

  • 学神
    期末考试成绩优异,平时缺课无数

  • 学霸
    期末考试成绩优异,平时不缺课

  • 学渣
    期末考试成绩掉渣,平时缺课无数

  • 学弱
    期末考试成绩掉渣,平时不缺课

我们看到了按照成绩属性取优异还是掉渣以及缺课属性取缺还是不缺共4种组合可以把班里所有学生划分成4类,这样每一类的学生都有自己的特点,同类别的学生有着非常高的相似度,不同类的学生却是天壤之别。这里,我们又引进了相似度的概念,如果两个对象各属性相似度高,那么这两个对象理应属于同一类别,反之应该属于不同类别,上面我们只是通过描述性的语言来说明分类情况, 那么如何用数学语言来刻画呢? 常见的相似度刻画采用距离公式,主要有以下几种距离公式,为讨论的一般性,我们假设有nnn个样本,每个样本有ppp个指标,数据矩阵如下表所示

记第iii个样本为(i)=(xi1,⋯,xip)T(i)=(x_{i1},\cdots,x_{ip})^T(i)=(xi1​,⋯,xip​)T,第jjj个样本为(j)=(xj1,⋯,xjp)T(j)=(x_{j1},\cdots,x_{jp})^T(j)=(xj1​,⋯,xjp​)T,把每个样本看成ppp维空间里的质点,记(i)(i)(i)与(j)(j)(j)的距离为D(i,j)D(i,j)D(i,j) , 那么

  • 欧式距离(Euclidean Distance)
    D(i,j)=[∑l=1p∣xil−xjl∣2]12D(i,j)=[ \sum\limits_{l=1}^{p}|x_{il}-x_{jl}|^2 ]^ {\frac{1} {2} }D(i,j)=[l=1∑p​∣xil​−xjl​∣2]21​

  • 曼哈顿距离(Manhattan Distance)
    D(i,j)=∑l=1p∣xil−xjl∣D(i,j)=\sum\limits_{l=1}^{p}|x_{il}-x_{jl}|D(i,j)=l=1∑p​∣xil​−xjl​∣

  • 切比雪夫距离 (Chebyshev Distance )
    D(i,j)=max1≤l≤p∣xil−xjl∣D(i,j)=max_ {1\leq l\leq p} |x_{il}-x_{jl}|D(i,j)=max1≤l≤p​∣xil​−xjl​∣

  • 闵可夫斯基距离(Minkowski Distance)
    D(i,j)=[∑l=1p∣xil−xjl∣q]1qD(i,j)=[ \sum\limits_{l=1}^{p}|x_{il}-x_{jl}|^q ]^ {\frac{1} {q} }D(i,j)=[l=1∑p​∣xil​−xjl​∣q]q1​

从各种距离公式可以看出,切比雪夫距离和欧式距离是闵科夫斯基距离当q=1q=1q=1和q=2q=2q=2的特殊情况。

聚类与分类的区别

很多初学者会把聚类和分类混肴,那么聚类和分类有何区别呢?主要体现在

  • 学习范畴
    分类属于监督学习范畴,而聚类属于无监督学习范畴

  • 进程不一样
    分类主要用训练数据学习一个模型,里面数据的类别是确定的,然后把测试集中的实例对应到这些确定的类别中,是两步走的过程。而聚类是起初并不知道具体有多少类,可以先行假定类别数,即kkk 值,然后通过某些判断方法,把所有数据划分到这kkk个类别中,使得同一类的实例尽可能聚集到一起,不同类实例尽量离间,不需要训练测试,更多像一锤子买卖。

常见聚类算法及KMeans算法

常见的聚类算法有基于空间测距的KMeans算法,基于密度划分的DBSCAN算法,基于点距离的 hierarchical clustering算法,基于图距离的Affinity Propagation算法等,这里重点介绍KMeans算法。

KMeans翻译成中文表示k均值,KMeans算法的关键是找kkk个均值来当作类别的中心,并以此为参考将其他实例吸收到这kkk个类别,使得最后距离和最小。假设有nnn个实例,现在要将其划分到kkk个不相邻的类别或簇C={c1,⋯,ck}\mathcal{C}=\{c_1,\cdots,c_k\}C={c1​,⋯,ck​},记第jjj个簇cjc_jcj​中的样本均值(中心)为uju_juj​, KMeans 算法旨在选择合适的uju_juj​,使得簇内平方和最小,即
min⁡uj∈C∑j=1k∑i=1n∣∣xi−uj∣∣2\min\limits_ {u_j\in C}\sum\limits_{j=1}^k\sum\limits_{i=1}^n||x_i-u_j||^2uj​∈Cmin​j=1∑k​i=1∑n​∣∣xi​−uj​∣∣2

算法实现步骤

KMeans算法比较简单,只有三步

  1. 初始化kkk个中心,当成kkk个初始簇
  2. 将每一个实例划分到离其最近的中心簇
  3. 计算每个簇的均值,得到新的簇中心
    如果前后两次计算得到簇中心不发生变化,或者变化小于给定的阈值,算法结束,否则返回2计算每个样本到新的簇中心的距离

KMeans的优缺点

KMeans算法假设簇都是凸的且同性的,而对长条形和不正规的形状表现不好,对于高维数据,KMeans算法会消耗更多计算资源。

KMeans聚类算法实例

完整代码

# -*- coding: utf-8 -*-
"""
project_name:聚类算法
@author: 帅帅de三叔
Created on Wed Nov  6 10:05:42 2019
"""
import pandas as pd #导入数据分析模块
from sklearn import  preprocessing #导入数据预处理模块
from sklearn.cluster import KMeans #导入kmeans聚类算法
data=pd.read_excel("2018vs2016.xlsx",index_col=u"板块名称",sheet_name="2018") #读取数据
X=data.iloc[:,0:-1] #聚类用到的特征属性
X_scaled=preprocessing.StandardScaler(copy=True,with_mean=True,with_std=True).fit_transform(X) #特征属性标准化
feature=pd.DataFrame(X_scaled)
k=4 #设置聚类类别数
maxiteration=500 #设置最大迭代次数
model=KMeans(n_clusters=k,init='k-means++',n_init=10,max_iter=maxiteration,tol=1e-4,precompute_distances='auto',verbose=0,random_state=None,copy_x=True,n_jobs=2,algorithm='auto') #聚类模型初始化
model.fit(feature,y=None,sample_weight=None) #训练模型
lables=pd.DataFrame(model.labels_,index=data.index) #类别标签
cluster_result=pd.concat([data,lables],axis=1) #沿着水平方向拼接类别标签
cluster_result.columns=["交通","商业购物","教育","医疗","景观周游","生活娱乐","综合得分","类别标签"] #重命名表头
print(cluster_result)
cluster_result.to_excel("板块聚类结果.xlsx")    

KMeans聚类算法相关推荐

  1. java iris_利用K-Means聚类算法实现对iris.data.ulab

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用K-Means聚类算法实现对iris.data.ulabel数据的聚类,这是在网上找到如果要换成我的iris.date iris.date.ulabl ...

  2. k-means聚类算法从入门到精通

    k-means算法是非监督聚类最常用的一种方法,因其算法简单和很好的适用于大样本数据,广泛应用于不同领域,本文详细总结了k-means聚类算法原理 . 目录 1. k-means聚类算法原理 2. k ...

  3. 基于K-Means聚类算法的主颜色提取

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01.简介 本期我们将一起实现基于K-Means聚类算法的主色提取 ...

  4. K-means聚类算法和模糊C-means聚类算法

    K-means聚类算法和模糊C-means聚类算法 1.K-means聚类算法 K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数, ...

  5. 基于Kmeans聚类算法的图像分割(色彩分割)实战

    基于Kmeans聚类算法的图像分割(色彩分割)实战 图像分割是将一幅图像分割成多个像素区域的任务.属于同一对象类型的所有像素都被分配到同一类别下.图像分类是给一副完整的图像一个类别,目标检测是检测到图 ...

  6. 基于经典的机器学习k-means聚类算法实现对三通道图片的压缩操作

    https://www.toutiao.com/a6573221465104056846/ 压缩图片的原理 k-means算法实现图像的压缩是k-means聚类算法的一个经典的应用,它把一个彩色图压缩 ...

  7. K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

    原文:http://www.cnblogs.com/yixuan-xu/p/6272208.html K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means ...

  8. K-Means聚类算法进行压缩图片

    K-Means聚类算法(二):算法实现及其优化 清雨影 2 年前 (最近在车间干活的时候把手砸伤了,所以打字还是有点不便,大家原谅我更新的慢,加上赞比较少,心情比较低落TAT) 首先介绍一下题图,这个 ...

  9. 【数据挖掘】数据挖掘总结 ( K-Means 聚类算法 | 二维数据的 K-Means 聚类 ) ★

    文章目录 一. K-Means 聚类算法流程 二. 二维数据的 K-Means 聚类 1. 第一次迭代 2. 第二次迭代 参考博客 : [数据挖掘]聚类算法 简介 ( 基于划分的聚类方法 | 基于层次 ...

  10. 机器学习算法精讲20篇(一)-k-means聚类算法应用案例(附示例代码)

    前言 k-means算法是非监督聚类最常用的一种方法,因其算法简单和很好的适用于大样本数据,广泛应用于不同领域,本文详细总结了k-means聚类算法原理 . 以下是我为大家准备的几个精品专栏,喜欢的小 ...

最新文章

  1. sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
  2. 支持异构图、集成GraphGym,超好用的图神经网络库PyG更新2.0版本
  3. python字符串处理函数汇总_python字符串函数总结
  4. Android 功耗( 21 )---MTK 低功耗1
  5. html5新增表单控件和表单属性
  6. python \uxxxx转中文,Python列表中的字典 \uxxxx转中文,
  7. Selenium定位不到元素的解决方法—iframe挡住了去路
  8. Analysis-ik 中文分词安装
  9. 微服务注册中心为什么要使用Consul替代Eureka?
  10. 从随机数生成到随机采样的C++实现
  11. Atitit 财政支出学习心得 attilax总结
  12. 《软件项目管理案例教程》应考概念要点及重点整理
  13. j2CaChe在项目中的应用(二级缓存)
  14. 怎么把音乐WAV格式转换为MP3格式
  15. 轻松理解java前期绑定(静态绑定)与后期绑定(动态绑定) 的区别。
  16. 跨境电商国外消费者线上购物心理分析
  17. linux下好用的python编辑器_分享|Linux上几款好用的字幕编辑器
  18. 图像之超简单方式实现微信头像功能
  19. 计算机网络应用层(二):DNS协议详解
  20. tmux命令实现多窗口多终端-Linux命令

热门文章

  1. 计算机网络管理员基础知识,计算机网络管理员(基础知识)
  2. 学计算机电脑硬盘容量多大好,电脑系统盘应该分多大空间最合适,赶紧学习一下...
  3. win10任务栏透明_5 款 Windows 任务栏增强工具推荐
  4. ghost之后仍然中病毒----与病毒的斗争
  5. LM4990音频功放芯片
  6. Centos yum 包管理工具离线安装
  7. JJ斗地主记牌器java开发,【欢乐斗地主记牌器制作】遇到两个问题
  8. ios 监测网页按钮_关于iOS加载WebView监控网页上的点击事件
  9. window.performance(监控网页与程序性能)
  10. OpenGL二十面体及多次细分成球体