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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值