K-means代码演练(Tensorflow)

K-means

原理解释

K-means 是一种基于距离度量的聚类算法,其核心思想是将数据集划分成 k 个簇,每个簇的中心点即为该簇的聚类中心,同一个簇内的数据点距离该聚类中心的距离最小。

K-means 算法的实现过程:

  1. 随机初始化 k 个聚类中心,每个聚类中心代表一个簇。

  2. 对于每个数据点,计算它与 k 个聚类中心的距离,并将它划分到距离最近的聚类中心所代表的簇中。

  3. 对于每个簇,重新计算该簇的聚类中心,即计算该簇中所有数据点的平均值并将其作为该簇的新聚类中心。

  4. 重复步骤 2 和步骤 3,直到簇的分配不再改变,或者达到预设的迭代次数为止。

  5. 最后得到的 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: 特征列。

效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RBF k-means是一种基于径向基函数(Radial Basis Function)的k-means聚类算法。在该算法中,我们首先根据给定的数据集和预定的簇数k来初始化k个聚类中心。然后,通过计算数据点与聚类中心之间的距离来将每个数据点分配到最近的聚类中心。 具体的RBF k-means算法步骤如下: 1. 确定聚类数k和数据集。 2. 初始化k个聚类中心。可以使用随机选择或者其他方法来初始化聚类中心。 3. 计算每个数据点与聚类中心之间的距离。常用的距离度量方法有欧几里得距离、余弦相似度、曼哈顿距离等。 4. 将每个数据点分配到距离最近的聚类中心。 5. 更新聚类中心。对于每个簇,计算簇中所有数据点的平均值,将该平均值作为新的聚类中心。 6. 重复步骤3-5直到聚类中心不再发生变化或达到预定的停止条件。 7. 得到最终的聚类结果。 RBF k-means算法的关键之处在于使用了径向基函数来计算距离。径向基函数是一种非线性函数,它的值随着距离的增加而逐渐减小。通过引入径向基函数,可以在聚类过程中更好地考虑数据点之间的相似性。 具体实现RBF k-means算法代码可以参考以下伪代码: ``` 输入:数据集D,聚类数k 输出:聚类结果 1. 初始化k个聚类中心 2. 重复以下步骤直到聚类中心不再发生变化或达到停止条件: 3. 对于每个数据点p: 4. 计算p与每个聚类中心的距离 5. 将p分配到距离最近的聚类中心 6. 更新每个簇的聚类中心为簇中所有数据点的平均值 输出聚类结果 ``` 总之,RBF k-means算法通过引入径向基函数来计算数据点之间的距离,并将数据点分配到与其最近的聚类中心,从而实现聚类的目标。通过对代码实施上述算法步骤的实现,可以得到最终的聚类结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry_ww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值