C# ML.NET,“;分数栏“;不见了

C# ML.NET,“;分数栏“;不见了,c#,.net-core,ml.net,C#,.net Core,Ml.net,我想在ML.NET中创建我的第一个应用程序。我打赌威斯康星州。我自己创建了generate.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

我想在ML.NET中创建我的第一个应用程序。我打赌威斯康星州。我自己创建了generate.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
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;
}
得到31个不同的特征(列)

我的
CancerData.cs
如下所示:

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

}
我的
程序.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();
    }
}
我得到一个例外:

System.InvalidOperationException:'无法将类型为'R4'的IDataView列'Score'绑定到类型为'System.String'的字段或属性'Score'

一致:

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

外观:

EDIT3


分隔符
更改为
,“
并加载未由我准备的原始数据集,它仍在大喊大叫,因为没有
分数
,所以很烦人

我相信我知道问题所在

您正在使用一个
随机DualCoordinateAscentBinaryClassifier
,它是一个二进制分类器

您正在尝试使用多类分类计算器
ClassificationEvaluator
评估结果

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

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

因此,它抛出了一些复杂的信息

缺少“分数”列


我相信
Score
列需要是一个
float
,这可能就是你得到第二个异常的原因。@Jon仍然是相同的
分数不存在
谢谢!现在它起作用了。遗憾的是,即使在欧洲,也如此缺乏关于该框架的信息documentation@michasaucer我们正在开发新的API,它在错误消息中会对用户更加友好。事实上,这个特殊的问题可能会变成编译时错误。老实说,我没有深入研究文档是我的错,因为我觉得我在ML方面缺乏经验。我对ML.NET的新特性感到非常兴奋,特别是Keras/TF的API或CNN与imaged一起使用的另一个实现;)