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

在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. 兼容多种模块规范(AMD,CMD,Node)的代码

    在JavaScript模块化开发中,为了让同一个模块可以运行在前后端,以及兼容多种模块规范(AMD,CMD,Node),类库开发者需要将类库代码包装在一个闭包内. AMD规范 AMD,即“异步模块定义 ...

  2. JavaScript大杂烩6 - 理解JavaScript中的this

    在JavaScript开发中,this是很常用的一个关键字,但同时也是一个很容易引入bug的一个关键字,在这里我们就专门总结一下页面中可能出现的this关键字(包括几种在其他页面文件中出现的this) ...

  3. tkinter学习系列之(六)Radiobutton控件

    目录 目录 前言 (一)基本属性 (二)在Frame里布局: 目录 前言 Radiobutton单选框,在一组选框中,只能选中一个. (一)基本属性 (1)特有属性: value 按钮的值 varia ...

  4. java.sql.SQLSyntaxErrorException: ORA-00904: "column": 标识符无效

    java.sql.SQLSyntaxErrorException: ORA-00904: "column": 标识符无效 首先查看无效的列是不是orcale关键字 , 如果不是 , ...

  5. 【洛谷】【搜索+剪枝】P1731 [NOI1999]生日蛋糕

    [题目背景:] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. [题目描述:] 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri ...

  6. Installation Oracle11gR2 RAC---常见报错处理

    第六章.报错处理 6.1 root.sh脚本执行失败处理 安装grid时,执行rootsh脚本报错如下: Adding Clusterware entries to inittab USM drive ...

  7. 转://Linux下tmpfs介绍及使用

    tmpfs介绍 tmpfs是一种虚拟内存文件系统,而不是块设备.是基于内存的文件系统,创建时不需要使用mkfs等初始化它最大的特点就是它的存储空间在VM(virtual memory),VM是由lin ...

  8. maven 打包生成doc和源码插件

    <!--配置生成Javadoc包--> <plugin> <groupId>org.apache.maven.plugins</groupId> < ...

  9. 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(四)数据库安装(单节点)

    一.卸载CentOS自带的MySQL 1.1 查看之前是否安装过mysql [root@master mysql]# rpm -qa|grep -i mysql mysql-libs--.el6.x8 ...

  10. 【SQL】sql update 多表关联更新方法总结

    #表结构: 1.表一:Test1 Id name age 1     2     2.表二:Test2 Id name age 1 小明 10 2 小红 8 #实现将表Test2的name和age字段 ...