当前位置: 首页 > news >正文

清华《数据挖掘算法与应用》K-means聚类算法

使用k均值聚类算法对表4.1中的数据进行聚类。代码参考P281。

创建一个名为 testSet.txt 的文本文件,将以下内容复制粘贴进去保存即可:

0	0
1	2
3	1
8	8
9	10
10	7

4.1

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 17 16:59:58 2025@author: 破无差
"""
import matplotlib.pyplot as plt
import numpy as npdef loadDataSet(fileName):dataMat = []fr = open(fileName)for line in fr.readlines():curLine = line.strip().split('\t')fitLine = list(map(float, curLine))dataMat.append(fitLine)return dataMatdef distEclud(vecA, vecB):return np.sqrt(np.sum(np.power(vecA - vecB, 2)))def randCent(dataSet, k):n = np.shape(dataSet)[1]centroids = np.mat(np.zeros((k, n)))for j in range(n):minJ = np.min(dataSet[:, j])maxJ = np.max(dataSet[:, j])rangeJ = float(maxJ - minJ)centroids[:, j] = minJ + rangeJ * np.random.rand(k, 1)return centroidsdef kMeans(dataSet, k, distMeas=distEclud, createCent=randCent):m = np.shape(dataSet)[0]clusterAssment = np.mat(np.zeros((m, 2)))centroids = createCent(dataSet, k)clusterChanged = Truewhile clusterChanged:clusterChanged = Falsefor i in range(m):minDist = float('inf')minIndex = -1for j in range(k):distJI = distMeas(centroids[j, :], dataSet[i, :])if distJI < minDist:minDist = distJIminIndex = jif clusterAssment[i, 0] != minIndex:clusterChanged = TrueclusterAssment[i, :] = minIndex, minDist ** 2for cent in range(k):ptsInClust = dataSet[np.nonzero(clusterAssment[:, 0].A == cent)[0]]centroids[cent, :] = np.mean(ptsInClust, axis=0)return centroids, clusterAssmentdef plotDataSet(filename):datMat = np.mat(loadDataSet(filename))myCentroids, clustAssing = kMeans(datMat, 4)clustAssing = clustAssing.tolist()myCentroids = myCentroids.tolist()xcord = [[], [], [], []]ycord = [[], [], [], []]datMat = datMat.tolist()m = len(clustAssing)for i in range(m):if int(clustAssing[i][0]) == 0:xcord[0].append(datMat[i][0])ycord[0].append(datMat[i][1])elif int(clustAssing[i][0]) == 1:xcord[1].append(datMat[i][0])ycord[1].append(datMat[i][1])elif int(clustAssing[i][0]) == 2:xcord[2].append(datMat[i][0])ycord[2].append(datMat[i][1])elif int(clustAssing[i][0]) == 3:xcord[3].append(datMat[i][0])ycord[3].append(datMat[i][1])fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord[0], ycord[0], s=20, c='b', marker='*', alpha=.5)ax.scatter(xcord[1], ycord[1], s=20, c='r', marker='D', alpha=.5)ax.scatter(xcord[2], ycord[2], s=20, c='c', marker='>', alpha=.5)ax.scatter(xcord[3], ycord[3], s=20, c='k', marker='o', alpha=.5)ax.scatter(myCentroids[0][0], myCentroids[0][1], s=100, c='k', marker='+')ax.scatter(myCentroids[1][0], myCentroids[1][1], s=100, c='k', marker='+')ax.scatter(myCentroids[2][0], myCentroids[2][1], s=100, c='k', marker='+')ax.scatter(myCentroids[3][0], myCentroids[3][1], s=100, c='k', marker='+')ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_title('DataSet')plt.show()if __name__ == '__main__':
plotDataSet('testSet.txt')

声明:文章仅供学习使用。著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

运行结果:

http://www.xdnf.cn/news/33013.html

相关文章:

  • 考研408操作系统文件管理——4.2目录系统详解
  • Java PrintStream 类深度解析
  • QT聊天项目DAY06
  • 什么是事件循环
  • 2025年渗透测试面试题总结-拷打题库05(题目+回答)
  • 大学第一次笔记本清灰
  • Zephyr、FreeRTOS、RT-Thread 邮箱(Mailbox)对比分析
  • 【信息系统项目管理师】高分论文:论信息系统项目的采购管理(“营业工单系统”项目)
  • MySql Innodb详细解读
  • 【预告】【k8s系列6】RKE搭建Kubernetes集群
  • Codeforces Educational Round 177 Div. 2 【B题,C待补
  • Elasticsearch:使用 ES|QL 进行搜索和过滤
  • 嵌入式linux系统中内存管理的方法与实现
  • EKF公式推导
  • 工业级向量检索核心技术:IVF-PQ原理与全流程解析
  • [Android] 豆包爱学v4.5.0小学到研究生 题目Ai解析
  • 【IaaS自动化运维】Ansible与Terraform集成
  • 【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(16):ReactExecutor
  • 【重学Android】02.Java环境配置的一些分享
  • 高精度算法(加、减、乘、除、阶乘和)​
  • QML Rectangle 组件
  • 直线轴承常规分类知多少?
  • 洛谷P1177【模板】排序:十种排序算法全解(1)
  • Keil A51汇编伪指令
  • 【机器学习】朴素贝叶斯算法:原理剖析与实战应用
  • Java学习手册:Web 应用架构概述
  • 卷积神经网络(CNN)详解
  • 【嵌入式】——Linux系统远程操作和程序编译
  • 前端面试真题集合(一)
  • Python语法系列博客 · 第9期[特殊字符] 函数参数进阶:*args、**kwargs 与参数解包技巧