【机器学习】十大算法之一 “K-means”

这篇具有很好参考价值的文章主要介绍了【机器学习】十大算法之一 “K-means”。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【机器学习】十大算法之一 “K-means”

 文章来源地址https://www.toymoban.com/news/detail-497002.html

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?type=blog个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

        机器学习是一种能够让计算机在不接收显式编程的情况下自主学习的技术。在机器学习的各种算法中,k-means算法是一种常见的聚类算法,它可以将一组数据分成多个不同的类别,并且属于同一类别的数据彼此之间具有高度的相似性。

本文将详细讲解机器学习十大算法之一 “K-means” 


【机器学习】十大算法之一 “K-means”

目录

一、简介

二、发展史

Lloyd的k-means算法的初始版本可以被描述如下:

三、算法原理详解

k-means算法是一个迭代聚类算法,主要包括以下几个步骤:

具体算法流程:

下面我们依次对以上几个步骤进行解析。

        1. 初始聚类中心

        2. 分配到最近聚类中心

        3. 重新计算聚类中心

        4. 重复聚类过程

四、算法功能详解

五、示例代码

        1. 安装相关库

        2. 分布讲解

        3. 完整代码

六、总结 

        k-means算法的优点:

        k-means算法的缺点:


一、简介

        k-means算法早在1957年就被发明了,最早由J. MacQueen提出 。后来,Lloyd(1982年)、Hartigan(1975年)、Forgy(1965年)等学者对此算法进行了修正和改进。这个算法已被广泛应用于数据挖掘、模式识别、图像处理等领域,它可以用来识别数据集之间的模式,因此是一种十分实用的机器学习算法。

二、发展史

        k-means算法是基于传统的聚类分析技术而发展起来的。聚类分析在早期主要应用于社会学、心理学和生物学等领域,用来发现自然类或发现结果变量。

        k-means算法的思想具有很强的几何直觉,最早是由Lloyd于1957年提出,并用于电话网络分割应用,它的主要思想是通过迭代方法将数据聚成k个类别,每个类别由一个中心点表示。

Lloyd的k-means算法的初始版本可以被描述如下:

  1. 随机选择k个点,作为初始的k个聚类的中心。

  2. 将每个点分配到距离最近的聚类中心所代表的聚类。

  3. 针对每个聚类重新计算聚类中的所有点的平均值,作为新的聚类中心。

  4. 重复步骤2和3,直到聚类中心不再发生变化或者是经过了预定的迭代次数。

        在Lloyd算法之后,Hartigan和Wong提出了两个改进的k-means算法,分别是k-means++和k-medoids。

        k-means++算法的主要思想是在选择初始点时尽可能的均匀分布整个数据集。在k-medoids算法中,每个聚类的中心不是由聚类内的所有点的平均值计算而成,而是由聚类内的某个代表点计算而成,这个代表点也称为medoids。

        现在,k-means算法已经成为了一种十分流行地聚类算法,也被广泛应用于各个领域。

三、算法原理详解

k-means算法是一个迭代聚类算法,主要包括以下几个步骤:

  1. 随机选择k个数据点作为初始聚类中心。

  2. 对于剩下未被选择的数据点,将其与k个聚类中心距离找到最接近的那个,并将其加入该聚类。

  3. 根据新的数据点的加入更新聚类中心。

  4. 重复上述过程,直至聚类中心不再发生变化为止或达到预设的迭代次数。

        简而言之,k-means算法通过最小化所有数据点到其所属聚类中心的距离平方和(SSE),来不断迭代更新聚类中心以达到聚类效果。

具体算法流程:

  1. 随机选择k个数据点作为初始聚类中心。

  2. 对每个数据点,都计算其到全部k个聚类中心的距离。然后将该数据点分配给距离最近的那个聚类中心所代表的聚类。

  3. 针对每个聚类重新计算聚类中的所有点的平均值,作为新的聚类中心。

  4. 重复步骤2和3,直到聚类中心不再发生变化或者是经过了预定的迭代次数。

下面我们依次对以上几个步骤进行解析。

        1. 初始聚类中心

        为了开始聚类过程,我们需要先指定k(即要将数据集聚类成k个类别)。然后从数据集中随机选择k个数据点作为初始聚类中心。

        2. 分配到最近聚类中心

        接下来的步骤是将其它数据点和初始的聚类中心进行比较,然后将它们分配到它们离得最近的聚类中心所代表的聚类。这个过程通常被称为“簇的分配”。

        该过程可以由以下的式子来计算。

【机器学习】十大算法之一 “K-means”

        其中,xi​ 代表第i个数据点, cj​ 代表第j个聚类中心。

        下面详细解析:

        对于数据集中的一个数据点xi​,计算其到聚类中心cj​的欧氏距离:

【机器学习】十大算法之一 “K-means”

        其中,n是每个数据点的特征数量。

        数据点xi​被分配给距离最近的聚类中心cj​所代表的聚类,即xi​被分配到聚类j中去。

        3. 重新计算聚类中心

        将数据点分配给聚类之后,我们需要重新计算每个聚类中的所有点的平均值,作为新的聚类中心。这个过程是一个迭代过程,对于每个聚类都要执行一次。

        给定聚类j及其所有数据点的集合S={x1​,x2​,......,x∣S∣​},新的聚类中心cj​可以计算为:

【机器学习】十大算法之一 “K-means”

        其中,|S|是聚类的大小,表示其包含的数据点的数量。 

        4. 重复聚类过程

        聚类过程完成后,需要检查聚类的中心是否发生了改变。如果任意一个聚类的中心发生了改变,那么我们需要重新执行分配数据点和重新计算聚类中心的过程。

        聚类过程需要重复执行以上的步骤,直至聚类中心不再发生变化或者是达到预设的迭代次数。

四、算法功能详解

        k-means算法的主要功能是实现数据点的聚类,用来将数据集划分成k个不同的类别。它的应用领域非常广泛,比如人脸识别、数据挖掘、社交网络分析等。

        在具体的应用过程中,k-means算法的结果可以:

  1. 帮助研究者发现不同观察或实验对象之间的相似性和不同之处。

  2. 帮助企业分析用户行为,提升销售和服务质量。

  3. 通过对大规模数据的聚类,从数据中提取出有用的信息,为业务决策提供依据。

  4. 将项目中的应用程序划分成不同的类别,便于维护和支持。

五、示例代码

        为了演示k-means算法的应用,我们针对一个简单的数据集进行聚类分析。

        在这个示例中,我们使用Python的scikit-learn库来实现k-means算法。这个库已经内置了众多的机器学习算法,包括k-means算法。

        1. 安装相关库

pip install matplotlib

pip install -U scikit-learn

        2. 分布讲解

        首先,我们需要导入一些必要的库并加载数据。在这个示例中,我们使用sklearn库中的make_blobs函数来生成带有标签的聚类数据。

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

# 生成带有标签的聚类数据
X, y = make_blobs(n_samples=500, n_features=2, centers=4, random_state=10)

        接下来,我们将数据可视化,颜色代表每个数据点所属的聚类。 

# 可视化数据集,颜色代表聚类标签
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.5)
plt.title('Original Data')
plt.show()

【机器学习】十大算法之一 “K-means”

        我们可以看到,数据呈现簇状分布,我们需要将其聚成4类。

        然后,我们使用KMeans类中的fit_predict方法来执行k-means算法。

# 执行k-means算法
kmeans = KMeans(n_clusters=4, init='random', max_iter=100, n_init=1)
y_pred = kmeans.fit_predict(X)

        在这里,我们指定要将数据聚成4个类别。max_iter代表每次迭代的最大次数。n_init代表KMeans类执行k-means算法的次数。每次迭代之后,我们可以通过使用KMeans类中的cluster_centers_属性,来获取每个类别的中心。 

# 获取聚类中心
centroids = kmeans.cluster_centers_
# 可视化聚类结果,颜色代表聚类标签
plt.scatter(X[:, 0], X[:, 1], c=y_pred, alpha=0.5)
# 可视化聚类中心
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=100)
plt.title('K-means Clustering Result')
plt.show()

【机器学习】十大算法之一 “K-means”

        最后,我们可以看到,k-means算法成功将数据点聚成了4类,并将每个类别的中心用红色标出。 

        3. 完整代码

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

# 生成带有标签的聚类数据
X, y = make_blobs(n_samples=500, n_features=2, centers=4, random_state=10)
# 可视化数据集,颜色代表聚类标签
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.5)
plt.title('Original Data')
plt.show()

# 执行k-means算法
kmeans = KMeans(n_clusters=4, init='random', max_iter=100, n_init=1)
y_pred = kmeans.fit_predict(X)

# 获取聚类中心
centroids = kmeans.cluster_centers_
# 可视化聚类结果,颜色代表聚类标签
plt.scatter(X[:, 0], X[:, 1], c=y_pred, alpha=0.5)
# 可视化聚类中心
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=100)
plt.title('K-means Clustering Result')
plt.show()

六、总结 

        本篇文章介绍了k-means算法,一种常见的聚类算法。我们详细讲解了该算法的发展史、原理、功能以及示例代码。在应用中,k-means算法一般用于数据聚类和模式识别,可以帮助我们从数据中提取出有用的信息,为业务决策提供依据。

        为了更好地应用k-means算法,我们需要了解它的优点和缺点。

        k-means算法的优点:

  1. 算法简单,易于实现;

  2. 可以处理非常大的数据集;

  3. 可以应用于各种领域,有很广泛的应用。

        k-means算法的缺点:

  1. 需要人为指定k;

  2. 对于初始聚类中心的选择,很敏感;

  3. 对于非凸形数据集聚类效果不好;

  4. 迭代次数及聚类中心的选择都会影响算法的运行速度。

        尽管k-means算法有一些缺点,但它在实际应用中表现出色。因此,我们需要理解其原理、功能和使用方法,以便更好地应用它。

【机器学习】十大算法之一 “K-means”

 

 

到了这里,关于【机器学习】十大算法之一 “K-means”的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【机器学习】十大算法之一 “线性回归”

    【机器学习】十大算法之一 “线性回归”

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月09日
    浏览(8)
  • 【机器学习】十大算法之一 “逻辑回归”

    【机器学习】十大算法之一 “逻辑回归”

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月10日
    浏览(9)
  • 【机器学习】十大算法之一 “PCA”

    【机器学习】十大算法之一 “PCA”

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月11日
    浏览(9)
  • 【机器学习】十大算法之一 “神经网络”

    【机器学习】十大算法之一 “神经网络”

    作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分享

    2024年02月10日
    浏览(20)
  • 【机器学习】十大算法之一 “朴素贝叶斯”

    【机器学习】十大算法之一 “朴素贝叶斯”

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月09日
    浏览(9)
  • [机器学习]K-means算法详解:原理、优缺点、代码实现、变体及实际应用

    文章首发于若绾 [机器学习]K-means算法详解:原理、优缺点、代码实现、变体及实际应用,转载请注明出处。 K-means算法是一种非常流行的无监督学习方法,主要应用于聚类问题。本篇博客将详细介绍K-means算法的原理、优缺点及实际应用场景。 K-means算法的核心思想是将数据划分

    2024年02月08日
    浏览(8)
  • 机器学习之K-means聚类算法

    机器学习之K-means聚类算法

    目录 K-means聚类算法 算法流程 优点 缺点 随机点聚类 人脸聚类 旋转物体聚类 K-means聚类算法是一种无监督的学习方法,通过对样本数据进行分组来发现数据内在的结构。K-means的基本思想是将n个实例分成k个簇,使得同一簇内数据相似度高而不同簇之间数据相似度低。 K-means的

    2024年02月11日
    浏览(11)
  • 机器学习(八) — K-means

    机器学习(八) — K-means

    1 definition randomly initialize K cluster centroids μ 1 , μ 2 , ⋯ mu_1, mu_2, cdots μ 1 ​ , μ 2 ​ , ⋯ repeat: assign each point to its closest centroid μ mu μ recompute the centroids(average of the closest point) 2 optimazation objective c ( i ) c^{(i)} c ( i ) = index of cluster to which example x ( i ) x^{(i)} x ( i ) is currently assign

    2024年01月21日
    浏览(8)
  • 机器学习之K-Means(k均值)算法

    机器学习之K-Means(k均值)算法

    K-Means算法又称K均值算法,属于聚类(clustering)算法的一种,是应用最广泛的聚类算法之一。所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类与分类最大的区别在于,聚类过程为无监督过程,

    2024年02月03日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包