gpt4 book ai didi

c# - ML.NET,缺少 "Score Column"

转载 作者:行者123 更新时间:2023-11-30 16:39:54 26 4
gpt4 key购买 nike

我想在 ML.NET 中制作我的第一个应用程序。我打赌威斯康星州Prognostic Breast Cancer Dataset .我自己生成 .csv 文件。该文件的一条记录如下所示:

B;11.62;18.18;76.38;408.8;0.1175;0.1483;0.102;0.05564;0.1957;0.07255;0.4101;1.74;3.027;27.85;0.01459;0.03206;0.04961;0.01841;0.01807;0.005217;13.36;25.4;88.14;528.1;0.178;0.2878;0.3186;0.1416;0.266;0.0927

它有 31 个不同的特征(列)。

我的 CancerData.cs 看起来像这样:

class CancerData
{

[Column(ordinal: "0")]
public string Diagnosis;

[Column(ordinal: "1")]
public float RadiusMean;

[Column(ordinal: "2")]
public float TextureMean;

[Column(ordinal: "3")]
public float PerimeterMean;

//.........

[Column(ordinal: "28")]
public float ConcavPointsWorst;

[Column(ordinal: "29")]
public float SymmetryWorst;

[Column(ordinal: "30")]
public float FractalDimensionWorst;

[Column(ordinal: "31", name: "Label")]
public string Label;
}

CancerPrediction.cs

class CancerPrediction
{
[ColumnName("PredictedLabel")]
public string Diagnosis;

}

我的Program.cs:

class Program
{

static void Main(string[] args)
{
PredictionModel<CancerData, CancerPrediction> model = Train();
Evaluate(model);
}

public static PredictionModel<CancerData, CancerPrediction> Train()
{
var pipeline = new LearningPipeline();
pipeline.Add(new TextLoader("Cancer-train.csv").CreateFrom<CancerData>(useHeader: true, separator: ';'));
pipeline.Add(new Dictionarizer(("Diagnosis", "Label")));
pipeline.Add(new ColumnConcatenator(outputColumn: "Features",
"RadiusMean",
"TextureMean",
"PerimeterMean",
//... all of the features
"FractalDimensionWorst"));
pipeline.Add(new StochasticDualCoordinateAscentBinaryClassifier());
pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" });
PredictionModel<CancerData, CancerPrediction> model = pipeline.Train<CancerData, CancerPrediction>();
model.WriteAsync(modelPath);
return model;

}

public static void Evaluate(PredictionModel<CancerData, CancerPrediction> model)
{
var testData = new TextLoader("Cancer-test.csv").CreateFrom<CancerData>(useHeader: true, separator: ';');
var evaluator = new ClassificationEvaluator();
ClassificationMetrics metrics = evaluator.Evaluate(model, testData);
var accuracy = Math.Round(metrics.AccuracyMicro, 2);
Console.WriteLine("The accuracy is: " + accuracy);
Console.ReadLine();
}
}

我得到的是:

ArgumentOutOfRangeException: Score column is missing

ClassificationMetrics metrics = evaluator.Evaluate(model, testData); 方法上。

当我在 CancerPrediction 中添加 Score 列时,我仍然遇到相同的异常。

我在StackOverflow上看到有人有同样的问题但看起来它没有答案,我无法对此发表评论,因为我没有足够的声誉。这是一个错误吗?也许我的数据没有准备好?我在 ver. 中使用 ML.NET。 0.5.0

感谢您的任何建议!

编辑 1:

当我将那行添加到 CancerPrediction.cs 时:

class CancerPrediction
{
[ColumnName("PredictedLabel")]
public string PredictedDiagnosis;

[ColumnName("Score")]
public string Score; // => new column!
}

我得到一个异常(exception):

System.InvalidOperationException: 'Can't bind the IDataView column 'Score' of type 'R4' to field or property 'Score' of type 'System.String'.'

排队:

PredictionModel<CancerData, CancerPrediction> model = pipeline.Train<CancerData, CancerPrediction>();

EDIT2

外观:

enter image description here

EDIT3

Separator 改为 ',' 并加载不是我准备的原始数据集它仍然大喊大叫,没有 Score,太烦人了

最佳答案

我相信我知道问题出在哪里。

您正在使用 StochasticDualCoordinateAscentBinaryClassifier,这是一个二元分类器。

您正在尝试使用 ClassificationEvaluator 评估结果,这是一个多类分类评估器。

我建议您使用 BinaryClassificationEvaluator 来评估二元分类器模型。

确切的问题如下:评估者期望“分数”列是一个向量列,其中包含每个类的分数。它找到的是“分数”列,它是一个标量(只是正类的分数)。

所以它会抛出一些令人费解的信息

Score column is missing

关于c# - ML.NET,缺少 "Score Column",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52335066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com