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

在R中保存LightGBM模型并在C#中加载的格式兼容问题

解决R训练模型与C#加载的格式兼容问题

方案1:使用微软官方microsoftml包导出ML.NET兼容的Zip模型

这个方案最直接,microsoftml是微软专为R与ML.NET互操作设计的包,导出的Zip模型可直接被C#的ML.NET加载。

R端代码(训练并导出模型)

# 安装依赖包
install.packages("microsoftml")
library(microsoftml)

# 示例训练数据
train_data <- data.frame(
  feature1 = c(1.2, 3.1, 5.4, 2.7, 4.3),
  target = c(2.5, 6.3, 11.0, 5.5, 8.7)
)

# 训练线性回归模型(可替换为rxLogisticRegression等其他支持模型)
trained_model <- rxLinReg(target ~ feature1, data = train_data)

# 导出为ML.NET兼容的Zip格式
rxSaveModel(trained_model, "mlnet_compatible_model.zip", overwrite = TRUE)

C#端代码(加载模型并预测)

using Microsoft.ML;
using Microsoft.ML.Data;

// 定义模型输入输出类
public class ModelInput
{
    [LoadColumn(0)]
    public float feature1 { get; set; }
}

public class ModelOutput
{
    [ColumnName("Score")]
    public float PredictedTarget { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var mlContext = new MLContext();
        
        // 加载R导出的Zip模型
        var loadedModel = mlContext.Model.Load("mlnet_compatible_model.zip", out var inputSchema);
        
        // 创建预测引擎
        var predictor = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(loadedModel);
        
        // 测试预测
        var testInput = new ModelInput { feature1 = 6.0f };
        var predictionResult = predictor.Predict(testInput);
        
        System.Console.WriteLine($"预测结果:{predictionResult.PredictedTarget}");
    }
}

方案2:将R模型转换为ONNX格式(适配非microsoftml模型)

如果你的模型是用caret、xgboost等第三方R库训练的,可将模型转换为ONNX通用格式,再用C#的ONNX Runtime或ML.NET加载。

R端代码(转换为ONNX)

以XGBoost模型为例:

install.packages(c("xgboost", "onnx"))
library(xgboost)
library(onnx)

# 准备训练数据
train_matrix <- as.matrix(data.frame(feature1 = c(1.2, 3.1, 5.4, 2.7, 4.3)))
train_label <- c(2.5, 6.3, 11.0, 5.5, 8.7)
dtrain <- xgb.DMatrix(train_matrix, label = train_label)

# 训练XGBoost模型
xgb_model <- xgb.train(data = dtrain, nrounds = 15, objective = "reg:squarederror")

# 转换为ONNX格式(input_shape需匹配输入特征维度)
save_model_to_onnx(xgb_model, "model.onnx", input_shape = list(c(1L, 1L)))

C#端代码(用ONNX Runtime加载预测)

using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;

class Program
{
    static void Main(string[] args)
    {
        // 初始化ONNX推理会话
        using var session = new InferenceSession("model.onnx");
        
        // 构造输入张量(维度需与ONNX模型定义一致)
        var inputTensor = new DenseTensor<float>(new float[] {6.0f}, new int[] {1, 1});
        var inputData = new List<NamedOnnxValue>
        {
            NamedOnnxValue.CreateFromTensor("input", inputTensor)
        };
        
        // 执行预测
        using var outputResults = session.Run(inputData);
        var predictedValue = outputResults.First().AsTensor<float>()[0];
        
        System.Console.WriteLine($"预测结果:{predictedValue}");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:50:25