这是我第一次使用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元素。
任何收到的建议都很好。
答案 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"));