机器学习中的 K-Means算法及其优缺点(包含Python代码样例)

news2024/9/28 19:27:09

目录

一、简介

二、优缺点介绍

三、Python代码示例

四、总结


一、简介

K-Means算法是一种经典的无监督学习算法,用于将数据集中的样本分为 K 个不同的类别。K-均值聚类算法的工作原理如下:

  • 随机选择 K 个中心点作为初始聚类中心。
  • 将每个样本点分配到离其最近的聚类中心,形成 K 个初始聚类。
  • 通过计算每个聚类中心的均值,更新聚类中心的位置。
  • 重复步骤2和步骤3,直到聚类中心不再发生变化或达到预定迭代次数。

二、优缺点介绍

优点:

  • 实现简单,计算快速,适用于处理大规模数据集。
  • 可用于聚类分析,发现数据中的隐藏模式和组织结构。
  • 算法的结果具有可解释性,即每个样本点都属于唯一的一个聚类。

缺点:

  • 需要预先指定聚类数量 K,这对于一些数据集来说可能是困难的,而错误的选择聚类数量可能导致结果不准确。
  • 对初始聚类中心的选择敏感,初始点的选择不同可能导致得到不同的聚类结果。
  • 对于非凸形状的聚类,K-均值算法可能表现不佳,会将非凸形状的聚类误认为多个凸形状的聚类。

三、Python代码示例

1.K-Means类代码:

import numpy as np

class KMeans:
    def __init__(self, n_clusters=2, max_iters=100):
        self.n_clusters = n_clusters
        self.max_iters = max_iters
        
    def fit(self, X):
        # 随机初始化聚类中心
        self.centroids = X[np.random.choice(range(len(X)), self.n_clusters, replace=False)]
        
        for _ in range(self.max_iters):
            # 分配样本到最近的聚类中心
            clusters = [[] for _ in range(self.n_clusters)]
            for x in X:
                distances = [np.linalg.norm(x - centroid) for centroid in self.centroids]
                closest_cluster = np.argmin(distances)
                clusters[closest_cluster].append(x)

            # 更新聚类中心
            new_centroids = []
            for cluster in clusters:
                new_centroids.append(np.mean(cluster, axis=0))
            new_centroids = np.array(new_centroids)
            
            # 判断聚类中心是否变化不再变化,如果是则停止迭代
            if np.all(self.centroids == new_centroids):
                break
            
            self.centroids = new_centroids

    def predict(self, X):
        predictions = []
        for x in X:
            distances = [np.linalg.norm(x - centroid) for centroid in self.centroids]
            closest_cluster = np.argmin(distances)
            predictions.append(closest_cluster)
        return predictions
 

2.调用代码

from Kmeans import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# 生成样本数据
X, y = make_blobs(n_samples=200, centers=4, random_state=0)

# 实例化KMeans对象,并进行训练和预测
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
predictions = kmeans.predict(X)

# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=predictions)
plt.scatter(kmeans.centroids[:, 0], kmeans.centroids[:, 1], c='red', marker='X')
plt.show()
plt.savefig(fname="Kmeans_result.png")

3.效果

 下方InsCode选择查看文件里的Kmeans_result.png即可查看可视化结果

四、总结

        K-均值聚类算法是一种简单而高效的聚类算法,适用于处理大规模数据集。但需要注意选择合适的聚类数量和初始聚类中心,以及对数据集的形状有一定的限制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1550840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI 成足球比赛「关键先生」:DeepMind 发布 TacticAI,战术布局实用性高达 90%

在刚刚结束的世界杯预选赛中,国足在天津主场以 4:1 的得分大胜新加坡,一扫上一场在领先优势下被对方逼平的阴霾,也迎来了球队 2024 年的首场胜利。目前,中国队暂居 C 组第 2 位,保住了晋级 18 强赛的希望。 享受胜利喜…

人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍。特征金字塔网络(FPN)是一种深度学习模型结构,主要应用于目标检测任务中&am…

Linux 注入依赖环境

文章目录 配置依赖程序安装 JDK安装 Tomcat安装 mysql 配置依赖程序 下面配置依赖程序都以CentOS为例。 安装 JDK 可以直接使用 yum(CentOS) 直接进行安装。 先搜索,确定软件包的完整名称。 yum list | grep jdk再进行安装 进行安装的时候一定要先确保处在“管理…

《计算机工程与应用》投稿经验2024

要按照官网格式写论文,这会节省很多时间。审稿费120元,本人计算机视觉方向,9页,没有打折,版面费5000,彩图和表格过多的原因。版权协议等论文录用之后再交即可,一审二审的时候不用交,…

Python-VBA编程500例-022(入门级)

最长AB子串(Longest AB Alternating Substring)(或称为最长XY出现次数相同的子字符串)这个问题看似是一个比较抽象的编程问题,但在实际应用场景中,它可以用来解决一系列涉及平衡性和重复模式的实际问题。常见应用场景有: 1、DNA或RNA序列分析…

浅谈交直流混合微电网能量管理系统关键技术研究综述

摘要:为了提升交直流混合微电网健康有效发展,提高直流互联微电网中分布式电源的能源使用效率,提升区域微电网稳定发展,对交直流混合微电网能量管理系统关键技术进行分析和研究很有必要。文章主要从交直流混合微电网能量管理系统架…

JAVA的sort用法详解(二维数组排序,List<>排序,lambada表达式,自定义类型排序)

目录 前言&#xff1a; 一维数组降序&#xff1a; 方法1.Comparator接口&#xff1a; 代码实现&#xff1a; 方法2.Collections.reverseOrder()&#xff1a; 代码实现&#xff1a; 二维数组排序&#xff1a; 代码如下&#xff1a; List<>排序&#xff1a; 代码…

C++ 之多态虚函数原理及应用

文章目录 多态基本概念和原理虚函数的基本原理和概念虚析构和纯虚析构多重继承中的虚函数小结 多态基本概念和原理 多态的基本概念 **多态是C面向对象三大特性之一** 多态的定义 多态是一种面向对象编程概念&#xff0c;指同一个行为&#xff08;方法&#xff09;在不同的对象上…

Elastic 8.13:Elastic AI 助手中 Amazon Bedrock 的正式发布 (GA) 用于可观测性

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.13 的正式发布。 有什么新特性&#xff1f; 8.13 版本的三个最重要的组件包括 Elastic AI 助手中 Amazon Bedrock 支持的正式发布 (general availability - GA)&#xff0c;新的向量…

AI算法中的关键先生 - 反向转播与戴维莱姆哈特

0. 引言 机器学习的自动推导过程中有一个关键步骤&#xff0c;就是自动求解过程的参数反向传播过程&#xff0c;这个工作据说是这个人做的&#xff1a; Remembering David E. Rumelhart (1942-2011) – Association for Psychological Science – APSAPS Fellow and Charter …

极简wordpress网站模板

Pithy设计师wordpress网站模板 精练简洁的wordpress模板&#xff0c;设计师或设计工作室展示型网站模板。 https://www.jianzhanpress.com/?p6329

getshell2

怎么进后端 常见CMSgetshell 良精CMS GETSHELL1讲了很多自己看 动易CMS 学校政府 小企业很多这个CMS 网页直接插马 这是秒的方法 图片上传 编辑器漏洞这个CMS也有 怎么找编辑器F12 ctrlf editor 找到编辑器路径 利用文件目录解析漏洞将备份目录名后加上/a.asp然后备份b…

LC 101.对称二叉树

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a; root [1,2,2,3,4,4,3] 输出&#xff1a; true 示例 2&#xff1a; 输入&#xff1a; root [1,2,2,null,3,null,3] 输出&#xff1a; false 提示&#x…

MySQL高阶SQL语句(二)

文章目录 MySQL高阶SQL语句&#xff08;二&#xff09;一、MySQL常用查询1、子查询1.1 语法1.1.1 结合select语句查询1.1.2 结合insert语句查询1.1.3 结合update语句查询1.1.4 结合delete语句查询1.1.5 在in前面添加not1.1.6 exists关键字 2、别名 二、MySQL视图1、视图介绍1.1…

vue2 父组件引入子组件

前言 感觉自己基础知识不是很扎实&#xff0c;在项目中好好学习。记录一下。 vue其中比较一个好用的就是一个页面中内容过多。为了更好的操作以及管理代码。可以将一个页面分成好几个部分&#xff0c;最后整合到一个一起。 例如&#xff1a; 京东这个页面&#xff0c;其实可…

04-JavaScript函数

函数&#xff08;重点&#xff09; 1.为什么使用函数? 用函数来解决代码重用的问题。 2.函数的意义 函数其实就是封装&#xff0c;把可以重复使用的代码放到函数中&#xff0c;如果需要多次使用同一段代码&#xff0c;就可以把封装成一个函数。这样的话&#xff0c;在你需…

报错there is no HDFS_NAMENODE_USER defined

在Hadoop安装目录下找到sbin文件夹&#xff0c;修改里面的四个文件 1、对于start-dfs.sh和stop-dfs.sh文件&#xff0c;添加下列参数&#xff1a; HDFS_DATANODE_USERroot HDFS_DATANODE_SECURE_USERhdfs HDFS_NAMENODE_USERroot HDFS_SECONDARYNAMENODE_USERroot 2、对于st…

TCPView下载安装使用教程(图文教程)超详细

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;更多干货&#xff0c;请关注专栏《网络安全自学教程》 TCPView是微软提供的一款「查看网络连接」和进程的工具&#xff0c;常用来查看电脑上的TCP/UDP连接…

我与电源 3 - 电源反激战

老同志看到标题就能猜到,我今天要讲什么。 在我的技术栈里面,对于交流电接触的实在不多,因此对于反激电源这个鬼东西,我一开始也是非常模糊的。 2014 年的时候,我来到了一家做平衡车的企业,承担的任务是开发独轮平衡车,彼时公司只有两轮平衡车业务,那时候的两轮平衡车…

正弦实时数据库(SinRTDB)的使用(4)-快照查询

前文已经将松果实时数据库的安装、创建点表、创建测点、接入OPC DA的数据进行了介绍&#xff0c;没有了解的可以先看如下博客&#xff1a; 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入O…