机器学习实战一书 kMeans 代码
伪代码:

创建k个点作为起始聚类中心
当任意一个点的簇分配结果发生改变时对数据集中的每个数据点对每个聚类中心计算当前聚类中心与数据点之间的距离将数据点分配到最近距离的中心点簇对每一个簇,计算簇中所有点的均值作为中心点

数据

import matplotlib.pyplot as plt
import numpy as np
datMat = np.random.random((100, 2))

距离函数

def distEclud(vecA, vecB):return np.sqrt(np.sum(np.power(vecA - vecB, 2)))

#初始聚类中心
聚类中心坐标范围应为数据样本的最小值到最大值之间

def randCent(dataSet, k):# 得到数据样本的维度,即列数n = np.shape(dataSet)[1]# 初始化为一个(k,n)的全零矩阵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)# k个质心向量的第j维数据值随机为位于(最小值,最大值)内的某一值# Create an array of the given shape and populate it with random samples from a uniform distribution over [0, 1).centroids[:, j] = minJ + rangeJ * np.random.rand(k, 1)# 返回初始化得到的k个质心向量return centroids

聚类算法实现

def kMeans(dataSet, k, distMeas=distEclud, createCent=randCent):# 获取数据集样本数m = np.shape(dataSet)[0]# 初始化一个(m,2)全零矩阵clusterAssment = np.mat(np.zeros((m, 2)))#用于存储每个样本的类别,和到聚类中心的最小距离# 创建初始的k个质心向量初始聚类中心centroids = createCent(dataSet, k)# 聚类结果是否发生变化的布尔类型clusterChanged = True# 只要聚类结果一直发生变化,就一直执行聚类算法,直至所有数据点聚类结果不发生变化while clusterChanged:# 聚类结果变化布尔类型置为FalseclusterChanged = False# 遍历数据集每一个样本向量for i in range(m):# 初始化最小距离为正无穷,最小距离对应的索引为-1minDist = float('inf')minIndex = -1# 循环k个类的质心for j in range(k):# 计算数据点到质心的欧氏距离distJI = distMeas(centroids[j, :], dataSet[i, :])# 如果距离小于当前最小距离if distJI < minDist:# 当前距离为最小距离,最小距离对应索引应为j(第j个类)minDist = distJIminIndex = j# 当前聚类结果中第i个样本的聚类结果发生变化:布尔值置为True,继续聚类算法clusterAssment存储的是类别和距离,如果后来的类别和先一轮得到的类别不一样,则执行if clusterAssment[i, 0] != minIndex:clusterChanged = True# 更新当前变化样本的聚类结果和平方误差clusterAssment[i, :] = minIndex, minDist ** 2# 遍历每一个质心for cent in range(k):# 将数据集中所有属于当前质心类的样本通过条件过滤筛选出来ptsInClust = dataSet[np.nonzero(clusterAssment[:, 0].A == cent)[0]]# 计算这些数据的均值(axis=0:求列均值),作为该类质心向量centroids[cent, :] = np.mean(ptsInClust, axis=0)# 返回k个聚类,聚类结果及误差return centroids, clusterAssment

#结果绘图


def plotData():# 导入数据datMat = np.random.random((100, 2))# 进行k-means算法其中k为3myCentroids, clustAssing = kMeans(datMat, 3)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])fig = plt.figure()ax = fig.add_subplot(111)# 绘制样本点ax.scatter(xcord[0], ycord[0], s=30, c='b', marker='*', alpha=.5)ax.scatter(xcord[1], ycord[1], s=30, c='r', marker='D', alpha=.5)ax.scatter(xcord[2], ycord[2], s=30, c='c', marker='>', alpha=.5)# 绘制质心ax.scatter(myCentroids[0][0], myCentroids[0][1], s=100, c='k', marker='+', alpha=.5)ax.scatter(myCentroids[1][0], myCentroids[1][1], s=100, c='k', marker='+', alpha=.5)ax.scatter(myCentroids[2][0], myCentroids[2][1], s=100, c='k', marker='+', alpha=.5)plt.title('shuju kmeans')plt.xlabel('X')plt.show()if __name__ == '__main__':plotData()

kmean python实现相关推荐

  1. 2018-3-10 kKNN与K-mean的区别以及各自的Python代码(别人写的好的文章)

    看了百度中的内容觉得他们之间并没有任何实质性的联系,之所以自己写下来,单纯的知识自己对单词的不了解,总是会觉的他们两个是一个概念 但是发现并不是那么简单的 好的Blog KNN与K-Means的区别 ...

  2. python数据分析可视化实例_Python数据分析及可视化实例之基于Kmean分析RFM进行用户关怀...

    系列文章总目录:Python数据分析及可视化实例目录 数据集下载 Python数据分析及可视化实例之全国各城市房价分析(含数据采集) Python数据分析及可视化实例之帝都房价预测 Python数据分 ...

  3. Kmean聚类算法原理python实现

    Kmean聚类算法原理python实现 Kmean聚类算法是基于距离对对象进行分类的算法,该算法实现步骤如下: 1.确定初始数据簇质心,质心的数量与需要分的类的数量一致: 2.将数据集中的每一个对象与 ...

  4. python聚类分析sklearn_如何使用sklearn k-mean对数据进行聚类分析?

    # -*- coding: utf-8 -*- from sklearn.cluster import KMeans from sklearn.externals import joblib impo ...

  5. python实现kmean算法_K-means聚类算法的Python实现,Kmeans

    这是I/O 以下是代码: import matplotlib.pyplot as plt import pandas as pd import numpy as np def findDistance ...

  6. python kmean 多维_绘制多维Kmeans集群NLP python

    我有一个为NLP分类器设计的多维向量.在 以下是数据帧(文本框): 我使用TfidVectorizer创建向量:from sklearn.feature_extraction.text import ...

  7. python kmean 多维_如何使用KMeans对多维和未知数据进行聚类?

    @Nael Alsaleh,你可以用下面的方法运行K-Means:from sklearn.cluster import KMeans import numpy as np import matplo ...

  8. python 博弈论 库_SHAP:Python的可解释机器学习库

    SHAP介绍 可解释机器学习在这几年慢慢成为了机器学习的重要研究方向.作为数据科学家需要防止模型存在偏见,且帮助决策者理解如何正确地使用我们的模型.越是严苛的场景,越需要模型提供证明它们是如何运作且避 ...

  9. 自学python推荐书籍同时找哪些来实践-机器学习:Python实践 PDF 原书完整版

    给大家带来的一篇关于人工智能相关的电子书资源,介绍了关于机器学习.Python实践方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小124.7 MB,魏贞原编写,目前豆瓣.亚马逊.当当.京 ...

最新文章

  1. 循环神经网络(RNN)简介
  2. VTK:图片之ImageMathematics
  3. 数据库大战,AWS又将目标瞄准了微软SQL Server
  4. 常用公有云接入——腾讯
  5. int默认值为0,Integer默认值为null
  6. 【iPhone X重磅发布】携A11人工智能芯片登场,人脸识别9大特征
  7. 【干货】2021中国“企服企业”规模化获客体系建设指南.pdf(附下载链接)
  8. 比特币 出块速度多少 为什么每秒7笔 以太坊15TPS
  9. springboot+poi导出excel
  10. ACDSee将捆绑雅虎助手,广大ACDSee用户有难了
  11. 基于STM32F103——SIM900A发送短信+串口打印
  12. echarts地图迁徙图
  13. 【Windows】安装win10虚拟机
  14. FPGA经典设计思想
  15. 【服务器管理之远程桌面】
  16. PHP 接入微信公众账号API
  17. 夏天想美美的出门?店湾妹的“明星穿搭教科书”,很美有木有?
  18. java软件更换皮肤怎么做_java窗体程序更换皮肤方法详细步骤
  19. 摄影构图学83年绝版_学摄影练实操 2020年昆明市统战系统宣传工作业务培训班继续进行...
  20. NKOJ C2153「迎新春,贺新年,LJ24祝大家新年快乐」赛后总结帖by TangH

热门文章

  1. python画海绵宝宝_脑洞大开的万圣节,10招带你和宝宝花式玩南瓜
  2. 清单文件中android support,Android FileProvider 配置
  3. 牛客题霸 NC21 链表内指定区间反转
  4. Visual Studio 2019 + Visual C++——创建Visual C++ Hello World! 程序
  5. BugKuCTF 加密 这不是摩斯密码
  6. Mother's Day
  7. Training little cats
  8. Java 的插件框架 PF4J
  9. Android 断点续传实现原理
  10. SpringBoot 2.x 监控中心:Admin