#-*- coding: utf-8 -*-
'''
# author: 影子
# datetime: 2021-05-18 12:10
# ide: PyCharm
target : 完成一个简单的KMeans聚类算法
'''
from numpy import *# 欧式距离函数
def Euclidean_Distance(vecA,vecB):return sqrt(sum(power(vecA-vecB,2)))# 随机设置k个质心
def Rand_Cent(DataSet,k):n = shape(DataSet)[1]     # 获取数据集的维度centroids = mat(zeros([k,n]))  # 初始化一个k行n列的二维数组,数组初始值全部为0,然后用mat函数将其转化为矩阵for j in range(n):minj = min(DataSet[:,j])rangej = float(max(DataSet[:,j])-minj)centroids[:,j] = mat(minj+rangej*random.rand(k,1)) # 随机生成一个范围在[min_j,max_j]的数据return centroids   # 返回k个初始质心# k-Means算法实现
def kMeans(DataSet,k,Dist=Euclidean_Distance,set_cent=Rand_Cent):''':param DataSet: 需要聚类的数据集:param k: 聚类数目:param Dist: 距离函数,此处调用了欧式距离函数:param set_cent: 初始质心函数,此处调用随机生成的质心函数:return: 质心点;数据对应的聚类簇'''m = shape(DataSet)[0]   # 获取样本个数centoids = set_cent(DataSet,k)  # 初始化质心clusterAssment = mat(zeros((m,2))) # 第一列存放每个样本的聚类簇,第二列存放对该样本到该聚类中心的距离clusterChanged = Truewhile clusterChanged:clusterChanged = Falsefor i in range(m):   # 遍历所有样本minDist = inf # 初始设定最小距离为无穷大minIdex = -1 # 初始设定样本聚类簇为 -1for j in range(k): # 对每个样本,计算到其他k个聚类中心的距离DistJI = Dist(centoids[j,:],DataSet[i,:])if minDist > DistJI:  # 该样本到最小距离的聚类中心记录下来,此样本记录为该簇minDist = DistJIminIdex = jif clusterAssment[i,0] != minIdex: # 判断样本所属簇是否更新,若更新则记为TrueclusterChanged = TrueclusterAssment[i,:]=minIdex,minDist # 将样本的聚类簇和到该聚类簇中心的距离记录下来for cent_i in range(k):cluster = DataSet[nonzero(clusterAssment[:,0].A==cent_i)[0]]'''clusterAssment[:,0]:记录每个样本的聚类簇clusterAssment[:,0].A:将其转化为行矩阵nonzero(clusterAssment[:,0].A==cent_i)[0]:获得元素为Ture的样本下标整句含义:获得数据集中聚类簇为cent_i的样本'''centoids[cent_i,:] = mean(cluster,axis=0) # 按行取均值return centoids,clusterAssment # 返回质心点;每个样本的(聚类簇+最短距离)# 画图
def show(DataSet,k,centroids,clusterAssment):from matplotlib import pyplot as pltm,n = DataSet.shapemark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr'] # 样本集的样式for i in range(m):markIdex = int(clusterAssment[i,0])plt.plot(DataSet[i,0],DataSet[i,1],mark[markIdex])mark= ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '<b', 'pb'] # 质点的样式for i in range(k):plt.plot(centroids[i,0],centroids[i,1],mark[i],markersize=20)plt.show()def main():DataSet = random.rand(100,2) # 随机生成100行2列的数据DataSet = mat(DataSet) # 转化为矩阵k=4 # 设置聚类簇myCentroids,clustAssing = kMeans(DataSet,k) # 调用kMeans算法print('聚类的质心为')print(myCentroids)show(DataSet,k,myCentroids,clustAssing)  # 画图if __name__ == '__main__':main()

Python实现聚类 KMeans算法相关推荐

  1. Python实现聚类K-means算法

    本文内容.数据参考周志华<机器学习>,代码部分为个人实现,如有错误还请指出. K-means(K均值)算法是最简单的一种聚类算法,它期望最小化平方误差 E=∑i=1k∑x∈Ci∣∣x−μi ...

  2. [转载] Python之使用K-Means算法聚类消费行为特征数据分析(异常点检测)

    参考链接: 在Python中使用K-Means聚类分析测试数据 源数据(这里仅展示10行): 程序: #-*- coding: utf-8 -*- #使用K-Means算法聚类消费行为特征数据 imp ...

  3. 典型聚类——K-means算法原理及python实战

    1 聚类算法简要介绍 1.1 聚类是什么        聚类是机器学习中的一种重要的无监督算法,可以将数据点归为一系列的特定组合.聚类算法可以将数据点聚成不同的类,揭示数据集中蕴含的不为人知的规律,从 ...

  4. 图片聚类——k-means算法的python实现

    1.前言 这篇文章是基于k-means算法进行图片聚类,而不是对单个图片的像素聚类,分别基于RGB.HSV和HOG特征进行聚类分析. 2.图片特征提取--RGB RGB为图片最基本的特征,但很多时候R ...

  5. Python之机器学习K-means算法实现

    一.前言: 今天在宿舍弄了一个下午的代码,总算还好,把这个东西算是熟悉了,还不算是力竭,只算是知道了怎么回事.今天就给大家分享一下我的代码.代码可以运行,运行的Python环境是Python3.6以上 ...

  6. 《大数据》第七章 聚类 K-means算法 BFR算法 CURE算法

    1.欧氏空间与非欧空间 在了解聚类之前我认为需要先了解欧氏空间与非欧空间的概念,因为在聚类的算法中会根据欧或者非欧有不同的解决方案. 1.1欧氏空间 引用看过的一篇文章中的一句话总结:欧几里得空间就是 ...

  7. 基于划分的聚类----K-means算法使用(R语言)

    library(amap)#这个包里有kmeans函数 library(R2SWF) library(animation)#导入包,后两个是作动画的包 customer <- read.csv( ...

  8. python手写kmeans算法

    kmean聚类是最基础和常见的算法,工程上使用比较常见,spark, sklearn都有实现,本文手写实现kmeans #!/usr/bin/python import sys import rand ...

  9. 基于Python爬虫和K-means算法的校园微博热点话题发现系统

    微博由于其"短平快"的信息生产能力和快速传播能力,已经广泛流行于高校学生的日常生活中.但微博上的负面舆情信息给社会.学校和个人带来巨大的危害.由于微博的多而快特点,无法依赖人工对相 ...

最新文章

  1. Enterprise Architect 中文经典教程
  2. 电脑启动顺序(以Windows XP为例)
  3. 语言相关系数显著性_相关性分析在SPSS中的具体操作,一文读懂相关系数的含义及使用——【杏花开生物医药统计】...
  4. 黑马程序员——集合框架(二)
  5. 【深度学习入门到精通系列】什么是消融实验(Ablation experiment)
  6. if( 1 == x ) 比 if( x == 1 ) 哪个好
  7. tensorflow英语怎么读_英语不行?你可以试试TensorFlow官方中文版教程
  8. java 和mysql 时间_java和mysql之间的时间日期类型传递
  9. Python中ndarray数组切片问题a[-n -x:-y]
  10. TurboFan的故事
  11. 工厂模式(简单、普通、抽象)
  12. python 采集系统_python—收集系统信息
  13. GIMP教程 4 图层
  14. 2021-10-21 FFmpeg截取视频第一帧
  15. Unity中Text中首行缩进两个字符和换行的代码
  16. 【线程状态、等待与唤醒、Lambda表达式、Stream流】
  17. 【python】【Gif制作】使用多张图片合成gif动图
  18. zeplin 登录效果实现
  19. 树上随机游走的期望距离
  20. 新手建站详细步骤(图文教程)

热门文章

  1. USB学习笔记连载(十五):USB固件更新以及安装驱动
  2. Tsung压力测试工具的搭建和使用,配置。
  3. Nginx如何配置静态文件过期时间
  4. 简析IP视频监控图像处理芯片介绍及应用
  5. nagios 163邮件报警
  6. 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching
  7. 利用级数求和推导泊松分布的期望方差
  8. 销售与顾客的PV同步算法
  9. [转]『TensorFlow』读书笔记_TFRecord学习
  10. 006 认识BeanNameAware