K-means
原理解释
K-means 是一种基于距离度量的聚类算法,其核心思想是将数据集划分成 k 个簇,每个簇的中心点即为该簇的聚类中心,同一个簇内的数据点距离该聚类中心的距离最小。
K-means 算法的实现过程:
-
随机初始化 k 个聚类中心,每个聚类中心代表一个簇。
-
对于每个数据点,计算它与 k 个聚类中心的距离,并将它划分到距离最近的聚类中心所代表的簇中。
-
对于每个簇,重新计算该簇的聚类中心,即计算该簇中所有数据点的平均值并将其作为该簇的新聚类中心。
-
重复步骤 2 和步骤 3,直到簇的分配不再改变,或者达到预设的迭代次数为止。
-
最后得到的 k 个聚类中心及它们所代表的簇即为聚类结果。
K-means 算法的优点是简单、高效,而缺点则是聚类结果受初始聚类中心的选择影响较大,对于不规则形状的簇或噪声点,K-means 的效果会较差。
K-means 算法的应用非常广泛,比如在图像分割、推荐系统、无监督降维等领域都有广泛的应用。
代码
# -*- coding:utf-8 -*-
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
print(tf.__version__)
# 加载文本文件,保存为 NumPy 二进制文件
data = np.loadtxt('D:/desktop/data.txt')
np.save('data.npy', data)
# 加载数据集
data = np.load('data.npy', allow_pickle=True)
print(data)
# 定义输入函数
def input_fn():
return tf.compat.v1.train.limit_epochs(tf.convert_to_tensor(data, dtype=tf.float32), num_epochs=1)
# 定义 K-means 模型
kmeans = tf.compat.v1.estimator.experimental.KMeans(
num_clusters=8, # 聚类数
use_mini_batch=True # 是否使用小批量随机梯度下降
)
# 训练模型
kmeans.train(input_fn)
# 获取聚类中心和数据点的标签
clusters = kmeans.cluster_centers()
labels = list(kmeans.predict_cluster_index(input_fn))
# 将聚类结果保存到 CSV 文件中
df = pd.DataFrame(data)
df['label'] = labels
df.to_csv('clustering_result.csv', index=False)
# 获取聚类标签并转换为numpy数组
labels_np = np.array(labels)
# 定义颜色列表
colors = ['red', 'green', 'blue', 'yellow', 'purple', 'orange', 'pink', 'gray']
# 绘制散点图
for i in range(len(colors)):
plt.scatter(data[labels_np == i, 0], data[labels_np == i, 1], color=colors[i], alpha=0.5)
# 设置图形标题和坐标轴标签
plt.title('K-means Clustering Result')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
# 显示图形
plt.show()
tf.compat.v1.estimator.experimental.KMeans函数的各参数解释
- num_clusters: 聚类数目,即 K 值。
- model_dir: 模型保存路径。
- initial_clusters: 聚类中心初始化方式,默认为 "RANDOM_INIT" 即随机初始化,还可以选择 "KMEANS_PLUS_PLUS_INIT" 或自定义初始化方法。
- distance_metric: 距离度量方式,默认为 "SQUARED_EUCLIDEAN_DISTANCE" 即欧几里得距离的平方,还可以选择 "COSINE_DISTANCE" 或自定义距离度量方式。
- seed: 随机数种子。
- use_mini_batch: 是否使用 mini-batch KMeans 算法,True 表示使用 mini-batch KMeans 算法。
- mini_batch_steps_per_iteration: mini-batch KMeans 算法每次迭代的步数。
- kmeans_plus_plus_num_retries: KMeans++ 初始化方式尝试次数。
- relative_tolerance: 聚类中心移动的相对容忍度,当聚类中心移动距离小于相对容忍度时算法收敛。
- config: TensorFlow 配置。
- feature_columns: 特征列。