一、K均值算法

1、引入

  • 如上图a所示,所有的绿色点为数据,从人的主观肉眼上明显看出,该数据分为两类,上面为一类,下面为一类。但是计算机并不知道,那计算机是怎么分类的呢?
  • 图b所示,计算机随机生成两个质心点(一般情况下计算机会从已有的原数据中选择质心点,而不是随机生成新的质心点),一个红色一个蓝色。
  • 图c所示,计算机会根据每个点的坐标,去计算这些数据距离哪一个质心点距离最近,就把它分到哪一类中,c图所示,将数据一部分分为蓝色类,一部分分为红色类。
  • 接下来会更新质心点(质心点更新:将之前分好类的数据按照类求均值,得到每个类的新质心点),如图d所示,计算机会重新选择两个质心点,再重新计算每个数据到质心点之间的距离
  • 将数据进一步分类,哪个数据距离哪个质心点最近,就分到哪一类当中,如图e所示。
  • 再更新一次质心点,如图f所示,使得质心点在每一分类中靠近中心。最终得到两个分类
  • 总结:聚类K均值算法思想和KNN算法相似,距离哪个质心点近就分到哪一类,同时对分好类的数据求均值,得到新的质心点,完成最终的分类。

2、K均值

  • k均值(k-means)是聚类算法中最为简单、高效的、属于无监督学习算法
  • 核心思想:由用户指定k个初始质心(inital centroids),以作为聚类的类别(cluster),重复迭代直至算法收敛
  • 基本算法流程
    1、选取K个初始质心(作为初始cluster)
    2、repeat:
    (1) 对每一个样本点,计算得到距离其最近质心,将其类别标为该质心所对应的cluter
    (2)重新计算k个cluster对应的质心
    3、直到l质心不再发生变化或者迭代达到上限

3、代码案例

import numpy as np
import matplotlib.pyplot as plt
#引入scipy中的距离函数,默认欧式距离
from scipy.spatial.distance import cdist
#从sklearn中直接生成聚类数据
from sklearn.datasets._samples_generator import make_blobsif __name__ == '__main__':#数据加载# n_samples:表示数据个数# centers:表示质心点个数,也是分类的个数# random_state:随机种子,随机生成的数据为同一个数据# cluster_std:质心点随机分布时,偏差值为多少# x:表示数据集(坐标),y:表示类别,属于哪一类x,y = make_blobs(n_samples=100,centers=6,random_state=1024,cluster_std=0.6)#因为数据集x是一个二维数组,第一列为点的x坐标,第二列为y坐标#建立散点图,c表示颜色,c=y表示,由多少分类就由多少种颜色plt.scatter(x[:,0],x[:,1],c=y)plt.show()
  • 散点图展示
#算法k-means实现class K_Means(object):#初始化,参数n_clusters(K)、迭代次数max_iter、初始质心centroidsdef __init__(self,n_clusters=6,max_iter=300,centroids=[]):self.n_clusters = n_clustersself.max_iter = max_iterself.centroids = np.array(centroids,dtype=np.float)#训练模型方法,k-means聚类过程,传入原始数据def fit(self,data):#假如没有指定初始质心,就随机选取data中的点作为初始质心if(self.centroids.shape==(0,)):#从data中随机生成0到data行的6个整数,作为索引值self.centroids = data[np.random.randint(0,data.shape[0],self.n_clusters),:]#开始迭代for i in range(self.max_iter):#1、计算距离矩阵,得到一个100*6的矩阵distance = cdist(data,self.centroids)#2、对距离按照从今到远排序,选取最近的质心点的类别,作为当前点的分类c_ind = np.argmin(distance,axis=1)#3、对每一类数据进行均值计算,更新质心点坐标for i in range(self.n_clusters):#首先排除掉没有出现在c_ind里的类别if i in c_ind:#选出所哟u类别时i的点,取data里面坐标的均值,更新第i个质心self.centroids[i] = np.mean(data[c_ind==i],axis=0)#实现预测方法def predict(self,sample):#先计算距离矩阵,然后选取距离质心最近的那个质心的类别distance = cdist(sample, self.centroids)c_ind = np.argmin(distance, axis=1)return c_inddist = np.array([[121,221,32,43],[121,1,12,23],[65,21,2,43],[1,321,32,43],[21,11,22,3]])c_ind = np.argmin(dist, axis=1)print(c_ind)x_new=x[0:5]print(x_new)print(c_ind==2)print(x_new[c_ind==2])np.mean(x_new[c_ind==2],axis=0)#测试#定义一个绘制子图函数def plotKmeans(x,y,centroids,subplot,title):#分配子图,121表示1行2列的子图中的第一个plt.subplot(subplot)plt.scatter(x[:,0],x[:,1],c='r')#画出质心点plt.scatter(centroids[:,0],centroids[:,1],c=np.array(range(6)),s=100)plt.title(title)kmeans = K_Means(max_iter=300,centroids=np.array([[2,1],[2,2],[2,3],[2,4],[2,5],[2,6]]))plt.figure(figsize=(16,6))plotKmeans(x,y,kmeans.centroids,121,'Inital State')#开始聚类kmeans.fit(x)plotKmeans(x,y,kmeans.centroids, 122, 'Final State')#预测新数据点的类别x_new = np.array([[0,0],[10,7]])y_pred = kmeans.predict(x_new)print(kmeans.centroids)print(y_pred)plt.scatter(x_new[:,0],x_new[:,1], c='black')plt.show()
  • 初始和最终预测散点图展示:

机器学习——K均值算法(K-means)相关推荐

  1. k均值算法python实现(吴恩达机器学习作业)

    k均值算法python实现(吴恩达机器学习作业) 题目要求 数据集 读取mat文件 K-means 实现 结果 问题 题目要求 采用K均值算法对样本进行聚类. 编写K均值算法源代码,对ex7data2 ...

  2. K 均值算法-如何让数据自动分组

    公号:码农充电站pro 主页:https://codeshellme.github.io 目录 1,K 均值算法 2,K 均值算法聚类过程 3,K 均值算法的实现 4,准备数据点 5,对数据聚类 6, ...

  3. python实现k均值算法_python实现kMeans算法

    聚类是一种无监督的学习,将相似的对象放到同一簇中,有点像是全自动分类,簇内的对象越相似,簇间的对象差别越大,则聚类效果越好. 1.k均值聚类算法 k均值聚类将数据分为k个簇,每个簇通过其质心,即簇中所 ...

  4. 百面机器学习—7.K均值算法、EM算法与高斯混合模型要点总结

    文章目录 一.总结K均值算法步骤 二.如何合理选择K值? 三.K均值算法的优缺点是什么? 四.如何对K均值算法进行调优? 五.EM算法解决什么问题? 六.EM算法流程是什么? 六.EM算法能保证收敛嘛 ...

  5. k均值算法 二分k均值算法_如何获得K均值算法面试问题

    k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...

  6. k均值算法原理详细讲解以及matlab代码实现

    有研究生物电信号处理和机器学习的欢迎加我qq429500506共同交流学习进步. 最近更新文章的频率太低了,主要原因是不想为了发文章而发文章,想潜心研究,写好文章,顺便想说一句开源万岁,最近一个月虽然 ...

  7. k均值算法 二分k均值算法_使用K均值对加勒比珊瑚礁进行分类

    k均值算法 二分k均值算法 Have you ever seen a Caribbean reef? Well if you haven't, prepare yourself. 您见过加勒比礁吗? ...

  8. python图片压缩算法_使用K均值算法进行图片压缩

    K均值算法 上一期介绍了机器学习中的监督式学习,并用了离散回归与神经网络模型算法来解决手写数字的识别问题.今天我们介绍一种机器学习中的非监督式学习算法--K均值算法. 所谓非监督式学习,是一种与监督式 ...

  9. K均值算法【K-means】

    一.K-Means算法流程 K均值算法是学习无监督学习的第一个算法,这个算法理解和实现都比较简单,算法的目的是将数据分成K组. 为了达到这个目的,算法首先随机初始化k个数据点(聚类中心),然后遍历所有 ...

  10. 基于SPSS的K均值算法

    文章目录 前言 一.K均值算法是什么? 二.动画演示 1.网站 2.示例 三.缺点解决(K-means++算法) 四.SPSS实现 总结 前言 菜鸡学习数学建模 一.K均值算法是什么? K-means ...

最新文章

  1. oracle网站注入,oracle注入,utl_http方法
  2. bootstrap fileinput上传返回400,404,500 等错误替换
  3. dhcp snooping+IPSG的一些理解
  4. pyqt5讲解3:QComboBox,QSpinBox,QSlider
  5. 对Spring IOC的理解(转)
  6. docker官方文档中的dns,link,expose,publish
  7. 关联分析:FP-Growth算法
  8. 佳能2900打印机与win10不兼容_佳能2900打印机和惠普1020哪种好 佳能2900打印机和惠普1020对比【详解】...
  9. python(11)-if语句,断言assert
  10. 大数据职业理解_大数据带给我们职业三大根本改变
  11. 【转】mip-semi-fixed 走走又停停
  12. Java 获取命令行输入数据(命令行输入,Scanner类)
  13. POJ-1008(滑雪)
  14. 说说emit(上)基本操作
  15. 今日恐慌与贪婪指数为77 贪婪程度有所上升
  16. 设计模式练习:Composite模式
  17. 蔡为东:行之有效的IT技术团队管理实践
  18. Python数据分析案例——20年【科比NBA】生涯|数据分析
  19. el-table中的表格的相同项合并(单元格合并),包含多层合并
  20. [转] 快速掌握一个语言最常用的50%

热门文章

  1. DBSCAN聚类算法原理总结
  2. 基于KMP与Levenshtein模糊匹配算法的银行联行号查询(转)
  3. 《数据结构复习》扩展线性链表的广义表
  4. 影响电缆特性阻抗的三个方面
  5. 钢结构工程管理软件系统
  6. OnlyOffice在线部署
  7. 常用积分类型(积分公式)
  8. 入手华为云学生机体验
  9. Rtf(富文本格式)解析
  10. python处理rtf文档_python读取word文档的方法