TensorFlow中K-Means Clustering实现:数据集转张量训练方法咨询
TensorFlow K-means 自有数据集转换与训练方法
前置说明
你使用的tf.compat.v1.estimator.experimental.KMeans要求输入为二维浮点型张量,每行对应1个样本,每列对应1个特征维度,且需通过符合estimator规范的输入函数input_fn传入训练流程。
完整操作步骤
1. 自有数据预处理
首先将你的数据集处理为纯数值的二维矩阵:
- 过滤无需参与聚类的字段(如样本ID、分类标签、时间戳等)
- 对分类特征做编码转换(如独热编码、标签编码)
- 补全/删除缺失值
- 可选做特征标准化/归一化,大幅提升聚类收敛速度和效果
示例代码(以CSV格式数据集为例):
import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler # 加载本地数据集 df = pd.read_csv("你的数据集路径.csv") # 指定参与聚类的特征列 feature_cols = ["特征1", "特征2", "特征N"] raw_features = df[feature_cols].values # 特征标准化 scaler = StandardScaler() processed_features = scaler.fit_transform(raw_features)
2. 构造符合要求的输入函数input_fn
KMeans estimator不能直接接收张量对象,需通过input_fn返回数据流水线:
import tensorflow as tf def build_input_fn(features, batch_size=None, epochs=None, shuffle=True): # 未指定批量大小时默认用全量数据训练 if not batch_size: batch_size = features.shape[0] def input_fn(): # 将numpy数组转换为tf数据集,指定浮点类型符合KMeans输入要求 dataset = tf.data.Dataset.from_tensor_slices(features.astype(np.float32)) if shuffle: dataset = dataset.shuffle(features.shape[0]) dataset = dataset.repeat(epochs) dataset = dataset.batch(batch_size) # 聚类无标签,直接返回特征即可 return dataset return input_fn
3. 模型训练
# 设定聚类簇数 NUM_CLUSTERS = 5 # 初始化KMeans模型 kmeans = tf.compat.v1.estimator.experimental.KMeans( num_clusters=NUM_CLUSTERS, # 特征维度和你的输入特征列数对齐 feature_columns=[tf.feature_column.numeric_column("x", shape=(processed_features.shape[1],))] ) # 生成训练输入函数 train_input_fn = build_input_fn(processed_features, epochs=10, shuffle=True) # 启动训练 kmeans.train(input_fn=train_input_fn, steps=1000)
注意事项
- 输入特征不能包含非数值、空值,否则转换张量时会报错
- 所有样本的特征数量必须一致,和初始化时指定的特征维度对齐
- 超大无需全量加载到内存,可以用
tf.data.TextLineDataset等接口做流式读取处理
内容的提问来源于stack exchange,提问作者Shilpa Shivamallu
相关产品推荐
相关产品推荐

