标签分隔数据集中的ML .net读取

时间:2018-12-28 17:00:46

标签: .net 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);

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

  

System.InvalidOperationException:'列'Streat'具有R4的值,该值与先前观察到的Text类型不同。'

我已经检查了数据,除了“产品”列,数据文件中没有Text元素。

SampleDataSet

任何收到的建议都很好。

1 个答案:

答案 0 :(得分:0)

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"));