k均值聚类算法原理和(TensorFlow)实现(无师自通)

  • 内容
  • 评论
  • 相关

顾名思义,k均值聚类是一种对数据进行聚类的技术,即将数据分割成指定数量的几个类,揭示数据的内在性质及规律。

我们知道,在机器学习中,有三种不同的学习模式:监督学习无监督学习强化学习

  1. 监督学习,也称为有导师学习,网络输入包括数据和相应的输出标签信息。例如,在 MNIST 数据集中,手写数字的每个图像都有一个标签,代表图片中的数字值。
  2. 强化学习,也称为评价学习,不给网络提供期望的输出,但空间会提供给出一个奖惩的反馈,当输出正确时,给网络奖励,当输出错误时就惩罚网络。
  3. 无监督学习,也称为无导师学习,在网络的输入中没有相应的输出标签信息,网络接收输入,但既没有提供期望的输出,也没有提供来自环境的奖励,神经网络要在这种情况下学习输入数据中的隐藏结构。无监督学习非常有用,因为现存的大多数数据是没有标签的,这种方法可以用于诸如模式识别、特征提取、数据聚类和降维等任务。

k 均值聚类是一种无监督学习方法。

还记得哈利波特故事中的分院帽吗?那就是聚类,将新学生(无标签)分成四类:格兰芬多、拉文克拉、赫奇帕奇和斯特莱林。

人是非常擅长分类的,聚类算法试图让计算机也具备这种类似的能力,聚类技术很多,例如层次法、贝叶斯法和划分法。k 均值聚类属于划分聚类方法,将数据分成 k 个簇,每个簇有一个中心,称为质心,k 值需要给定。

k 均值聚类算法的工作原理如下:

  1. 随机选择 k 个数据点作为初始质心(聚类中心)。
  2. 将每个数据点划分给距离最近的质心,衡量两个样本数据点的距离有多种不同的方法,最常用的是欧氏距离。
  3. 重新计算每个簇的质心作为新的聚类中心,使其总的平方距离达到最小。
  4. 重复第 2 步和第 3 步,直到收敛。

准备工作

使用 TensorFlow 的 Estimator 类 KmeansClustering 来实现 k 均值聚类,具体实现可参考https://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/contrib/learn/python/learn/estimators/kmeans.py,可以直接进行 k 均值聚类和推理。根据 TensorFlow 文档,KmeansClustering 类对象可以使用以下__init__方法进行实例化: 

TensorFlow 文档对这些参数的定义如下:

  • num_clusters:要训练的簇数。
  • model_dir:保存模型结果和日志文件的目录。
  • initial_clusters:指定如何对簇初始化,取值请参阅 clustering_ops.kmeans。
  • distance_metric:聚类的距离度量方式,取值请参阅 clustering_ops.kmeans。
  • random_seed:Python 中的整数类型,用于初始化质心的伪随机序列发生器的种子。
  • use_mini_batch:如果为 true,运行算法时分批处理数据,否则一次使用全部数据集。
  • mini_batch_steps_per_iteration:经过指定步数后将计算的簇中心更新回原数据。更多详细信息参见 clustering_ops.py。
  • kmeans_plus_plus_num_retries:对于在 kmeans++ 方法初始化过程中采样的每个点,该参数指定在选择最优值之前从当前分布中提取的附加点数。如果指定了负值,则使用试探法对 O(log(num_to_sample)) 个附加点进行抽样。
  • relative_tolerance:相对误差,在每一轮迭代之间若损失函数的变化小于这个值则停止计算。有一点要注意就是,如果将 use_mini_batch 设置为 True,程序可能无法正常工作。

配置:请参阅 Estimator。

TensorFlow 支持将欧氏距离和余弦距离作为质心的度量,KmeansClustering 类提供了多种交互方法。在这里使用 fit()、clusters() 和 predict_clusters_idx() 方法:


本文标题:k均值聚类算法原理和(TensorFlow)实现(无师自通)

本文地址:https://www.hosteonscn.com/4265.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注