k-means 聚类算法

数据挖掘十大算法(二):K-means聚类算法原理与实现 参考:1.机器学习-KMeans聚类 K值以及初始类簇中心点的选取2.K-Means算法的研究分析及改进一、K-means算法原理K-means算法是最常用的一种聚类算法。算法的输入为一个样本集(或者称为点集),通过该算法可以将样本进行聚类,具有相似特征的样本聚为一类。针对每个点,计算这个点距离所有中心点最近的那个中心点,然后将这个点归为这个中心点代表的簇。一次迭代结束之后,针对每个簇类,重新计算... 阅读详情

参考:

数据挖掘十大算法(二):K-means聚类算法原理与实现

K-means聚类分析算法原理、改进及实现



k-means 聚类算法

一、原理

K-means聚类算法是一种无监督分类算法,将划分出来的类簇中点的均值当作该类簇的中心点,其可以在不确定划分规则的前提下,通过对数据集合不断迭代的方法对数据集进行划分,自动计算并更新每个类簇的中心点。

K-means聚类算法是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

引用:K-means聚类算法

算法实现步骤:

  1. 选定要聚类的类别数k,选择k个中心点。
  2. 针对样本点,找到距离最近的中心点,将他们归为中心点代表的簇。
  3. 计算每个簇的新的中心点。
  4. 判断新的中心点和旧的中心点是否相同/接近。
  5. 若相同/接近,则算法终止。否则更新中心点,循环2,3,4,直到算法终止。

下面使用python和现有库sklearn,分别实现一下k-means聚类算法。


二、python实现聚类分析

import numpy as np
import matplotlib.pyplot as plt
import random

# 返回两点之间的距离
def get_distance(p1,p2):
    return np.sqrt(sum(map(lambda x,y:(x-y)**2,p1,p2)))

# 计算样本的中心
def calc_center_point(cluster):
    return np.matrix(cluster).mean(axis=0).tolist()[0]

# 检验两个中心点是否有差异
def check_center_diff(center, new_center):
    return center == new_center


# k_means聚类算法实现
def K_means(points, center_points):
    k = len(center_points) # k值

    tot = 0
    while True:
        temp_center_points = [] # 记录中心点
        
        clusters = [[] for _ in range(k)]  # 记录数据值
        # clusters = [[]]*k  
        # 注意:不能使用以上代码,因为*k,是复制的列表,是引用的同一个对象,修改其中一个就会改变所有的值

        # 计算最近中心点,并添加到对应的分组
        for data in points:
            distance = []
            for center in center_points:
                distance.append(get_distance(data,center))
            index = np.argmin(distance)
            clusters[index].append(data)
		
        # 格式化输出迭代日志
        tot += 1
        res_str = ''''''
        res_str += 
K-means聚类模型(超详细,含案例代码) K-means是一种常用的聚类算法,用于将数据集中的观测点分为不同的群组或簇。聚类是一种无监督学习方法,其目标是发现数据中隐藏的结构,将相似的数据点划分为同一组,同时将不相似的数据点划分为不同的组。 阅读详情

相关推荐

K-means聚类算法和模糊C-means聚类算法

K-means聚类算法和模糊C-means聚类算法 1.K-means聚类算法 K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。 ...

Code Wang的博客 4万+

聚类算法之——K-Means++聚类算法

聚类算法之——K-Means++聚类算法 轮盘法 基本思想:各个个体被选中的概率与其适应度大小成正比; 步骤 计算出群体中 每个个体的适应度f(i=1,2,…,m),mf(i=1,2,\dots,m),mf(i=1,2,…,m),m为群体大小; 计算出每个个体被遗传到下一代群体中的概率 P(xi)=f(xi)∑j=1Mf(xj) P(x_i)=\frac{f(x_i)}{\sum_{j=1...

Amy9_Miss的博客 7098

用java实现K-means算法,k-means聚类算法原理

用java实现K-means算法,k-means聚类算法原理

-lim-的博客 1万+

K-Means聚类算法JAVA实现

使用java实现K-Means聚类算法

x_8efengfan的博客 4814

通过python下载西门子技术中心文档

本篇文章纯粹记录如何下载通过python下载西门子技术中心文档,所下载文档完全自己学习使用,非商业用途

John_09040211的博客 561

【UE5.3 Cesium for Unreal】GlobePawn编译实战:从源码修改到功能实现

本文详细介绍了在UE5.3中为Cesium for Unreal插件编译和集成非官方增强组件GlobePawn的完整实战流程。从获取源码、准备资产文件、部署项目结构,到逐行修改代码适配工程并解决典型编译错误,最终实现在三维地球上实现类似Google Earth的丝滑鼠标交互体验。

weixin_29011667的博客 307

PD虚拟机网络初始化失败的权限修复指南

本文针对Parallels Desktop虚拟机常见的“网络初始化失败”问题,提供了详细的权限修复指南。通过分析问题根源,指导用户安全备份并修改关键的`network.desktop.xml`和`dispatcher.desktop.xml`配置文件,以恢复PD虚拟机的网络连接。文章还包含了修复后的验证步骤及预防措施,帮助用户彻底解决并避免此类权限问题。

qqq44的博客 849

(一)DaVinci Developer AutoSAR工具 如何新建SWC、Component、RTE工程,超级详细步骤,赚到

​ 1,创建SWC,第一步需要创建一个App组件类型,首先点击Object Brower菜单,然后左键Application Component Types 选项,然后右键New Application Component Type,组件类型的作用是来后续实例一个Compoent 2、 Properties 选项卡中Nane中输入Type的名字,注意根据规范命名规则已CtAp开头,其他默认就好 ​

weixin_42602687的博客 3572

[面试]SoC验证工程师面试常见问题(三)

SoC 验证工程师面试中,SystemVerilog、UVM 和 SystemC 的代码题目通常涵盖面向对象编程、约束随机化、UVM 组件设计、内存建模等主题。通过练习上述示例题目和理解关键点,你可以更好地应对现场编码环节。如果有具体的面试方向(如特定协议验证)或公司偏好,可以提供更多信息,我会进一步定制题目和答案。祝你面试顺利!

元直的博客 1614

MCAL知识点(十):ERU驱动配置详解

ERS:外部请求单元ETL:中断逻辑单元OGU:输出逻辑单元MCU里面配置要使用的功能和选择输入的管脚,注意上述模块关注点讲述的ERU必须和边沿检测模块相关联。

梦想技术家 1221

054_小驰私房菜_Camx i2c读写相关备忘

Camera 对Ae、Af这些控制,实际都是,最终实际都是落实到hal下发相关的指令给驱动,那hal这边是怎么给驱动下发相关命令的呢?#小驰私房菜054# #Qcom Camx#可以参考看下下面相关代码内容。

149

Linux安装Docker(图文解说详细版)

第一步,下载docker 下载地址: https://download.docker.com/linux/static/stable/x86_64/ 这次的演示我们使用docker-18.06.3-ce.tgz 这个版本 第二步,上传到云服务器上面 使用rz命令上传或者fltp工具进行上传 第三步,解压文件 第四步,将解压出来的docker文件复制到 /usr/bin/ 目录下 这么做的目的是将docker交给linux自己去管理,类似spring中的ioc(猜测,非正经知识) cp docker

编码人生 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Flink CEP
下一篇: Flink 应用-电商用户行为分析
努力生活的黄先生
博客等级 码龄7年 38粉丝 57原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力生活的黄先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值