首页
Preview

理解机器学习中的K-means聚类算法

K-means聚类是最简单和流行的无监督机器学习算法之一。

通常,无监督算法仅使用输入向量推断数据集,而不参考已知或标记的结果。

AndreyBu拥有超过5年的机器学习经验,目前正在教授人们他的技能,他说:“K-means的目标很简单:将相似的数据点分组并发现潜在的模式。为了实现这个目标,K-means在数据集中寻找固定数量(k)的簇。”

簇是指由于某些相似性而聚合在一起的数据点的集合。

你将定义一个目标数量_k_,它是数据集中需要的质心数量。质心是表示簇中心的虚拟或实际位置。

通过减少簇内平方和,将每个数据点分配到每个簇中。

换句话说,K-means算法识别_k_个质心,然后将每个数据点分配到最近的簇中,同时使质心尽可能小。

K-means中的“平均值”指的是数据的平均值,即找到质心。

K-means算法如何工作

为了处理学习数据,数据挖掘中的K-means算法从一组随机选择的质心开始,这些质心用作每个簇的起始点,然后执行迭代(重复)计算以优化质心的位置。

当以下任一情况发生时,它停止创建和优化簇:

  • 质心已稳定 - 由于聚类成功,其值没有变化。
  • 已达到定义的迭代次数。

K-means算法示例问题

让我们看看如何使用Python编程语言来演示K-means机器学习算法的步骤。

我们将使用Scikit-learn库和一些随机数据来说明K-means聚类的简单解释。

步骤1:导入库

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeans%matplotlib inline

如上面的代码所示,我们将在我们的项目中导入以下库:

  • Pandas用于读写电子表格
  • Numpy用于进行高效的计算
  • Matplotlib用于可视化数据

步骤2:生成随机数据

以下是在二维空间中生成一些随机数据的代码:

X= -2 * np.random.rand(100,2)X1 = 1 + 2 * np.random.rand(50,2)X[50:100, :] = X1plt.scatter(X[ : , 0], X[ :, 1], s = 50, c = ‘b’)plt.show()

共生成了100个数据点,并将其分为两组,每组50个点。

以下是如何在二维空间中显示数据的:

步骤3:使用Scikit-Learn

我们将使用Scikit-learn库中的一些可用函数来处理随机生成的数据。

以下是代码:

from sklearn.cluster import KMeansKmean = KMeans(n_clusters=2)Kmean.fit(X)

在这种情况下,我们任意给_k_(n_clusters)一个值为2。

如果我们运行代码,这是我们得到的K-means参数的输出:

KMeans(algorithm=’auto’, copy_x=True, init=’k-means++’, max_iter=300
 n_clusters=2, n_init=10, n_jobs=1, precompute_distances=’auto’,
 random_state=None, tol=0.0001, verbose=0)

步骤4:找到质心

以下是找到簇中心的代码:

Kmean.cluster_centers_

以下是质心值的结果:

array([[-0.94665068, -0.97138368],
 [ 2.01559419, 2.02597093]])

让我们显示簇质心(使用绿色和红色颜色)。

plt.scatter(X[ : , 0], X[ : , 1], s =50, c=’b’)plt.scatter(-0.94665068, -0.97138368, s=200, c=’g’, marker=’s’)plt.scatter(2.01559419, 2.02597093, s=200, c=’r’, marker=’s’)plt.show()

以下是输出:

步骤5:测试算法

以下是获取K-means聚类示例数据集的标签属性的代码;即,如何将数据点分类到两个簇中。

Kmean.labels_

运行上述K-means算法代码的结果如下:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

如上所示,50个数据点属于0簇,其余属于1簇。

例如,让我们使用以下代码预测数据点的簇:

sample_test=np.array([-3.0,-3.0])second_test=sample_test.reshape(1, -1)Kmean.predict(second_test)

以下是结果:

array([0])

它显示测试数据点属于0(绿色质心)簇。

结束语

以下是Python中整个K-means聚类算法的代码:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeans%matplotlib inlineX= -2 * np.random.rand(100,2)X1 = 1 + 2 * np.random.rand(50,2)X[50:100, :] = X1plt.scatter(X[ : , 0], X[ :, 1], s = 50, c = ‘b’)plt.show()from sklearn.cluster import KMeansKmean = KMeans(n_clusters=2)Kmean.fit(X)Kmean.cluster_centers_plt.scatter(X[ : , 0], X[ : , 1], s =50, c=’b’)plt.scatter(-0.94665068, -0.97138368, s=200, c=’g’, marker=’s’)plt.scatter(2.01559419, 2.02597093, s=200, c=’r’, marker=’s’)plt.show()Kmean.labels_sample_test=np.array([-3.0,-3.0])second_test=sample_test.reshape(1, -1)Kmean.predict(second_test)

K-means聚类是数据聚类分析中广泛使用的技术。

它很容易理解,特别是如果你使用K-means聚类教程加快学习速度。此外,它可以快速地提供训练结果。

然而,它的性能通常不如其他复杂的聚类技术那么竞争,因为数据的轻微变化可能导致高方差。

此外,假定簇是球形和均匀大小的,这可能会降低K-means聚类Python结果的准确性。

译自:https://towardsdatascience.com/understanding-k-means-clustering-in-machine-learning-6a6e67336aa1

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
alivne
复杂的问题简单化

评论(0)

添加评论