一、概念

K均值(k-means)是聚类算法中最为简单和高效的算法,属于无监督的算法。

核心思想:由用户指定K个初始质心(initial centroids),以作为聚类的类别(cluster),重复迭代直至算法收敛

基本算法流程:

1.选取K个初始质心(作为初始的cluster)

2.repeat:

对每个样本点,计算得到距其最近的质心,将其类别标为该质心所对应的cluster

重新计算K个cluser对应的质心

3.until 质心不在发生变化或迭代达到上限

二、python简单方法讲解

dist = np.array([[121,34,43,32],
                 [121,221,12,23],
                 [65,21,2,43],
                 [1,221,32,43],
                [21,0,2,3]])
c_index = np.argmin(dist)
print(c_index)
 ##输出17,把所有的二维数据当一维数据做处理,显示出最小的索引,0所在的位置在第17索引上

c_index = np.argmin(dist,axis=1)
print(c_index)
##输出 [3 2 2 0 1] axis将二维数据求最小值当一列处理,返回的是每行的最小值索引
print(c_index==2)
# [False  True  True False False]

x_new=np.array(
[[-0.02708305  5.0215929 ],
 [-5.49252256  6.27366991],
 [-5.37691608  1.51403209],
 [-5.37872006  2.16059225],
 [ 9.58333171  8.10916554]])

x_new[c_index==2]
#array([[-5.49252256,  6.27366991],
#       [-5.37691608,  1.51403209]])

np.mean(x_new[c_index==2],axis=0)
#输出 array([-5.43471932, 3.893851 ]) 列加起来求平均

三、python实现kmeans

### 0. 引入依赖
import numpy as np
import matplotlib.pyplot as plt
# 从sklearn 中直接生成聚类数据
from sklearn.datasets import make_blobs### 1.数据加载
# n_samples 表示生成100个样本点  centers 生成6个中心点
# cluster_std 聚类的标准差
x,y=make_blobs(n_samples=100,centers=6,random_state=1234,cluster_std=0.6)
plt.figure(figsize=(6,6))
plt.scatter(x[:,0],x[:,1],c=y)
plt.show()

## 2.算法实现
## 引用scipy的距离函数 默认欧式距离
from scipy.spatial.distance import cdist 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.float64)# 训练模型方法,k-means聚类过程,传入原始数据# data是个二维举证def fit(self,data):# 假如没有制定初心质心,就随机选取data中的点作为初始质心if(self.centroids.shape == (0,)):## 随机生成n_clusters个0到len(data)的索引值从data中获取数据self.centroids = data[ np.random.randint(0,data.shape[0],self.n_clusters),: ]#开始迭代 for i in range(self.max_iter):# 1. 计算距离矩阵,得到的是一个100 * 6 的矩阵# 就是每个data的数据与不同质心点的距离distances = cdist(data,self.centroids)# 2. 对距离按由近到远排序,选取最近的质心点类别,作为当前点的分类 c_index = np.argmin(distances,axis=1 )# 3. 对每一类数据进行均值计算,更新质心点坐标 for i in range(self.n_clusters):# 首先排出掉没有出现在c_index的类别# 因为可能存在某个质心没有数据聚集到if i in c_index:# 选出所有列表是i的点,取data里面坐标的均值,更新第i个质心#data[c_index==i] 布尔索引,拿出来的是true的索引的值self.centroids[i] = np.mean(data[c_index==i],axis=0)# 实现预测方法 def predict(self,samples):# 跟上面一样,先计算距离矩阵,然后选取距离最近的那个质心的类别distances = cdist(samples,self.centroids)c_index = np.argmin(distances,axis=1 )return c_index
### 3. 测试
# 定义一个绘制子图函数
def plotKMean(x,y,centroids,subplot,title):# 分配子图plt.subplot(subplot)plt.scatter(x[:,0],x[:,1],c='r')#画出质心点  s为sizeplt.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))# 121 表示 1行2列的第一个子图
plotKMean(x,y,kmeans.centroids,121,'Initial State')# 开始聚类
kmeans.fit(x)plotKMean(x,y,kmeans.centroids,122,'Final State')# 预测新数据点的类别
x_new = np.array([[0,0],[10,7]])y_pred= kmeans.predict(x_new)print(kmeans.centroids)
#[[ 5.76444812 -4.67941789]
# [-2.89174024 -0.22808556]
# [-5.89115978  2.33887408]
# [-4.53406813  6.11523454]
# [-1.15698106  5.63230377]
# [ 9.20551979  7.56124841]]print(y_pred)
# [1 5]
plt.scatter(x_new[:,0],x_new[:,1],s=100,c='black')

05. 聚类---K(k-means)均值相关推荐

  1. 聚类算法-K均值(K-means)

    摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时候上述条件得不到满足,尤其是在处理海量 ...

  2. python机器学习案例系列教程——k均值聚类、k中心点聚类

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 上一篇我们学习了层次聚类.层次聚类只是迭代的把最相近的两个聚类匹配起来.并没有给出能给出多少的分组.今天我们来研究一个K均值聚类.就是 ...

  3. 基于K-Means的文本聚类

    何为聚类 "聚类是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都有相似的一些属性."                 ...

  4. 聚类之K均值聚类和EM算法

    这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...

  5. 多元统计分析--聚类分析(系统性聚类、K均值聚类)

    摘要 系统聚类分为Q型聚类与R型聚类.前者对样品进行聚类,后者对变量进行聚类.在本文中,我们探讨对样品的分类. 文章目录 摘要 主要思想 相似性的度量 系统聚类 K均值聚类 主要思想 聚类,在样品没有 ...

  6. (学习笔记)聚类算法 - k均值算法(k-means)

    聚类之K均值算法 聚类介绍 k均值算法步骤 Python实现 参考文献 聚类介绍 聚类是一种经典的无监督学习方法. 聚类的目的是将数据集中的样本划分为若干个通常是不相交的子集,每个子集被称为簇,以此来 ...

  7. 《统计学习方法》—— 聚类方法(层次聚类和K均值聚类)

    转载:https://www.cnblogs.com/nku-wangfeng/p/7642745.html 所谓聚类,就是将相似的事物聚集在一 起,而将不相似的事物划分到不同的类别的过程,是数据分析 ...

  8. 两种聚类方法——K均值聚类(K-means)算法和模糊C均值聚类(FCM)算法的简述与在MATLAB中的实现

    目录 1.K-means算法 1.1算法流程 1.2程序实现 1.3实验结果 原始数据集 聚类结果 2.FCM算法 2.1算法流程 2.2程序设计 FCM子函数 主函数 2.3实验结果 原始数据集 聚 ...

  9. 第十四章聚类方法.14.3K均值聚类

    文章目录 主要内容 k均值聚类的定义 样本空间划分 k均值聚类策略 算法步骤 例题 k均值聚类算法特性 收敛性 初始类的选择 类别数k的选择 k均值聚类缺点改进 本课程来自深度之眼,部分截图来自课程视 ...

  10. C语言学习之求∑k(k=100)+∑K*k(k=50)+∑1/k(k=10)

    求∑k(k=100)+∑K*k(k=50)+∑1/k(k=10) #include <stdio.h> #include <math.h> void main(){double ...

最新文章

  1. 4.4 Triplet 损失-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  2. 人工智能 ppt_【138期】厉害了!人工智能高清大图+PPT模板全集系列!
  3. CSS基础(part20)--CSS3结构伪类选择器
  4. python anaconda和pycharm_Pycharm下 Anaconda和Conda的使用
  5. 机器学习多元线性回归_过度简化的机器学习(1):多元回归
  6. 【BZOJ2300】【SCOI2011】糖果
  7. js,jq.事件代理(事件委托)复习。
  8. OpenGL基础6:着色器
  9. 图像处理四:霍夫变换
  10. 【caffe】Layer解读之:Date
  11. 中望cad自定义快捷键命令_[cad常用快捷键命令大全]中望cad常用快捷键及命令
  12. 关于IPB帧与恒定比特率、动态比特率的详解
  13. FFmpeg获取视频旋转角度rotate获取不到的问题解决
  14. pip清华源(清华大学国内镜像)安装地址
  15. 看《我是特种兵》有感
  16. 12-render函数
  17. 信噪比(SNR)计算公式的推导
  18. 杰理AC692X,695X,696X方案NFC音响耳机、故事机
  19. 【推荐系统】召回模型线下评价指标
  20. JAVA实现输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

热门文章

  1. KSQLException: A CallableStatement was executed with nothing returned.
  2. Sphinx 生成 Windows 帮助文件 (.chm文件)
  3. Andoid鬼点子 近期项目总结(2) 日历
  4. 哈佛成功金句-----25则
  5. 关于oracle数据库中直接修改表中数据点击小锁出现these query results are not updateable的问题
  6. 含文档+PPT+源码等]精品基于NET实现的家电维修保养信息系统[包运行成功]计算机毕业设计NET毕设项目源码
  7. 均匀直线阵的常规波束形成matlab
  8. (D16)Python-文件操作
  9. 企业如何规划直播带货?
  10. 总结下利用python赚外快的方法,在闲余时间月赚2k~5k,从入门到精通的教程在最下面自取!