K-means方法及其应用

1.K-means聚类算法简介:

k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。主要处理过程包括:
1.随机选择k个点作为初始的聚类中心。
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇。
3.对每个簇,计算所有点的均值作为新的聚类中心。

4.重复2、3直到聚类中心不再发生改变。

举例:对于A、B、C、D、E这5个点,我们先随机选择两个点作为簇中心点,标记为红色和黄色,对于第一次聚类结果,我们分别计算所有的点到这两个中心点之间的聚类,我们发现A、B亮点离红色的点距离更近,、C、D、E三点离黄色的点距离更近,所以在第一次聚类过程中,这个簇被定义为:A、B为一个簇,C、D、E为一个簇,接下来,我们将A、B这个簇重新计算它的聚类中心,标记为一个更深颜色的红色的点,C、D、E重新计算他们的簇中心,为一个更深颜色的黄色的点,我们再重新计算这些所有点距离簇中心的距离,接下来我们可以发现,A、B、C可以聚为一个簇,而D、E相对于黄色的簇中心距离更近,所以D、E为一个簇,因此我们再重新计算一下A、B、C这个簇的簇中心和D、E的簇中心,第5张图我们就可以看到簇的组成已经相对稳定了,那么这5个点的聚类结果就是:A、B、C为一个簇,D、E为一个簇,红色和黄色的点分别为这两个簇的簇中心;演变过程如下:

2.K-means的应用

1.数据介绍:
  现有1999年全国31个省份城镇居民家庭平均每人全年消费性支出的八个主要变量数据,这8个变量分别是:食品、衣着、家庭设备用品及服务、医疗保健、交通和通讯、              娱乐教育文化服务、居住以及杂项商品和服务。利用已有数据,对31个省份进行聚类。

2.实验目的:
  通过聚类,了解1999年各个省份的消费水平在国内的情况。
3.技术路线:sklearn.cluster.Kmeans

4.数据实例展示:
1999年全国31个省份城镇居民家庭平均每人全年消费性支出数据,如下所示:

5.实验过程:
  1.使用算法:K-means聚类算法
  2.实现过程:
    1.建立工程,导入sklearn相关包
      import numpy as np
      from sklearn.cluster import KMeans
    2.加载数据,创建K-means算法实例,并进行训练,获得标签:

  注意:调用K-Means方法所需参数:
    1.n_clusters:用于指定聚类中心的个数
    2.init:初始聚类中心的初始化方法
    3.max_iter:最大的迭代次数
    4.一般调用时只用给出n_clusters即可,init默认是k-means++,max_iter默认是300。

  其它参数:
    1.data:加载的数据
    2.label:聚类后各数据所属的标签
    3.fit_predict():计算簇中心以及为簇分配序号
  重点方法解释:
    data,cityName = loadData('city.txt') #loadData()函数是我们自己定义的,具体代码为:

def loadData(filePath):fr = open(filePath,'r+')  #r+:读写方式打开一个文本文件lines = fr.readlines()retData = []retCityName = []for line in lines:items = line.strip().split(",")retCityName.append(items[0])retData.append(float(items[1]))for i in range(1,len(items)):return retData,retCityName

View Code

注意:loadData()函数中的readlines()方法一次性读取整个文件,类似于.read()

retCityName用于存储城市名称;

retData 用于存储城市的各项消费信息

返回值:返回城市名称以及该城市的各项消费信息

  展示的时候:

      

   3.输出标签,查看结果

    1.我们将城市按照消费水平n_clusters分为几个类,消费水平相近的城市聚集在一类中。
    2.expenses:聚类中心店的数值加和,也就是平均消费水平。

如下展示了:当n_clusters=2时,消费水平的聚类结果,聚成2类,我们可以看到其中一类是:北京、天津、上海、浙江、福建、广东、重庆、西藏为一个消费水平的;

 当n_clusters=3或者n_clusters=4的时候的聚类情况如下所示:

从这些结果中我们可以看出,消费水平相近的城市聚集在一个类中,而北京、上海、广东很稳定的一直聚集在了同一个类中!

如下,我们简单谈一下sklearn库中的k-means算法的拓展和改进;

3.拓展 && 改进

计算两条数据相似性时,Sklearn的K-Means默认用的是欧氏距离。虽然还有余弦相似度,马氏距离等多种方法,但sklearn中的k-means算法没有设定计算距离方法的参数。如果大家想要使用自定义计算距离的计算方法,那么我们可以更改k-means的源代码,在这里我们建议使用scipy.spatial.distance.cdist方法。

当设置metric="cosine"的时候,就相当于我们要使用余弦距离了,使用形式:scipy.spatial.distance.cdist(A,B,metric="cosine")

转载于:https://www.cnblogs.com/python-machine/p/6941371.html

4.无监督学习--K-means聚类相关推荐

  1. 机器学习之无监督学习-K均值聚类算法

    机器学习之无监督学习-K均值聚类算法 对于无监督学习,有两类重要的应用,一个是聚类,一个是降维.我们今天主要学习聚类中的K均值聚类. 我们先看看下图,图a为原始的数据点,我们想要对图a的数据点进行分类 ...

  2. 无监督学习——K均值聚类的Python实现

    目录 概要 一.K均值算法 二.K值的选取:手肘法 三.用聚类实现鸢尾花数据分类 四.应用案例 1. 读取数据 2. 绘制手肘图 3. 找到最佳K值 4. 分类结果可视化 机器学习类型和算法的分类 无 ...

  3. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

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

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

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

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

  6. 入门机器学习(十五)--无监督学习(K均值)

    1.无监督学习-简介(Unsupervised Learning-Introduction) 如下图所示是一个典型的监督学习,训练集中的每一个样本都有标签,我们需要根据标签来拟合一个假设函数. 什么是 ...

  7. 第1关:无监督学习的文本聚类

    1. 无监督学习的特点有: B. 不需要带标签的数据 D. 无法量化效果 2. 下列哪项是无监督学习的方法? C. 聚类 3. 常用的聚类方法有 A. KMeans D. DBSCAN 第2关:基于 ...

  8. 李宏毅(2020)作业9:无监督学习降维、聚类、自编码

    文章目录 数据集 作业 任务1 任务2 任务3 数据 下载数据集 准备训练数据 一些工具函数 模型 训练 降维和聚类 问题1(作图) 问题2 问题3 数据集 valX.npy valY.npy tra ...

  9. k means聚类算法_K-Means 聚类算法 20210108

    说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...

  10. 算法——机器学习——无监督学习—— K均值(K-means)图解动画

    快速排序 简介 算法过程 算法过程详解 一:聚类 二:聚类中心移动 算法结束 简介 k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预 ...

最新文章

  1. win10 动态磁盘 linux,win10系统动态磁盘改为基本磁盘的方法
  2. kepserver 6.5_非凡说| 先定一个6.5分小目标,财大生如何突破瓶颈拿下雅思!
  3. table row设置cell的html,css中display设置为table、table-row、table-cell后的作用及其注意点...
  4. java 值栈的结构_Struts2 | 深入浅出理解struts2中的值栈
  5. webpack3.0 压缩css 但是不在html中引用,webpack怎样压缩css?
  6. 关于支付回调的一些思考
  7. 能“社交”的机器人助理问世 可“察言观色”
  8. linux安装wineQQ
  9. 数据库(SQL)面试题,基础知识(超全面)
  10. mysql删除图书信息,图书管理系统(一):出版社列表增加、删除和编辑
  11. 电力行业工程设计资质怎么办?专业类别有哪些?
  12. 【干货分享】硬件测试工程师必备基本技能,看这一篇就够!
  13. tree是不是动词_【大年初五】暑假里必须复习的40个重点知识点,不看就亏大了!...
  14. python存储JSON
  15. Javascript中四舍六入五成双
  16. 常微分方程数值解——差商、欧拉公式详细推导及代码实现
  17. 【李刚-21天通关Python-27】之 案例实操:函数装饰器应用
  18. JavaScript数组,函数
  19. 伪类选择器的简单介绍
  20. 苹果官网镜像下载地址大全(含原版、引导版、ISO/CDR)

热门文章

  1. WPF 类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义。
  2. “Usage of API documented as @since 1.8+”
  3. hive中操作struct与map三例
  4. flink的TimeCharacteristic(转载)
  5. 一句话讲清楚GIL锁
  6. 大话数据结构11:队列 链表结构
  7. C++Primer模板
  8. 用java制作心理测试软件_0基础学习制作app
  9. 登录页面test记录
  10. Java虚拟机内存区域---学习笔记