tensorflow k-means例子
时间: 2023-06-23 09:57:05 浏览: 96
以下是一个使用TensorFlow实现K-Means算法的示例代码:
```python
import numpy as np
import tensorflow as tf
# 生成样本数据
num_points = 200
vectors_set = []
for i in range(num_points):
if np.random.random() > 0.5:
vectors_set.append([np.random.normal(0.0, 0.9), np.random.normal(0.0, 0.9)])
else:
vectors_set.append([np.random.normal(3.0, 0.5), np.random.normal(1.0, 0.5)])
# 将数据转换为TensorFlow的常量张量
vectors = tf.constant(vectors_set)
# 定义K-Means算法的簇数
k = 4
# 随机初始化质心
centroids = tf.Variable(tf.slice(tf.random.shuffle(vectors), [0, 0], [k, -1]))
# 计算每个样本点到各个质心的距离
expanded_vectors = tf.expand_dims(vectors, 0)
expanded_centroids = tf.expand_dims(centroids, 1)
distances = tf.reduce_sum(tf.square(tf.subtract(expanded_vectors, expanded_centroids)), 2)
assignments = tf.argmin(distances, 0)
# 更新质心位置
means = []
for c in range(k):
means.append(tf.reduce_mean(tf.gather(vectors, tf.reshape(tf.where(tf.equal(assignments, c)), [1, -1])), reduction_indices=[1]))
new_centroids = tf.concat(means, 0)
# 初始化变量并运行会话
init_op = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init_op)
# 执行K-Means算法
for step in range(100):
_, centroid_values, assignment_values = sess.run([new_centroids, centroids, assignments])
if step % 10 == 0:
print("Step {}: Centroids = {}".format(step, centroid_values))
# 关闭会话
sess.close()
```
这段代码生成了200个二维数据点,并使用K-Means算法将它们分为4个簇。在每一步迭代中,算法会计算每个数据点到各个质心的距离并将每个点分配到距离最近的簇中。然后,算法会根据当前的簇分配来更新质心的位置,并重复以上步骤直到收敛。
阅读全文