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

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

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

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

[Column(")]
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(")]
      public float ID;

      [Column(")]
      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)))
                {
                    );
                    );

                    while(cursor.MoveNext())
                    {
                        ;
                        IDGetter(ref ID);
                        DvText Text = new DvText();
                        TextGetter(ref Text);
                        Console.WriteLine($"ID:{ID},Text:\"{Text}\",Text长度为{Text.Length}");
                    }
                }
            }

最后的输出结果:

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

第一行列名被过滤。

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

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

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

最新文章

  1. java 接口
  2. qqzoneQQ空间漏洞扫描器的设计attilax总结
  3. 一步一步开发Game服务器(一)
  4. Connect模块解析
  5. [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
  6. kail新手安装
  7. golang语言部分保留字的举例
  8. python装饰器总结
  9. bzoj1266
  10. C语言 结构体数组保存到二进制文件中
  11. HTTP Status 400 - Required request part &#39;file&#39; is not present
  12. MySQL57安装图解
  13. Netty学习笔记(二) 实现服务端和客户端
  14. Google Android SDK开发范例大全笔记 一
  15. XUnit测试框架-Python unittest
  16. Android中的Context(一)
  17. 字符串的顺序倒置。(Reverse)
  18. ☆ [HDU2089] 不要62「数位DP」
  19. GitHub使用SSHkey进行连接
  20. Google的Flutter工具允许开发者开发跨平台应用

热门文章

  1. OneAPM大讲堂 | Java 异常日志记录最佳实践
  2. linux 开机自启动脚本
  3. python中常用函数整理
  4. cc1plus.exe: error: unrecognized command line option &quot;-fno-keep-inline-dllexport &quot;
  5. Python 如何删除列表中的空值
  6. WPFの数据源事件变更通知
  7. C#深度学习の----深拷贝与浅拷贝
  8. javascript中的for in循环和for in循环的使用陷阱
  9. luogu P4781 【模板】拉格朗日插值
  10. 安装docker后访问外网失败