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

VS机器学习向导二分类逻辑及Auto ML API精度优化咨询

问题

我在Visual Studio 2022中使用ML.NET处理一个二分类问题。通过VS中的机器学习向导(右键项目→添加→机器学习模型),我得到了精度超过90%的良好结果。但我希望通过源代码实现而非向导的“黑箱操作”,因此尝试用Auto ML API复现结果。目前精度仅能达到向导结果的几个百分点以内,但始终无法完全匹配,推测遗漏了某些步骤。

我当前的实现步骤如下:

  1. 创建新的MLContext,并用其加载CSV文件中的数据。我尝试过显式拆分训练集和测试集,也试过让ML.NET自动处理,两者效果无差异。
  2. 按照向导UI中的设置配置列信息,处理数值型、类别型及忽略列。
  3. 创建并运行实验:
var settings = new BinaryExperimentSettings()
{
    MaxExperimentTimeInSeconds = 60 * 15, // Train for 15 minutes, same as in wizard
    CacheDirectoryName = null, // Skip the disk and store in-memory
};

BinaryClassificationExperiment experiment = context.Auto().CreateBinaryClassificationExperiment(settings);

// Actually Train the model
ExperimentResult<BinaryClassificationMetrics> result;
result = experiment.Execute(trainData: trainData,
    progressHandler: new ProgressReporter(),
    columnInformation: columnInformation
);

请问向导存在哪些我未实现的关键步骤?或者有什么方法可以提升我的模型精度?

解决方案

向导可能遗漏的关键步骤

  • 数据预处理细节:VS机器学习向导会自动添加一系列预处理操作,比如缺失值填充(用均值/众数)、数值特征归一化/标准化、异常值处理等。你当前的代码未显式配置这些步骤,而这些预处理对模型精度影响很大。可以查看向导生成的模型代码(右键.mlnet文件→查看代码),里面会包含完整的预处理Pipeline。
  • 数据集分层拆分:向导默认会采用分层拆分策略,保持训练集和测试集中正负样本的比例一致,避免因随机拆分导致的样本分布偏差。如果你的手动拆分未做分层,会导致模型评估结果出现差异。
  • AutoML参数差异:向导可能指定了特定的优化指标(比如优先优化AUC而非Accuracy),或者开启了EnableOnnxCompatibility等你未配置的参数。另外,向导的AutoML可能默认启用了更多的算法搜索空间,而你的代码未做调整。
  • 数据加载的细节配置:向导生成的代码中,LoadFromTextFile会包含更细致的参数(比如HasHeader、SeparatorChar、处理带引号的字段、跳过注释行等),如果你的数据加载参数和向导不一致,会导致输入数据存在差异。

提升精度并复现向导结果的方法

  • 直接复用向导生成的Pipeline:查看向导生成的模型代码,里面有完整的预处理和训练流程定义,包括所有特征工程步骤和算法选择。直接将这些代码复制到你的项目中,能100%复现向导的结果。
  • 显式添加预处理步骤:在你的代码中手动添加缺失值填充、特征归一化等操作,示例如下:
// 示例预处理Pipeline
var pipeline = context.Transforms.FillMissingValues("NumericFeature1")
    .Append(context.Transforms.NormalizeMinMax("NumericFeature1"))
    .Append(context.Transforms.Categorical.OneHotEncoding("CategoryFeature1"))
    .Append(context.Transforms.Concatenate("Features", "NumericFeature1", "CategoryFeature1"));
  • 对齐AutoML配置:将BinaryExperimentSettings中的参数与向导对齐,比如指定相同的优化指标:
var settings = new BinaryExperimentSettings()
{
    MaxExperimentTimeInSeconds = 60 * 15,
    OptimizingMetric = BinaryClassificationMetric.Accuracy, // 匹配向导的优化指标
    CacheDirectoryName = null,
    RandomSeed = 42 // 固定随机种子,确保实验可复现
};
  • 确保数据加载一致:复制向导生成代码中的LoadFromTextFile参数,比如:
var data = context.Data.LoadFromTextFile<YourDataModel>(
    "data.csv",
    separatorChar: ',',
    hasHeader: true,
    allowQuoting: true
);
  • 固定随机种子:在创建MLContext时设置固定的随机种子,消除随机性带来的结果波动:
var context = new MLContext(seed: 42);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:47:25