无监督学习中应用最多的就是聚类,其中k均值算法就是典型的聚类算法,下面是一段从文本中读取30数据,然后进行聚类的过程,包括输出读取的数据集、随机选择的K个初始均值向量、30行数据各自所属的类别以及最后的聚类中心,因为每次是随机选择K个初始均值向量,所以每次运行结果不一样的。

如果各位需要全部引用的话,请标注来源,具体的数据集需要的话,可以找我要。
import numpy as np
import math
# 读取文件
def load_dataset(file_name):data_list = []fr=open(file_name,encoding='utf-8-sig')lines = fr.readlines()for line in lines:pas_line = line.strip().split("\t")flt_line = list(map(eval, pas_line))data_list.append(flt_line)return np.array(data_list)
# 路径输入及函数调用后打印
data_set = load_dataset(r"F:\test\1.txt")
print(data_set)
# 计算两个向量之间的欧氏距离
def dist_eclud(vecA, vecB):vec_square = []for element in vecA - vecB:element = element ** 2vec_square.append(element)return sum(vec_square) ** 0.5# 构建k个随机质心
def rand_cent(data_set, k):n = data_set.shape[1]# n = data_set.shape 这时n的值为(30,2)即第0轴有30行,第1轴两列。所以要按照上面形式的话,n值为2centroids = np.zeros((k, n))for j in range(n):# 找每一列的最小值,对于此数据集是0.243和0.042min_j = float(min(data_set[:,j]))# print(min_j)# 找到数据集每一维的最小和最大值。然后得到每一维(每一列)的取值范围。# 用0到1之间的随机数和取值范围相乘,再用最小值加上该乘积,就可以得到在每一维取值范围内的随机数。range_j = float(max(data_set[:,j])) - min_j# print(range_j)即0.531和0.447,np.random.rand(k, 1))生成3*1的数组centroids[:,j] = (min_j + range_j * np.random.rand(k, 1))[:,0]# print(np.random.rand(k, 1))# print( np.random.rand(k, 1)[:,0])print("随机选择的初始均值向量为:\n",centroids)return centroidsdef Kmeans(data_set, k):# m值为30m = data_set.shape[0]# 初始化为30*2的全为0的数组,注意里面是元组cluster_assment = np.zeros((m, 2))# 调用后找到了随机的初始均值向量centroids = rand_cent(data_set, k)cluster_changed = Truewhile cluster_changed:cluster_changed = False# 从0到29的有序序列依次取出元素赋给ifor i in range(m):min_dist = np.inf; min_index = -1# print(min_dist)# 初始均值向量就k个,即3个for j in range(k):# 初始均值向量数组中取出每行两列元素与数据集中的所有行两列的元素计算距离dist_ji = dist_eclud(centroids[j,:], data_set[i,:])# 如果距离最小则标上当时的均值向量的行标记if dist_ji < min_dist:min_dist = dist_ji; min_index = jif cluster_assment[i,0] != min_index:cluster_changed = True# 所属类以及欧氏距离平方cluster_assment[i,:] = min_index, min_dist**2# 计算新均值向量for cent in range(k):# 这是在求每次分别属于某个类别的数据,然后再以此为基础计算新的均值向量pts_inclust = data_set[np.nonzero(list(map(lambda x:x==cent, cluster_assment[:,0])))]# print(pts_inclust)# 按列求平均值,即新的均值向量centroids[cent,:] = np.mean(pts_inclust, axis=0)return centroids, cluster_assment
# 首先初始化样本点的簇分配矩阵(cluster_assment),有30行2列,第一列为该样本点的簇分配索引,第二列为该样本点到该簇质心的欧氏距离。
# 当任意一个点的簇分配发生变化时,迭代执行以下操作:遍历每个样本点,计算样本点i到各个质心的距离,找到最小距离,
# 将该质心所在簇编号分配给该样本点。遍历完所有样本点后,重新计算每个簇的质心。直到所有样本点的簇分配都不再发生变化时迭代停止。
# 最后返回质心和样本点的簇分配矩阵
my_centroids, my_cluster = Kmeans(data_set, 3)
print("30行数据各自所属类别为:\n",my_cluster[:,0])
print("聚类中心为:\n",my_centroids)

k均值算法——python实现相关推荐

  1. k均值算法python实现(吴恩达机器学习作业)

    k均值算法python实现(吴恩达机器学习作业) 题目要求 数据集 读取mat文件 K-means 实现 结果 问题 题目要求 采用K均值算法对样本进行聚类. 编写K均值算法源代码,对ex7data2 ...

  2. python实现k均值算法_python实现kMeans算法

    聚类是一种无监督的学习,将相似的对象放到同一簇中,有点像是全自动分类,簇内的对象越相似,簇间的对象差别越大,则聚类效果越好. 1.k均值聚类算法 k均值聚类将数据分为k个簇,每个簇通过其质心,即簇中所 ...

  3. python图片压缩算法_使用K均值算法进行图片压缩

    K均值算法 上一期介绍了机器学习中的监督式学习,并用了离散回归与神经网络模型算法来解决手写数字的识别问题.今天我们介绍一种机器学习中的非监督式学习算法--K均值算法. 所谓非监督式学习,是一种与监督式 ...

  4. k-modes算法mysql_第十一章 K-Means(K均值)算法模型实现(中)

    python2 代码实现: from numpy import * import numpy def loadDataSet(fileName): #general function to parse ...

  5. k均值算法 二分k均值算法_如何获得K均值算法面试问题

    k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...

  6. k均值算法 二分k均值算法_使用K均值对加勒比珊瑚礁进行分类

    k均值算法 二分k均值算法 Have you ever seen a Caribbean reef? Well if you haven't, prepare yourself. 您见过加勒比礁吗? ...

  7. K均值算法【K-means】

    一.K-Means算法流程 K均值算法是学习无监督学习的第一个算法,这个算法理解和实现都比较简单,算法的目的是将数据分成K组. 为了达到这个目的,算法首先随机初始化k个数据点(聚类中心),然后遍历所有 ...

  8. K 均值算法-如何让数据自动分组

    公号:码农充电站pro 主页:https://codeshellme.github.io 目录 1,K 均值算法 2,K 均值算法聚类过程 3,K 均值算法的实现 4,准备数据点 5,对数据聚类 6, ...

  9. (学习笔记)聚类算法 - k均值算法(k-means)

    聚类之K均值算法 聚类介绍 k均值算法步骤 Python实现 参考文献 聚类介绍 聚类是一种经典的无监督学习方法. 聚类的目的是将数据集中的样本划分为若干个通常是不相交的子集,每个子集被称为簇,以此来 ...

  10. 一句话总结K均值算法

    一句话总结K均值算法 核心:把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定. k均值算法是一种无监督的聚类算法.算法将每个样本分配到离它最近的那个类中心所代表的类,而类中心的确 ...

最新文章

  1. 推荐6个HTML5编辑器
  2. echart freemarker 模板_SpringBoot集成Freemarker模板生成Echarts图片(三)
  3. time和datatime模块
  4. java3d翻转纪念相册_HTML5 3D旋转相册的实现示例
  5. fwoa中workflow_requestbase表currentnodetype字段含义及查看归档流程的requestid
  6. TODO C++ 异常处理
  7. kafka中的数据发送保障
  8. GoogleNet家族
  9. 青春是一场永志的劫数
  10. iOS开发 调用系统的震动和提示音
  11. Java-Thread-Affinity框架使用及原理分析
  12. 防控青光眼的3大武器
  13. 用火狐浏览器看b站视频默认没有声音
  14. Python安装教程和Pycham教程
  15. python中模拟浏览器抓取网页(-)
  16. python 文件缓存
  17. 2016区域赛前冲刺训练
  18. JavaScript 页面资源加载方法onload,onerror总结
  19. 与门、或门、非门、与非门、或非门、异或门、同或门
  20. VB6基本数据库应用(十):【增补篇】游标Cursor和锁Lock简介

热门文章

  1. QuantLib教程(三)BS模型、二叉树模型与欧式期权定价
  2. python视频操作:下载、选取特定帧、批量导入ppt及硬字幕提取
  3. 万能收钱码-多合一收款二维码原理及源码-支持支付宝、微信、QQ
  4. 2021图像检索综述
  5. 星绞计算机电缆,永安市铠装计算机电缆DJYJP3V22截面图
  6. 计算机终端维护组织结构,信息部组织架构及人员编制 Manning GuideOrganization Chart...
  7. 毕业论文 | 文献综述应该怎么写
  8. OSI常用网络协议(七层)
  9. postman脚本文件存放的地址
  10. 2021年上半年软件设计师上午真题及答案解析