k均值的损失函数_K-Means算法的实现
本篇文章是本人在看《机器学习实战》的代码注解笔记,修改了原作上的一些错误,经本人调试无误,如有任何问题,欢迎私信或者评论~
伪代码
创建k个起始质心
当任意点的簇分配改变时对数据集中的点对每个质心计算点到质心的距离记录距离最小值和簇号将数据点分配给距离最小的簇计算每个簇中的均值,作为下一次循环的质心
实现材料
- 三个数组(矩阵)
- 数据集 dataSet
- 质心集 centroids
- 评价集 clusterAssment --(簇索引,距离^2)
2. 标志位
- clusterChanged 一旦数据集中的点的簇分配发生改变,则继续循环优化质心
具体实现
def kMeans(dataSet, k, distMeans, createCent):# 初始化质心集和评价集centroids = createCent(dataSet, k)# m为点个数m = shape(dataSet)[0]# (点下标,距离)clusterAssment = mat(zeros(m, 2))# 标志位 判断点的簇分配是否改变clusterChanged = Truewhile clusterChanded:clusterChanged = False# 对于每个数据点for i in range(m):# 记录每个数据点的最小质心下标及其距离minDist = inf; minIndex = -1# 对于每个质心for j in range(k):# 计算点到质心的距离distIJ = distMeans(dataSet[i, :], centroids[j, :])# 记录最小距离及其簇号if distIJ < minDist:minDist = distIJ; minIndex = j# 判断此数据点的簇分配是否改变if clusterAssment[i, 0] != minIndex:clusterChanged = True# 更新簇分配结果clusterAssment[i, :] = minIndex, minDist ** 2# 打印本轮质心print(centroids)# 在本轮的k个簇中for cent in range(k):# 找到簇号为cent的数据点"""clusterAssment[:, 0] : 取评价集第0列所有数据clusterAssment[:, 0].A : 矩阵.A是把矩阵转换为数组numpyclusterAssment[:, 0].A == cent: 判断评价集中的点是否在cent号簇中 nonzero(): 返回哪些元素不是False或者0,[0]描述行,[1]描述列"""ptsInClust = dataSet[nonzeros(clusterAssment[:, 0].A == cent)[0]]# 算簇中所有距离的平均值"""mean(array, axis):axis: 0 —— 对各列求平均值,返回 1 * n矩阵1 —— 对各行求平均值,返回 m * 1矩阵"""centroids[cent, :] = mean(ptsInClust, axis=0)return centroids, clusterAssment
其他函数实现
1. 初始质点随机生成函数
def createCent(dataSet, k):"""param dataSet: 数据集param k: 需生成k个质点"""# 需要数据集的维度nn = shape(dataSet)[1]# 质点集k*n 注意是二阶矩阵所以是双层的括号centroids = mat(zeros((k, n)))# 生成数据集中每列最大最小之间的随机值for j in range(n):minJ = min(dataSet[:, j])rangeJ = float(max(dataSet[:, j] - minJ))centroids[:, j] = minJ + rangeJ * random()return centroids
2. 距离函数
def distMeans(vecA, vecB):return sqrt(sum(power(vecA - vecB, 2)))
3. 数据集文件读取
def loadDataSet(fileName):dataMat = []fr = open(fileName)for line in fr.readlines():curLine = line.strip().split('t')# python3 的map()返回iterator类型 需要转listfltLine = list(map(float, curLine))dataMat.append(fltLine)return dataMat
k均值的损失函数_K-Means算法的实现相关推荐
- k均值的损失函数_机器学习:手撕 cross-entropy 损失函数
1.前言 cross-entropy loss function 是在机器学习中比较常见的一种损失函数.在不同的深度学习框架中,均有相关的实现.但实现的细节有很多区别.本文尝试理解下 cross-en ...
- k均值的损失函数_一种基于均值不等式的Listwise损失函数
1 前言 1.1 Learning to Rank 简介 Learning to Rank (LTR) , 也被叫做排序学习, 是搜索中的重要技术, 其目的是根据候选文档和查询语句的相关性对候选文档进 ...
- 模糊C均值聚类算法的实现
模糊C均值聚类算法的实现 研究背景 聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类 图像处理和模糊规则处理等众多领域中获得最广泛的应用.它把一个没有类别标记的样本按照 ...
- k means算法C语言伪代码,K均值算法(K-Means)
1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...
- k均值聚类算法(K Means)及其实战案例
算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- LBG算法、Lloyd算法和K均值算法
---------------------------------LBG算法.Lloyd算法和K-Means算法--------------------------------- LBG算法是一种矢量 ...
- 复杂网络 介数中心性 java_复杂网络算法中K—shell与介数中心性算法的实现
! // 文章编号:1007-1423(2014)17-0007-05 DOI:10.3969~.issn.1007-1423.2014.17.002 复杂网络算法中K-shel与介数中心性算法的实现 ...
- sklearn机器学习:K均值聚类
K-Means 均值聚类聚类算法可以说是最简单但是使用最广的一种聚类算法了,原理也简单易懂,sklearn中提供了很多聚类算法的实现,所以这里就学习一下K-Means算法.接下来会介绍一些关键性的概念 ...
- 选择性模糊及其算法的实现。
选择性模糊及其算法的实现. 我们常见的模糊算法比如均值模糊.高斯模糊等其基本的过程都是计算一个像素周边的的某个领域内,相关像素的某个特征值的累加和及对应的权重,然后得到结果值.比如均值模糊的各像素的权 ...
最新文章
- 【译】在ASP.NET中创建PDF-iTextSharp起步
- DeepMind集成AI智能体架构「MERLIN」:基于目标导向智能体中的无监督预测记忆
- 使用Linux命令来发送信息
- ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
- 把字符串分隔成多行的多种方法实践
- Spring用户自定义类型
- Redis中的哨兵机制的不足
- Sitecore 个性化 - 近距离和过于个人化?
- 数据结构实验之二叉树五:层序遍历
- [转]Yii CModel.rules()方法
- 2008 r2 server sql 中文版补丁_SQL Server 2008 R2 补丁
- php这么把pdf转为world,php pdf如何转word
- [个人笔记] origin学习 入门教程
- 最新服务器主流硬盘,主流服务器的raid(磁盘阵列)配置
- oracle11g和toad,plsql、toad应用于oracle11g64位的方法
- MAC锁屏不断网(快捷键启用屏保)
- 向亲人、故乡和“本民族”致敬的写作
- 抖音创作规范_抖音作品在内容规划是应该要注意的一些问题分析
- 免费个人网站怎么建立?
- u盘启动android系统安装程序,怎么在U盘上运行Android x86系统