ML.NET Cookbook --- 1.如何从文本文件中加载数据?

使用ML.NET中的TextLoader扩展方法从文本文件中加载数据。你需要知道在文本文件中数据列在那里,它们的类型是什么,在文本文件中什么位置可以找到它们。

请注意:对于ML.NET只读取文件的某些列, 或多次读取同一列, 是完全可行的。

示例文件:

Label   Workclass   education   marital-status
0   Private 11th    Never-married
0   Private HS-grad Married-civ-spouse
1   Local-gov   Assoc-acdm  Married-civ-spouse
1   Private Some-college    Married-civ-spouse

在ML.NET中提供了三种方法读取文本数据:

//方法一:
// 创建一个新的上下文环境,它可用于程序的异常跟踪和日志记录。 

var mlContext = new MLContext();

// 创建一个reader(数据阅读器):在阅读器中定义数据列和它们所在文本文件中的位置
var reader = mlContext.Data.CreateTextReader(ctx => (
        // 一个布尔列作为 'target label'.
        IsOver50K: ctx.LoadBool(0),
        // 三个文本列.
        Workclass: ctx.LoadText(1),
        Education: ctx.LoadText(2),
        MaritalStatus: ctx.LoadText(3)),
    hasHeader: true);

// 使用Read方法读取文件内容
var data = reader.Read(dataPath);

如果在程序编译的时候,数据的结构太复杂,你也可以通过动态类型的API进行转换:

//方法二:
// 创建上下文环境
var mlContext = new MLContext();

// 创建一个reader(数据阅读器):在阅读器中定义数据列和它们所在文本文件中的位置
var reader = mlContext.Data.CreateTextReader(new[] {
        // 一个布尔列作为 'target label'.
        new TextLoader.Column("IsOver50K", DataKind.BL, 0),
        // 三个文本列.
        new TextLoader.Column("Workclass", DataKind.TX, 1),
        new TextLoader.Column("Education", DataKind.TX, 2),
        new TextLoader.Column("MaritalStatus", DataKind.TX, 3)
    },
    // 文件中第一行为表头
    hasHeader: true
);

// 使用Read方法读取文件内容
var data = reader.Read(dataPath);

你也可以创建一个数据模型的类,基于这个类来读取数据。

//方法三:
// 定义数据模型类
private class InspectedRow
{
    [LoadColumn(0)]
    public bool IsOver50K { get; set; }

    [LoadColumn(1)]
    public string Workclass { get; set; }

    [LoadColumn(2)]
    public string Education { get; set; }

    [LoadColumn(3)]
    public string MaritalStatus { get; set; }

    public string[] AllFeatures { get; set; }
}

private class InspectedRowWithAllFeatures : InspectedRow
{
    public string[] AllFeatures { get; set; }
}

// 创建上下文环境
var mlContext = new MLContext();

// 读取数据
var data = mlContext.Data.ReadFromTextFile<InspectedRow>(dataPath,
    // First line of the file is a header, not a data row.
    hasHeader: true
)       
        

猜你喜欢

转载自www.cnblogs.com/ihappycat/p/10338830.html