当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.compat.v1.estimator.experimental.KMeans用法及代码示例


K-Means 聚类的估计器。

警告:不建议将估算器用于新代码。估算器运行 v1.Session 风格的代码,这更难以正确编写,并且可能会出现意外行为,尤其是与 TF 2 代码结合使用时。估算器确实属于我们的 compatibility guarantees ,但除了安全漏洞之外不会收到任何修复。有关详细信息,请参阅migration guide

继承自: Estimator

用法

tf.compat.v1.estimator.experimental.KMeans(
    num_clusters, model_dir=None, initial_clusters=RANDOM_INIT,
    distance_metric=SQUARED_EUCLIDEAN_DISTANCE, seed=None, use_mini_batch=True,
    mini_batch_steps_per_iteration=1, kmeans_plus_plus_num_retries=2,
    relative_tolerance=None, config=None, feature_columns=None
)

参数

  • num_clusters 一个整数张量,指定集群的数量。如果 initial_clusters 是张量或 numpy 数组,则忽略此参数。
  • model_dir 保存模型结果和日志文件的目录。
  • initial_clusters 指定如何选择初始聚类中心。以下之一: * 具有初始聚类中心的张量或 numpy 数组。 * 一个可调用的f(inputs, k)选择并返回至k来自输入批次的中心。f可以自由返回任意数量的中心0k.它将根据需要在连续的输入批次上调用,直到所有num_clusters选择中心。
    • KMeansClustering.RANDOM_INIT:从输入批次中随机选择中心。如果批次大小小于num_clusters,则选择整个批次作为初始聚类中心,其余中心从连续输入批次中选择。
    • KMeansClustering.KMEANS_PLUS_PLUS_INIT:使用 kmeans++ 从第一个输入批次中选择中心。如果批量大小小于 num_clusters ,则会发生 TensorFlow 运行时错误。
  • distance_metric 用于聚类的距离度量。之一:
    • KMeansClustering.SQUARED_EUCLIDEAN_DISTANCE:向量uv之间的欧几里得距离定义为 ,它是元素差的绝对平方和的平方根。
    • KMeansClustering.COSINE_DISTANCE :向量 uv 之间的余弦距离定义为
  • seed Python 整数。 PRNG 的种子用于初始化中心。
  • use_mini_batch 一个布尔值,指定是否使用小批量k-means 算法。见上面的解释。
  • mini_batch_steps_per_iteration 更新后的集群中心同步回主副本之前的步骤数。仅在 use_mini_batch=True 时使用。见上面的解释。
  • kmeans_plus_plus_num_retries 对于在 kmeans++ 初始化期间采样的每个点,此参数指定在选择最佳之前从当前分布中抽取的附加点的数量。如果指定负值,则使用启发式方法对 O(log(num_to_sample)) 附加点进行采样。仅在 initial_clusters=KMeansClustering.KMEANS_PLUS_PLUS_INIT 时使用。
  • relative_tolerance 迭代之间损失变化的相对容差。如果损失变化小于此数量,则停止学习。如果 use_mini_batch=True ,这可能无法正常工作。
  • config tf.estimator.Estimator
  • feature_columns 包含模型使用的所有特征列的可选迭代。集合中的所有项目都应该是可以传递给 tf.feature_column.input_layer 的特征列实例。如果这是无,将使用所有函数。

抛出

  • ValueError 将无效参数传递给 initial_clustersdistance_metric

属性

  • config
  • model_dir
  • model_fn 返回绑定到 self.paramsmodel_fn
  • params

例子:

import numpy as np
import tensorflow as tf

num_points = 100
dimensions = 2
points = np.random.uniform(0, 1000, [num_points, dimensions])

def input_fn():
  return tf.compat.v1.train.limit_epochs(
      tf.convert_to_tensor(points, dtype=tf.float32), num_epochs=1)

num_clusters = 5
kmeans = tf.compat.v1.estimator.experimental.KMeans(
    num_clusters=num_clusters, use_mini_batch=False)

# train
num_iterations = 10
previous_centers = None
for _ in xrange(num_iterations):
  kmeans.train(input_fn)
  cluster_centers = kmeans.cluster_centers()
  if previous_centers is not None:
    print 'delta:', cluster_centers - previous_centers
  previous_centers = cluster_centers
  print 'score:', kmeans.score(input_fn)
print 'cluster centers:', cluster_centers

# map the input points to their clusters
cluster_indices = list(kmeans.predict_cluster_index(input_fn))
for i, point in enumerate(points):
  cluster_index = cluster_indices[i]
  center = cluster_centers[cluster_index]
  print 'point:', point, 'is in cluster', cluster_index, 'centered at', center

export_saved_model方法保存的SavedModel不包括聚类中心。但是,可以通过训练期间保存的最新检查点来检索聚类中心。具体来说,

kmeans.cluster_centers()

相当于

tf.train.load_variable(
    kmeans.model_dir, KMeansClustering.CLUSTER_CENTERS_VAR_NAME)

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.estimator.experimental.KMeans。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。