分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

学习ML.NET(3): 导入数据集

发布时间:2023-09-06 02:16责任编辑:郭大石关键词:.NET

机器学习算法需要作用于数据,用来训练算法模型。数据集通常是以纯文本文件存储的表格数据,文件的每一行是一条数据记录,每条记录由多列组成,列之间用分隔符(一般是逗号,)分开,例如前面用到过的鸢尾花数据集。

在ML.NET中,使用TextLoader将文本文件导入到数据集。使用方式如下:

new TextLoader(filePath).CreateFrom<TInput>()

filePath是数据集文件路径。TInput是数据类,数据类中的每个属性对应数据集文件中的一列,属性使用ColumnAttribute匹配指定源列的索引,例如:

[Column("0")]public float SepalLength;

CreateFrom方法包含多个参数,用于指定如何处理文本:

  • useHeader:文件第一行是否为列名,默认为false
  • separator:列分隔符,默认是制表符\t
  • allowQuotedStrings:列值是否是有引号字符串,默认是true,例如“ABC”实际值是ABC,不包含引号
  • trimWhitespace:是否去除列值结尾空白,默认是false,例如“ABC ”实际值的长度是4,包含一个空格

示例程序

假设有一个数据集test-data.txt,包含1列Id和一列文本数据,列名分别是Col1和Col2,文件内容如下:

"Col1","Col2"1,"包含逗号和结尾空格, "2,包含逗号, 3,包含结尾空格 

创建对应的数据类,数据类属性名可以不和列名一致,只要索引对应就可以了:

public class TestData{ ?????[Column("0")] ?????public float ID; ?????[Column("1")] ?????public string Text;}

创建TextLoader:

var loader = new Microsoft.ML.Data.TextLoader("test-data.txt").CreateFrom<TestData>( ????????????????useHeader: true, ?????????????????separator: ‘,‘, ?????????????????allowQuotedStrings: true, ?????????????????trimWhitespace: true);

接着我们载入数据集:

using (var environment = new TlcEnvironment()) ???????????{ ???????????????var experiment = environment.CreateExperiment(); ???????????????var output = loader.ApplyStep(null, experiment) as ILearningPipelineDataStep; ???????????????experiment.Compile(); ???????????????loader.SetInput(environment, experiment); ???????????????experiment.Run(); ???????????????var data = experiment.GetOutput(output.Data); ???????????????using (var cursor = data.GetRowCursor((a => true))) ???????????????{ ???????????????????var IDGetter = cursor.GetGetter<float>(0); ???????????????????var TextGetter = cursor.GetGetter<DvText>(1); ??????????????????????????????????????while(cursor.MoveNext()) ???????????????????{ ???????????????????????float ID = 0; ???????????????????????IDGetter(ref ID); ???????????????????????DvText Text = new DvText(); ???????????????????????TextGetter(ref Text); ???????????????????????Console.WriteLine($"ID:{ID},Text:\"{Text}\",Text长度为{Text.Length}"); ???????????????????} ???????????????} ???????????}

最后的输出结果:

ID:1,Text:"包含逗号和结尾空格, ",Text长度为11ID:2,Text:"包含逗号",Text长度为4ID:3,Text:"包含结尾空格",Text长度为6

第一行列名被过滤。

第二行的文本列用引号引着,结果是原样输出。

第三行的文本列虽然有逗号,但是作为了分隔符。

第四行的文本列的结尾空白被去除。

学习ML.NET(3): 导入数据集

原文地址:https://www.cnblogs.com/feiyun0112/p/ML-NET-3.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved