首页 > 解决方案 > ML .net 读取制表符分隔的数据集

问题描述

这是我第一次使用 ML.net 0.8,我在数据集中加载时遇到了麻烦。

var mlContext = new MLContext();

        String dataPath = "ML Data 3.txt";
        var trainingDataView = mlContext.Data.ReadFromTextFile(
            columns: new TextLoader.Column[]
            {
                new TextLoader.Column("Product", DataKind.Text,0),
                new TextLoader.Column("Streat", DataKind.R4, 1),
                new TextLoader.Column("Overspray", DataKind.R4,2),
                new TextLoader.Column("MLS",DataKind.R4,3),
                new TextLoader.Column("Moisture",DataKind.R4,4)
            }, path: dataPath );


        var data = trainingDataView.Preview();

        var pipeline = mlContext.Transforms.Concatenate("Features", "Product", "Streat", "Overspray", "MLS")
            .Append(mlContext.MulticlassClassification.Trainers.StochasticDualCoordinateAscent(labelColumn: "Moisture", featureColumn: "Features"))
            .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedMoisture"));


        var model = pipeline.Fit(trainingDataView);

数据预览看起来不错,但是当它尝试拟合以执行拟合操作时,我收到以下错误:

System.InvalidOperationException:'列'Streat'的值是R4,这与之前观察到的文本类型不同。'

我检查了数据,数据文件中没有文本元素,除了产品列。

样本数据集

任何建议都非常受欢迎。

标签: .netml.net

解决方案


MulticlassClassification算法不适用于文本特征,仅适用于数字。如果Product是某种标识符,则最好将其从Concatenate调用中排除,因为它不是功能:

mlContext.Transforms.Concatenate("Features", "Streat", "Overspray", "MLS")

如果它是某种类别并且应该用作特征,则可以使用其中一种转换将其转换为数字,例如OneHotEncoding

var pipeline = mlContext.Transforms.Categorical.OneHotEncoding("Product")
        .Append(mlContext.Transforms.Concatenate("Features", "Product", "Streat", "Overspray", "MLS"))
        .Append(mlContext.MulticlassClassification.Trainers.StochasticDualCoordinateAscent(labelColumn: "Moisture", featureColumn: "Features"))
        .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedMoisture"));

推荐阅读