K-均值聚类算法
来源:互联网 发布:js中sleep怎么使用 编辑:程序博客网 时间:2024/05/16 17:47
from numpy import *#创建元组dataSet = []#与我们所熟悉的矩阵类似,最终我们将获得N*2的矩阵,fileIn = open("/home/zengxl/PycharmProjects/test3/机器学习实战代码/Ch10/testSet.txt") #是正斜杠for line in fileIn.readlines(): temp=[] lineArr = line.strip().split('\t') #line.strip()把末尾的'\n'去掉 temp.append(float(lineArr[0])) temp.append(float(lineArr[1])) dataSet.append(temp) #dataSet.append([float(lineArr[0]), float(lineArr[1])])#上面的三条语句可以有这条语句代替fileIn.close()dataSet = mat(dataSet) #mat()函数是Numpy中的库函数,将数组转化为矩阵#函数euclDistance()计算两个向量的欧式距离def euclDistance(vector1, vector2): return sqrt(sum(power(vector2 - vector1, 2))) #使用了sqrt。#在样本集中随机选取k个样本点作为初始质心def initCentroids(dataSet, k): numSamples, dim = dataSet.shape #矩阵的行数、列数 centroids = mat(zeros((k, dim))) #mat函数创建k行n列的矩阵,centroids存放簇中心 for i in range(k): index = int(random.uniform(0, numSamples)) #uniform()随机生成一个[x, y)范围内实数,然后将其转化为int型 centroids[i, :] = dataSet[index, :] return centroids#k为将dataSet矩阵中的样本分成k个类,数据集及簇的数目是必选参数。def kmeans(dataSet, k): numSamples = dataSet.shape[0] #读取矩阵dataSet的第一维度的长度,即获得有多少个样本数据 # clusterAssment创建一个m行2列的矩阵,第一列存放索引值,第二列存放误差,误差用来评价聚类效果 clusterAssment = mat(zeros((numSamples, 2))) #得到一个N*2的零矩阵 #标志变量clusterChanged,如果该值为True,则继续迭代。 clusterChanged = True ## step 1: init centroids centroids = initCentroids(dataSet, k) #样本集中随机选取k个样本点作为初始质心 while clusterChanged: clusterChanged = False ## for each sample for i in range(numSamples): #range minDist = 100000.0#或者inf为正无穷大 minIndex = 0 #创建索引 #计算每个样本点与质点之间的距离,将其归内到距离最小的那一簇 for j in range(k): # 寻找最近的质心 distance = euclDistance(centroids[j, :], dataSet[i, :])#计算每个点到质心的欧氏距离 if distance < minDist: minDist = distance minIndex = j #如果任一点的簇分配结果发生改变,则更新clusterChanged标志。 if clusterAssment[i, 0] != minIndex: clusterChanged = True clusterAssment[i, :] = minIndex, minDist**2 #两个**表示的是minDist的平方 ## 更新质心的位置 for j in range(k): #clusterAssment[:,0].A==j是找出矩阵clusterAssment中第一列元素中等于j的行的下标,返回的是一个以array的列表,第一个array为等于j的下标 pointsInCluster = dataSet[nonzero(clusterAssment[:, 0].A == j)[0]] #将dataSet矩阵中相对应的样本提取出来 centroids[j, :] = mean(pointsInCluster, axis = 0) #计算标注为j的所有样本的平均值 print ('Congratulations, cluster complete!') return centroids, clusterAssmentmyCentroids, clustAssing = kmeans(dataSet, 4)print("myCentroids:", myCentroids)print("clustAssing", clustAssing)
阅读全文
0 0
- K-均值聚类算法
- K均值聚类算法
- K-均值聚类算法
- 聚类算法:K均值
- K-均值聚类算法
- K-均值聚类算法
- k均值聚类算法
- k均值聚类算法
- K-均值聚类算法
- k均值聚类算法
- K-均值聚类算法
- K均值(K-means)聚类算法
- K-均值聚类算法(K-means)
- K-均值聚类算法(K-mean)
- K均值聚类算法(K-Means)
- 聚类算法:k均值(k-means)
- K-means(K-均值)聚类算法
- K-均值聚类算法(K-means algorithm) & 二分K-均值算法(Bisecting k-means algorithm)
- Java NIO 详解(概念)
- 查看ORACLE 数据库及表信息
- npm 有时候无法下载或者安装的问题解决办法(nodejs)
- 英语四级常考100个短语
- C++调用C#的DLL实现方法
- K-均值聚类算法
- 分布式消息中间件RocketMQ学习教程①
- 【LeetCode】C# 109、Convert Sorted List to Binary Search Tree
- 查看glibc版本
- PHP中使用curl及代理IP模拟post提交【两种实用方法】
- 聊聊C#反射概念(一)
- moviepy初体验
- Java
- 移动端左右滑动阻止触发上一页下一页操作