我在学习ML.Net的Iris教程,为了更好地学习API,我没有复制粘贴教程中的代码,而是自己手动输入,结果现在遇到了一些错误。
当我运行教程中的这一行代码时,抛出了一个System.Reflection.TargetInvocationException
异常:
var model = pipeline.Train<IrisData, IrisPrediction>();
运行时控制台显示的错误信息如下:
第2行第1列的标签值有误 ... 第8行第1列的标签值有误 抑制进一步的错误值消息 ...处理了150行,其中有150个错误值和0个格式错误警告:输出列'Label'的术语映射不包含任何条目。自动添加MinMax归一化转换,使用'norm=Warn'或'norm=No'来关闭此行为。使用2个线程进行训练。自动选择检查频率为2。 第1行第1列的标签值有误 ... 抑制进一步的错误值消息处理了150行,其中有150个错误值和0个格式错误警告:训练期间跳过了150个缺少特征/标签的实例
这是我的IrisData
类:
namespace Ronald.A.Fisher{ public class IrisData { [Column("0")] public float SepalLength; [Column("1")] public float SepalWidth; [Column("2")] public float PetalLength; [Column("3")] public float PetalWidth; [Column("4")] [ColumnName("Label")] public float Label; }
回答:
经过短暂的检查,我意识到其中一个列的数据类型错误了。
在用于加载学习数据的IrisData
类中,我对Label
使用了错误的数据类型。因此控制台显示了第1行第1列的标签值有误
的消息。
为了解决这个问题,我将Label
字段的数据类型从float
改为string
:
public class IrisData{ ... [ColumnName("Label")] public string Label;}