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)如何在文本数据上训练模型?