ML.NET Cookbook:(11)如果我的训练数据不在文本文件中怎么办?

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ML.NET Cookbook:(11)如果我的训练数据不在文本文件中怎么办?相关的知识,希望对你有一定的参考价值。

对于ML.NET,通常演示的用例是当训练数据驻留在磁盘的某个地方时,我们使用TextLoader来加载它。然而,在真实的训练场景中,训练数据可以在其他地方:在一堆SQL表中,从日志文件中提取,甚至动态生成。

下面是我们如何使用模式理解[1]将现有的C#IEnumerable作为数据视图引入ML.NET。

在本例中,我们假设我们建立了客户流失预测模型,并且我们可以从生产系统中提取以下特征:

  • 客户ID(模型忽略)

  • 客户是否有流失(目标“标签”)

  • “人口统计类别”(字符串,如“年轻人”等)

  • 最近5天的访问次数。

private class CustomerChurnInfo
{
    public string CustomerID { get; set; }
    public bool HasChurned { get; set; }
    public string DemographicCategory { get; set; }
    // 最近5天内的访问,最早到最新。
    [VectorType(5)]
    public float[] LastVisits { get; set; }
}

有了这些信息,下面就是我们如何将这些数据转换为ML.NET数据视图并对其进行训练的方法:

// 第一步:将数据加载为IDataView。
// 假设“ GetChurnData()”从某处获取并返回训练数据
IEnumerable<CustomerChurnInfo> churnData = GetChurnInfo();

var trainData = mlContext.Data.LoadFromEnumerable(churnData);

// 建立学习管道。
// 在我们的案例中,我们将对人口统计类别进行一次编码,然后将其与访问次数结合起来。
// 我们应用FastTree二进制分类器来预测“ HasChurned”标签。

var pipeline =
    // 将分类功能“DemographicCategory”转换为独热编码。
    mlContext.Transforms.Categorical.OneHotEncoding("DemographicCategoryOneHot", "DemographicCategory")
    // 将所有分类特征转换为索引,并构建一个“词袋”。
    .Append(mlContext.Transforms.Concatenate("Features", new[] { "DemographicCategoryOneHot", "LastVisits" })
    .Append(mlContext.BinaryClassification.Trainers.FastTree());

var model = pipeline.Fit(trainData);

欢迎关注我的个人公众号”My IO“

参考资料

[1]

模式理解: https://github.com/dotnet/machinelearning/blob/main/docs/code/SchemaComprehension.md

以上是关于ML.NET Cookbook:(11)如果我的训练数据不在文本文件中怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

ML.NET Cookbook:(18)如何在文本数据上训练模型?

ML.NET Cookbook:如何从文本文件加载数据?

ML.NET Cookbook:(12)我想看看模型的系数

ML.NET Cookbook:(16)什么是规范化?为什么我需要关心?

ML.NET Cookbook:如何训练回归模型?

ML.NET Cookbook:如何查看中间过程数据?