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

在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

第一行列名被过滤。

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

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

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

学习ML.NET(3): 导入数据集的更多相关文章

  1. ArcGIS案例学习笔记_3_2_CAD数据导入建库

    ArcGIS案例学习笔记_3_2_CAD数据导入建库 计划时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性,管理 问题:CAD存在拓扑错误,标注位置偏移 教程:pdf ...

  2. 使用catboost解决ML中高维度不平衡数据集挑战的解决方案

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

  3. Oracle学习——dmp文件(表)导入与导出

    Oracle学习——dmp文件(表)导入与导出 2014-12-28      0个评论    来源:张文康 廊坊师范学院信息技术提高班 第九期   收藏    我要投稿 前言 关于dmp文件我们用的 ...

  4. nativeexcel将excel导入数据集

    nativeexcel将excel导入数据集 uses nexcel; procedure Tfgoods.daoruExecute(Sender: TObject);var od: TOpenDia ...

  5. 机器学习算法-K-NN的学习 /ML 算法 (K-NEAREST NEIGHBORS ALGORITHM TUTORIAL)

    1为什么我们需要KNN 现在为止,我们都知道机器学习模型可以做出预测通过学习以往可以获得的数据. 因为KNN基于特征相似性,所以我们可以使用KNN分类器做分类. 2KNN是什么? KNN K-近邻,是 ...

  6. 学习ML.NET(1): 构建流水线

    ML.NET使用LearningPipeline类定义执行期望的机器学习任务所需的步骤,让机器学习的流程变得直观. 下面用鸢尾花瓣预测快速入门的示例代码讲解流水线是如何工作的. using Micro ...

  7. sqoop学习2(数据导入与导出)

    最近学习了下这个导数据的工具,但是在export命令这里卡住了,暂时排不了错误.先记录学习的这一点吧 sqoop是什么 sqoop(sql-on-hadoop):是用来实现结构型数据(如关系型数据库) ...

  8. 动手学深度学习6-认识Fashion_MNIST图像数据集

    获取数据集 读取小批量样本 小结 本节将使用torchvision包,它是服务于pytorch深度学习框架的,主要用来构建计算机视觉模型. torchvision主要由以下几个部分构成: torchv ...

  9. 学习TensorFlow,邂逅MNIST数据集

    如果说"Hello Word!"是程序员的第一个程序,那么MNIST数据集,毫无疑问是机器学习者第一个训练的数据集,本文将使用Google公布的TensorFLow来学习训练MNI ...

随机推荐

  1. Java动态生成类以及动态添加属性

    有个技术实现需求:动态生成类,其中类中的属性来自参数对象中的全部属性以及来自参数对象properties文件. 那么技术实现支持:使用CGLib代理. 具体的实现步骤: 1.配置Maven文件: &l ...

  2. Vlc支持IE 360 低版本的Google浏览器

    VLC 插件代码: <object type='application/x-vlc-plugin' pluginspage="http://www.videolan.org/" ...

  3. Linux 查看本机串口方法

    最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1.查看串口是否可用 可以对串口发送数据比如对com1口,echo /dev/ttyS02.查看串口名称使用 ls -l /de ...

  4. DMZ 区域

    下面对DMZ区域进行简要介绍:DMZ是网络的一个区域,介于外网与内网之间的一个特殊区域,也称隔离区.它不同于传统的防火墙设置,DMZ防火墙方案为要保护的内部网络增加了一道安全防线,通常认为是非常安全的 ...

  5. fedora更新

    先换源再更新,否则等的太久,如果已经开始了直接ctrl+c取消 # dnf update

  6. OpenLdap 对接内部系统(Gitlab+Wiki+Jumpserver+Openvpn)配置

    LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议.目录是一个特殊的数据库,它的数据经常 ...

  7. Lua 与C 交互之LUA_REGISTRYINDEX(3)

    通常来说,C函数需要保留一些非局部的数据,也就是指那些超过他们作用范围的数据.C语言中我们使用全局变量或者static变量来满足这种需要.然而当你为Lua设计一个程序库的时候,全局变量和static变 ...

  8. Gradle的介绍与安装

    Gradle简介 Gradle是一款致力于自动化构建和对多种开发语言的支持的构建工具.如果你想在任意开发平台上构建.测试.发布和部署软件,那么Gradle提供了一个非常灵活的模型,可以支持整个开发生命 ...

  9. 今天遇到一件开心事,在eclipse编写的代码在命令窗口中编译后无法运行,提示 “错误: 找不到或无法加载主类”

    java中带package和不带package的编译运行方式是不同的. 首先来了解一下package的概念:简单定义为,package是一个为了方便管理组织java文件的目录结构,并防止不同java文 ...

  10. 关于使用jquery修改hover伪标签的样式

    HTML如下: <div class=".nav-subitem"> <div classs="nav-subitem-link">标题 ...