向已有KMEAN模型分配新样本时,应采用哪组均值/SD做标准化?
正确选择:用旧样本(100个)的均值/SD标准化新样本
- 标准化的核心是让新样本和训练模型时的样本保持完全一致的数据尺度。你训练KMeans时,模型的质心是基于旧样本标准化后的结果计算的——如果新样本用新的均值/SD重新标准化,数据分布的基准变了,质心就失去了参考价值,聚类结果肯定不对。
- 用新样本或全部样本的统计量标准化,本质是篡改了数据的“标尺”:就像你用厘米尺量布做了衣服,现在换英寸尺量新布,裁出来的料子根本没法和之前的衣服匹配。
- 工业界的标准做法是:训练阶段把标准化用的均值、标准差和模型一起保存(比如和Pickle文件打包),预测新数据时直接复用这些参数,绝对不会用新数据的统计量重新计算。
简单代码示例
import pickle import numpy as np # 加载训练好的模型和对应的标准化参数 with open('kmeans_model.pkl', 'rb') as f: kmeans_model, train_data_mean, train_data_std = pickle.load(f) # 用旧样本的统计量标准化新数据 new_samples_normalized = (new_samples_array - train_data_mean) / train_data_std # 预测新样本的类别 cluster_predictions = kmeans_model.predict(new_samples_normalized)
内容的提问来源于stack exchange,提问作者Peerapat Tancharoen
相关产品推荐
相关产品推荐

