我正在使用以下代码创建我的机器学习模型。该模型的精度为0.76。我只是想知道测试数据中的哪些记录失败了?有什么办法可以查看这些数据?
// 1. Load the dataset for training and testing
var trainData = ctx.Data.LoadFromTextFile<SentimentData>(trainDataPath, hasHeader: true);
var testData = ctx.Data.LoadFromTextFile<SentimentData>(testDataPath, hasHeader: true);
// 2. Build a tranformer/estimator to transform input data so that Machine Learning algorithm can understand
IEstimator<ITransformer> estimator = ctx.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.Text));
// 3. - set the training algorithm and create the pipeline for model builder
var trainer = ctx.BinaryClassification.Trainers.SdcaLogisticRegression();
var trainingPipeline = estimator.Append(trainer);
// 4. - Train the model
var trainedModel = trainingPipeline.Fit(trainData);
// 5. - Perform the preditions on the test data
var predictions = trainedModel.Transform(testData);
// 6. - Evalute the model
var metrics = ctx.BinaryClassification.Evaluate(data: predictions);
最佳答案
通过使用GetColumn
和CreateEnumerable
方法,您可以找到模型未正确预测的数据。
度量之后,对来自测试数据集的预测使用GetColumn
方法来获取原始标签值。然后,使用CreateEnuemrable
方法获取将保存预测值的预测。您也可以选择获取情感文本。
var originalLabels = predictions.GetColumn<bool>("Label").ToArray();
var sentimentText = predictions.GetColumn<string>(nameof(SentimentData.SentimentText)).ToArray();
var predictedLabels = context.Data.CreateEnumerable<SentimentPrediction>(predictions, reuseRowObject: false).ToArray();
获取数据后,只需遍历其中一个(我对原始标签进行了计数),就可以在每次迭代时访问数据。在这里,您可以检查实际标签是否不等于预测值,仅打印出模型未正确获取的值。
for (int i = 0; i < originalLabels.Count(); i++)
{
string outputText = String.Empty;
if (originalLabels[i] != predictedLabels[i].Prediction)
{
outputText = $"Text - {sentimentText[i]} | ";
outputText += $"Original - {originalLabels[i]} | ";
outputText += $"Predicted - {predictedLabels[i].Prediction}";
Console.WriteLine(outputText);
}
}
这样,您便拥有了所需的数据。 :)
希望有帮助!
关于machine-learning - 如何查看失败的机器学习记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57294709/