如何使用ML.Net查找目标属性对应的最优输入特征组合
ML.Net 最优生产条件查询实现方案
你需要实现的是以目标属性为核心的最优特征组合搜索,在ML.Net下可以通过你已经搭建的聚类方案完成,也可以搭配回归+参数搜索方案实现,具体操作如下:
聚类方案(已完成建模的后续操作)
你已经搭建好聚类模型后,按以下步骤即可得到最优参数组合:
- 第一步:从全量数据集筛选高目标表现样本:过滤出
ResultAccuracy在你预期的高准确率区间(比如≥97%)的所有样本,先把满足目标要求的候选池筛出来。 - 第二步:批量预测高优样本所属簇:调用你训练好的聚类模型的
Transform()方法,给每个高优样本打上所属的簇ID。 - 第三步:定位最优簇:统计每个簇内样本的平均
ResultAccuracy、样本数量,选择平均准确率最高、样本量足够大(避免偶然性)的簇作为最优条件簇。 - 第四步:提取最优参数组合:对最优簇内的所有非目标属性做统计输出:
- 数值型特征(Volume、Viscosity、InstrumentTempreture、Concentration)输出中位数、95%置信区间,作为该参数的最优取值范围
- 类别型特征(SampleType)输出出现频率最高的Top N取值,作为最优类别选项
参考代码片段:
// 高准确率样本筛选 var highAccuracySamples = fullData.Where(s => s.ResultAccuracy >= 97).ToList(); // 预测样本所属簇 var clusterPredictions = clusteringModel.Transform(mlContext.Data.LoadFromEnumerable(highAccuracySamples)); var predictionList = mlContext.Data.CreateEnumerable<ClusterPrediction>(clusterPredictions, reuseRowObject: false).ToList(); // 关联样本与簇ID,统计最优簇 var sampleWithCluster = highAccuracySamples.Zip(predictionList, (sample, pred) => new { sample, pred.PredictedClusterId }); var bestCluster = sampleWithCluster.GroupBy(x => x.PredictedClusterId) .Select(g => new { ClusterId = g.Key, AvgAccuracy = g.Average(x => x.sample.ResultAccuracy), SampleCount = g.Count() }) .OrderByDescending(x => x.AvgAccuracy) .First(x => x.SampleCount >= 10); // 过滤样本量过小的偶发簇 // 统计最优簇的参数范围 var bestClusterSamples = sampleWithCluster.Where(x => x.PredictedClusterId == bestCluster.ClusterId).Select(x => x.sample).ToList(); var optimalVolume = new { Min = bestClusterSamples.Min(s => s.Volume), Max = bestClusterSamples.Max(s => s.Volume), Median = bestClusterSamples.Select(s => s.Volume).OrderBy(v => v).ElementAt(bestClusterSamples.Count/2) }; // 其余数值型、类别型参数同理统计输出
替代方案:回归模型+参数搜索(适合需要更精准最优值的场景)
如果聚类得到的区间太粗,你可以用回归方案实现更精准的寻优:
- 第一步:训练回归模型,把
ResultAccuracy作为Label,其他所有属性作为特征,训练回归预测模型(可选用ML.Net的FastTreeRegression、LightGbmRegression等算法),模型拟合度达标后就可以通过输入任意参数组合预测对应的准确率。 - 第二步:参数寻优:基于你业务中各参数的合理取值范围,用网格搜索或者ML.Net AutoML的超参数优化模块,遍历所有合法的参数组合,找到预测
ResultAccuracy最接近100%的参数组合即可。
注意事项
- 提取到的最优参数组合需要和实际生产的验证数据做交叉校验,避免过拟合导致的参数无效
- 如果参数存在业务约束(比如InstrumentTempreture不能超过60℃),需要在统计或搜索阶段提前过滤不符合约束的样本/参数组合
内容的提问来源于stack exchange,提问作者GarethReid
相关产品推荐
相关产品推荐

