K均值算法

一、概念

K-means中心思想:事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。

二、特点:

常用距离

a.欧式距离

b.曼哈顿距离

三、算法流程

K-means是一个反复迭代的过程,算法分为四个步骤:

(x,k,y)

(1) 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心;

def initcenter(x, k): kc

(2) 对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;

def nearest(kc, x[i]): j

def xclassify(x, y, kc):y[i]=j

(3) 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;

def kcmean(x, y, kc, k):

(4) 判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)。

while flag:

y = xclassify(x, y, kc)

kc, flag = kcmean(x, y, kc, k)

四、实践

(1).扑克牌手动演练k均值聚类过程:>30张牌,3类

①本次模拟k均值用到的扑克牌,初始中心为(2,9,12)

K均值算法

②经过一轮计算(选出中心:3,8,12)

K均值算法

③一直算到最后

K均值算法

(2).*自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。

java;gutter:true;</p> <h3>1、导入鸢尾花数据</h3> <p>from sklearn.datasets import load_iris import numpy as np</p> <h3>2、鸢尾花数据</h3> <p>iris = load_iris() data=iris['data']</p> <h1>样本属性个数</h1> <p>m=data.shape[1]</p> <h1>样本个数</h1> <p>n=len(data)</p> <h1>类中心个数,即最终分类</h1> <p>k=3</p> <h3>3、数据初始化</h3> <h1>距离矩阵</h1> <p>dist=np.zeros([n,k+1])</p> <h1>初始类中心</h1> <p>center=np.zeros([k,m])</p> <h1>新的类中心</h1> <p>new_center=np.zeros([k,m])</p> <h3>4、选中心</h3> <h1>选择前三个样本作为初始类中心</h1> <p>center=data[:k, :]</p> <p>while True: #求距离 for i in range(n): for j in range(k): dist[i,j]=np.sqrt(sum((data[i,:]-center[j,:])**2)) #归类 dist[i,k]=np.argmin(dist[i,:k]) #求新类中心 for i in range(k): index=dist[:,k]==i new_center[i,:]=np.mean(data[index, :]) #判断结束 if(np.all(center==new_center)): break else: center=new_center print('聚类结果:',dist[:,k])</p> <pre><code> ![K均值算法](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/1483369-20200414171140073-1722492086.png) (3)用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示。 ;gutter:true;
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

获取鸢尾花数据集
iris = load_iris()
data = iris.data[:, 1]
鸢尾特征值
x = data.reshape(-1, 1)
构建模型
model = KMeans(n_clusters=3)
训练
model.fit(x)
预测样本的聚类索引
y = model.predict(x)
print("预测结果:", y)
#画图
plt.scatter(x[:, 0], x[:, 0], c=y, s=50, cmap=’rainbow’)
plt.show()

预测结果:

K均值算法

散点图可视化:

K均值算法

(4)鸢尾花完整数据做聚类并用散点图显示。

java;gutter:true; from sklearn.datasets import load_iris from sklearn.cluster import KMeans import matplotlib.pyplot as plt</p> <p>导入鸢尾花数据集 iris = load_iris() 鸢尾花花瓣长度数据 x = iris.data 构建模型 model = KMeans(n_clusters=3) 训练 model.fit(x) 预测 y = model.predict(x) print("预测结果:", y)</p> <h1>画图</h1> <p>plt.scatter(x[:, 2], x[:, 3], c=y, s=50, cmap='rainbow') plt.show()

预测结果:

K均值算法

散点图可视化:

K均值算法

(5)想想k均值算法中以用来做什么?

  • 文本分析和归类
  • K均值算法实现图像压缩
  • 像素处理
  • K均值算法处理图像

Original: https://www.cnblogs.com/raicho/p/12698846.html
Author: Raicho
Title: K均值算法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581412/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JVM的运行数据区相

    大家好,,这篇文章咱们聊下JVM性能优化的问题 这篇文章主要介绍下JVM的 &#x8FD0;&#x884C;&#x6570;&#x636E;&amp…

    Java 2023年6月15日
    076
  • 一篇带你全面掌握go reflec 反射的用法

    你为什么要用反射?这个问题请读者自己回答。我强调一下反射的2个弊端: 代码不易阅读,不易维护,容易发生线上panic 性能很差,比正常代码慢一到两个数量级 go语言反射里最重要的两…

    Java 2023年5月30日
    094
  • 最近读的书和一点感悟

    最近读完的书有《这里是中国》、《自卑与超越》、《商业的本质》、《打破自我的标签》。 鉴于我目前的认知水平,对自然景观的欣赏还停留在 &#x725B;&#x903C;…

    Java 2023年6月8日
    070
  • 二叉树的基本知识

    二叉树的四种遍历方式 不要较真,其实也可以分为两种:广度优先(层级)和深度优先(前序、中序、后序) 基本概念不再赘述。 复杂度:设二叉树中元素数目为n。这四种遍历算法的空间复杂性均…

    Java 2023年6月8日
    085
  • 九、运算符

    一、基本运算符 1.1、Java语言支持的运算符 1.&#x7B97;&#x672F;&#x8FD0;&#x7B97;&#x7B26;&am…

    Java 2023年6月5日
    088
  • 游戏匹配实现

    客户端向服务器发送匹配请求,服务端接收后将客户端Session放入匹配队列中,匹配完成时通知用户。 使用观察者设计模式可以实现这个功能。 观察者代码: Java util 包拥有O…

    Java 2023年6月9日
    078
  • jdk 1.8 环境变量的配置

    “”我的电脑”” → 右键 → 属性 posted @2022-09-19 11:46 红酒人生 阅读(116 ) 评论() 编辑 …

    Java 2023年6月13日
    069
  • 【每日算法】剑指 Offer字符串的排列

    题目描述 代码实现 题目描述 这是 LeetCode 上的 剑指 Offer 38. 字符串的排列, 难度为 【中】 &#x8F93;&#x5165;&#x…

    Java 2023年6月9日
    099
  • leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树(中等)

    一、题目大意 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节…

    Java 2023年6月13日
    092
  • 彻底掌握Makefile(二)

    彻底掌握Makefile(二) 前言 在前面的文章彻底掌握Makefile(一)当中,我们简要的介绍了一些常见的makefile使用方法,在本篇文章当中我们将继续介绍一些makef…

    Java 2023年6月8日
    0114
  • springcloud 整合 druid 阿里的数据库连接池

    配置 pom 配置 application.properties 3.Config 配置类 ​——————————————-…

    Java 2023年6月8日
    068
  • TypeScript(5)类、继承、多态

    前言 对于传统的 JavaScript 程序我们会使用 &#x51FD;&#x6570;和 &#x57FA;&#x4E8E;&#x539F;…

    Java 2023年6月9日
    0101
  • 【设计模式】Java设计模式-桥接模式

    【设计模式】Java设计模式 – 桥接模式 😄 不断学习才是王道🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆原创作品,更多关注我CSDN: 一个…

    Java 2023年6月16日
    092
  • Java基础知识26–Java 异常;异常抛出后代码的执行情况

    1. Java 异常 异常是指阻止当前方法或者作用域继续执行的问题。异常处理机制就是当程序发生异常时,它强制终止程序运行,记录异常信息并将这些信息反馈给我们,由我们来确定是否处理异…

    Java 2023年5月29日
    0129
  • 22.1.30 位运算

    22.1.30 位运算 1))哈希函数可以把数据按照种类均匀分流; 2)布隆过滤器用于集合的建立与查询,并可以节省大量空间; 3)一致性哈希解决数据服务器的负载管理问题; 4)利用…

    Java 2023年6月13日
    076
  • 2021网络协议从入门到底层原理1《小码哥》

    物理层 网络互连模型 网络互连模型◼为了更好地促进互联网络的研究和发展,国际标准化组织 ISO 在 1985 年制定了网络互连模型 OSI 参考模型(Open System Int…

    Java 2023年6月7日
    066
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球