如何查看失败的机器学习记录

How to see failed machine learning records

我正在使用以下代码创建我的机器学习模型。该模型的精度为 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);

从你的评论来看,我相信你正在寻找的方法可以在keras库中找到。该方法应该是 keras.models.predict_classes,如在 documentation page.

上找到的那样

这将为您提供一组预测输出,然后您可以将其与基本事实进行比较。访问文档查看参数。

希望对您有所帮助!

通过使用GetColumnCreateEnumerable方法,您可以找到模型没有正确预测的数据。

获得指标后,对来自测试数据集的预测使用 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);
    }
}

有了它,您就拥有了所需的数据。 :)

希望对您有所帮助!