You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ML.NET中聚类数据点提取与最优聚类数确定问题咨询

ML.NET K-Means无监督学习问题解答与流程梳理

1. 获取训练数据的聚类分配结果

ML.NET的K-Means训练过程不会自动保存训练样本的聚类标签,必须将训练数据集重新输入模型执行预测,才能得到每个训练样本对应的聚类结果。

具体操作可通过模型的Transform方法处理原始训练数据,得到包含聚类标签的输出数据集:

// 假设model为训练完成的K-Means模型,trainingData是原始训练IDataView
var clusteredTrainingData = model.Transform(trainingData);

// 提取聚类标签列(默认列名为"PredictedLabel")
var clusterLabels = clusteredTrainingData.GetColumn<uint>("PredictedLabel");

你可以将输出数据集转换为DataFrame、枚举集合或导出到文件,从而关联每个训练样本与对应的聚类ID。

2. 最优聚类数选择方案

你提到的ClusteringMetrics.AverageDistance确实会随聚类数k的增大而持续减小,因此无法直接用它对比不同k值的模型效果。关于轮廓系数的实现及替代方案:

轮廓系数计算

ML.NET没有内置的轮廓系数计算API,需要自行实现,步骤如下:

  1. 用模型对训练集做预测,得到每个样本的聚类标签。
  2. 提取训练样本的特征向量(需与模型训练时使用的特征列一致)。
  3. 实现轮廓系数逻辑:
    • 对每个样本,计算其所在聚类内所有其他样本的平均距离( intra-cluster 距离)。
    • 计算该样本到最近的其他聚类中所有样本的平均距离( inter-cluster 距离)。
    • 单个样本的轮廓值 = (inter-cluster距离 - intra-cluster距离) / max(inter-cluster距离, intra-cluster距离)。
    • 所有样本的轮廓值取平均,即为整体轮廓系数,越接近1聚类效果越好。

替代评估方法

如果不想自行实现轮廓系数,可使用以下方法选择最优k:

  • 肘部法则:绘制k值(从2到预设最大值)与AverageDistance的变化曲线,找到曲线由陡变缓的"肘部"点,该点对应的k即为最优值。
  • Calinski-Harabasz指数:计算类间方差与类内方差的比值,数值越大说明聚类效果越好,同样需要自行实现计算逻辑。

ML.NET无监督学习基本流程

  1. 数据预处理:K-Means对特征尺度敏感,必须先对特征做归一化/标准化处理;同时完成缺失值填充、类别特征编码等常规预处理步骤。
  2. 构建训练管道:定义特征列、预处理操作及聚类训练器,示例:
var mlContext = new MLContext();
// 假设"Features"是已预处理的特征列
var pipeline = mlContext.Transforms.NormalizeMinMax("Features")
    .Append(mlContext.Clustering.Trainers.KMeans("Features", numberOfClusters: 5));
  1. 模型训练:调用Fit方法传入训练数据完成训练:
var model = pipeline.Fit(trainingData);
  1. 模型评估:仅当对比相同k值的模型时,使用mlContext.Clustering.Evaluate获取ClusteringMetrics做评估。
  2. 聚类分析:对训练集或新数据执行Transform得到聚类结果,结合原始数据统计每个聚类的特征分布、样本数量等,完成业务层面的分析。

内容的提问来源于stack exchange,提问作者ben_bekir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:46:19