如何在 .NET Framework 4.6.1 应用程序中 predict/score XGBoost 或 LightGBM
How to predict/score XGBoost or LightGBM in .NET Framework 4.6.1 application
我有一个机器学习问题,我使用 LightGBM
和 XGBoost
在 training/test 数据上获得了很好的结果。下一步是从这些模型之一获取预测到现有的 C# 应用程序 (.NET Framework 4.6.1) 是否有任何库可以帮助我做到这一点?到目前为止我尝试了什么:
- ML.NET: Should work for
LigthGBM
, but due to this bug 它仅适用于 .NET Core。
- Windows.ML:这应该能够预测一个 ONNX 模型,我设法从我的
XGBoost
模型创建了一个 ONNX 模型。但是 Windows.ML 似乎只适用于 UWP 应用程序,至少所有示例都是 UWP。
- SharpLearning:这个库有一个到
XGBoost
的接口。不幸的是,它不支持我所依赖的样本权重。
- CNTK:尝试加载 ONNX 文件(类似于 this example),但得到:错误:CNTK 不支持 ONNX (TreeEnsembleClassifier)。
有任何建议,还是我必须等待 ML.NET 修复错误?
我能够在 net461
控制台应用程序中使用 LightGBM。仅当您使用 packages.config
管理 NuGet 包时才会出现上述错误。为了解决 LightGBM nuget 包中列出的错误,您可以采用以下方法之一:
- 使用新的 "SDK-style" .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>
- 将您的普通 .NET Framework .csproj 更改为使用
<PackageReference>
而不是 packages.config
。您可以在工具 -> NuGet 包管理器菜单下的包管理器设置中执行此操作。 "Default package management format"。您可以参考 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>
我有一个机器学习问题,我使用 LightGBM
和 XGBoost
在 training/test 数据上获得了很好的结果。下一步是从这些模型之一获取预测到现有的 C# 应用程序 (.NET Framework 4.6.1) 是否有任何库可以帮助我做到这一点?到目前为止我尝试了什么:
- ML.NET: Should work for
LigthGBM
, but due to this bug 它仅适用于 .NET Core。 - Windows.ML:这应该能够预测一个 ONNX 模型,我设法从我的
XGBoost
模型创建了一个 ONNX 模型。但是 Windows.ML 似乎只适用于 UWP 应用程序,至少所有示例都是 UWP。 - SharpLearning:这个库有一个到
XGBoost
的接口。不幸的是,它不支持我所依赖的样本权重。 - CNTK:尝试加载 ONNX 文件(类似于 this example),但得到:错误:CNTK 不支持 ONNX (TreeEnsembleClassifier)。
有任何建议,还是我必须等待 ML.NET 修复错误?
我能够在 net461
控制台应用程序中使用 LightGBM。仅当您使用 packages.config
管理 NuGet 包时才会出现上述错误。为了解决 LightGBM nuget 包中列出的错误,您可以采用以下方法之一:
- 使用新的 "SDK-style" .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>
- 将您的普通 .NET Framework .csproj 更改为使用
<PackageReference>
而不是packages.config
。您可以在工具 -> NuGet 包管理器菜单下的包管理器设置中执行此操作。 "Default package management format"。您可以参考 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>