【问题标题】:How to predict/score XGBoost or LightGBM in .NET Framework 4.6.1 application如何在 .NET Framework 4.6.1 应用程序中预测/评分 XGBoost 或 LightGBM
【发布时间】:2019-01-05 20:00:15
【问题描述】:

我有一个机器学习问题,我使用LightGBMXGBoost 在训练/测试数据上获得了非常好的结果。下一步是从其中一个模型中获取预测到现有 C# 应用程序 (.NET Framework 4.6.1) 是否有任何库可以帮助我做到这一点?到目前为止我尝试过的:

  • ML.NET:应该适用于LigthGBM,但由于this bug,它仅适用于.NET Core。
  • Windows.ML:这应该能够预测 ONNX 模型,我设法从我的 XGBoost 模型创建了一个 ONNX 模型。但 Windows.ML 似乎只适用于 UWP 应用,至少所有示例都是 UWP。
  • SharpLearning:这个库有一个到 XGBoost 的接口。不幸的是,它不支持我所依赖的样本权重。
  • CNTK:尝试加载 ONNX 文件(类似于 this example),但得到:错误:CNTK 不支持 ONNX (TreeEnsembleClassifier)。

有什么建议,还是我必须等待 ML.NET 修复错误?

【问题讨论】:

  • 既然你有一个 ONNX 模型,你可以在 C# 中使用 CNTK 来读取和预测它。我承认,尽管这样做并不是很简单。这个文档可能会有所帮助 - docs.microsoft.com/en-us/cognitive-toolkit/…
  • 感谢您的建议@Jon。我对我的 ONNX 文件进行了尝试,当尝试加载文件时,我得到:错误:CNTK 不支持 ONNX(TreeEnsembleClassifier)。现在已将此添加到上面的“我到目前为止尝试过的内容”中

标签: c# xgboost lightgbm ml.net onnx


【解决方案1】:

我能够在net461 控制台应用程序中使用 LightGBM。仅当您使用 packages.config 管理 NuGet 包时,才会出现上述错误。为了解决 LightGBM nuget 包中列出的错误,您可以采用以下方法之一:

  1. 使用新的“SDK 样式”.csproj,但将 TargetFramework 设置为 net461

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net461</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.ML.LightGBM" Version="0.3.0" />
  </ItemGroup>

  <ItemGroup>
    <None Update="iris-data.txt">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>
  1. 将您的普通 .NET Framework .csproj 更改为使用 &lt;PackageReference&gt; 而不是 packages.config。您可以在工具 -> NuGet 包管理器菜单下的包管理器设置中执行此操作。 “默认包管理格式”。您可以参考Migrate from packages.config to PackageReference 文档了解更多信息。

  <ItemGroup>
    <PackageReference Include="Microsoft.ML">
      <Version>0.3.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.ML.LightGBM">
      <Version>0.3.0</Version>
    </PackageReference>
  </ItemGroup>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多