K-means的python实现
2017-09-21 12:29
399 查看
环境:win7 64位 python3.5
import numpy as np import matplotlib.pyplot as plt # 加载数据 def loadDataSet(fileName): data = np.loadtxt(fileName,delimiter='\t') return data # 欧氏距离计算 def distEclud(x,y): return np.sqrt(np.sum((x-y)**2)) # 计算欧氏距离 # 为给定数据集构建一个包含K个随机质心的集合 def randCent(dataSet,k): m,n = dataSet.shape centroids = np.zeros((k,n)) for i in range(k): index = int(np.random.uniform(0,m)) # centroids[i,:] = dataSet[index,:] return centroids # k均值聚类 def KMeans(dataSet,k): m = np.shape(dataSet)[0] #行的数目 # 第一列存样本属于哪一簇 # 第二列存样本的到簇的中心点的误差 clusterAssment = np.mat(np.zeros((m,2))) clusterChange = True # 第1步 初始化centroids centroids = randCent(dataSet,k) while clusterChange: clusterChange = False # 遍历所有的样本(行数) for i in range(m): minDist = 100000.0 minIndex = -1 # 遍历所有的质心 #第2步 找出最近的质心 for j in range(k): # 计算该样本到质心的欧式距离 distance = distEclud(centroids[j,:],dataSet[i,:]) if distance < minDist: minDist = distance minIndex = j # 第 3 步:更新每一行样本所属的簇 if clusterAssment[i,0] != minIndex: clusterChange = True clusterAssment[i,:] = minIndex,minDist**2 #第 4 步:更新质心 for j in range(k): pointsInCluster = dataSet[np.nonzero(clusterAssment[:,0].A == j)[0]] # 获取簇类所有的点 centroids[j,:] = np.mean(pointsInCluster,axis=0) # 对矩阵的行求均值 print("Congratulations,cluster complete!") return centroids,clusterAssment def showCluster(dataSet,k,centroids,clusterAssment): m,n = dataSet.shape if n != 2: print("数据不是二维的") return 1 mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr'] if k > len(mark): print("k值太大了") return 1 # 绘制所有的样本 for i in range(m): markIndex = int(clusterAssment[i,0]) plt.plot(dataSet[i,0],dataSet[i,1],mark[markIndex]) 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]) plt.show()
# 测试代码 import numpy as np import matplotlib.pyplot as plt dataSet = loadDataSet("C:\\machinelearninginaction\\Ch10\\testSet.txt") k = 4 centroids,clusterAssment = KMeans(dataSet,k) showCluster(dataSet,k,centroids,clusterAssment)
Congratulations,cluster complete!
相关文章推荐
- python实现 模糊C均值聚类算法(Fuzzy-C-Means)-基于iris数据集
- K-means聚类 的 Python 实现
- k-means+python︱scikit-learn中的KMeans聚类实现( + MiniBatchKMeans)
- 【机器学习算法-python实现】K-means无监督学习实现分类
- 基于python3的k-means代码实现
- kmeans python实现
- K-means和PAM聚类算法Python实现及对比
- Fuzzy C Means 算法及其 Python 实现——写得很清楚,见原文
- 二分K-means的python实现
- kmeans++ Python 实现
- Clustering (1): k-means(Python实现)
- k-means+python︱scikit-learn中的KMeans聚类实现( + MiniBatchKMeans)
- Kmeans 算法理论和Python实现(一)——简单K-Means实现
- python kmeans聚类简单介绍和实现代码
- python 实现周志华 机器学习书中 k-means 算法
- K-means的Python实现
- [python] 基于k-means和tfidf的文本聚类代码简单实现
- 聚类之均值聚类(k-means)算法的python实现
- 机器学习:Python实现聚类算法(一)之K-Means
- [置顶] 聚类之均值聚类(k-means)算法的python实现