c# - 在 ML.NET 中向 IDataView 添加自定义列
问题描述
我想在加载我IDataView
的文件后添加一个自定义列。在每一行中,列值应该是前 2 个值的总和。一种斐波那契数列。
我想创建一个自定义转换器,但我找不到可以帮助我理解如何进行的东西。我还尝试克隆 ML.Net Git 存储库,以查看其他转换器是如何实现的,但我看到许多类被标记为内部,因此我无法在我的项目中重复使用它们。
解决方案
有一种方法可以使用CustomMapping创建自定义转换
这是我用于此答案的示例。
输入和输出类:
class InputData
{
public int Age { get; set; }
}
class CustomMappingOutput
{
public string AgeName { get; set; }
}
class TransformedData
{
public int Age { get; set; }
public string AgeName { get; set; }
}
然后,在 ML.NET 程序中:
MLContext mlContext = new MLContext();
var samples = new List<InputData>
{
new InputData { Age = 16 },
new InputData { Age = 35 },
new InputData { Age = 60 },
new InputData { Age = 28 },
};
var data = mlContext.Data.LoadFromEnumerable(samples);
Action<InputData, CustomMappingOutput> mapping =
(input, output) =>
{
if (input.Age < 18)
{
output.AgeName = "Child";
}
else if (input.Age < 55)
{
output.AgeName = "Man";
}
else
{
output.AgeName = "Grandpa";
}
};
var pipeline = mlContext.Transforms.CustomMapping(mapping, contractName: null);
var transformer = pipeline.Fit(data);
var transformedData = transformer.Transform(data);
var dataEnumerable = mlContext.Data.CreateEnumerable<TransformedData>(transformedData, reuseRowObject: true);
foreach (var row in dataEnumerable)
{
Console.WriteLine($"{row.Age}\t {row.AgeName}");
}
推荐阅读
- python - 如何在管理面板中显示 Django 模型的外键作为其属性?
- node.js - Telegraf.js 使用 ctx.reply || bot.action/hears 内循环
- javascript - 在 Angular 中使用动态类型实现
- firebase - 如何在 Google 和 Microsoft 的文档查看器上使用 Firebase 存储 URL
- php - 将 JSON 存储到 oracle 数据库
- python - 尝试运行 tensorflow 示例代码时不兼容的包
- excel - 拖放 VBA 警报
- java - 如何在scala中用空格分割字符串并同时引用两者?
- android - 在 android studio 中使用 EditText 上的数字键盘
- python - 使用文本文件中每一行的最后一个元素创建一个列表