【问题标题】:ML.NET - Loading variable number of feature columnsML.NET - 加载可变数量的特征列
【发布时间】:2019-02-19 07:17:33
【问题描述】:

我想要一个通用学习管道(例如,从 N 个特征预测一个标签),因为我的一个输入 CSV 将有 5 个特征,另一个将有 10 个特征(那些两个 CSV 显然会产生不同的模型,我不想以任何方式组合它们,我只想在两个 CSV 上运行相同的程序。

但是,要加载功能,我需要使用

TextLoader(...).CreateFrom<ClassA>()

ClassA 定义了我的架构。它的属性需要反映 CSV 格式,因此 CSV 必须始终具有相同的列数。

我注意到CustomTextLoader 但它已经过时了。有任何想法吗?谢谢。

【问题讨论】:

    标签: c# machine-learning ml.net


    【解决方案1】:

    jaket - 谢谢你的回答。我可以看到如何将数据加载到 TextLoader 中。但是,您将如何训练模型?因为管道 Train() 方法还要求您传入定义数据模式的对象:

     PredictionModel<ClassA, ClassAPrediction> model = pipeline.Train<ClassA, ClassAPrediction>();
    

    【讨论】:

    • 你有没有发现如何做到这一点?有同样的问题
    【解决方案2】:

    看源码:(https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML/Data/TextLoader.cs)

    CreateFrom 看起来只不过是填充 Arguments.Columns 和 Arguments 的辅助方法,两者都是可公开访问的。这意味着您可以编写自己的实现。

    TextLoader tl = new TextLoader(inputFileName)
    tl.Arguments.HasHeader = useHeader;
    tl.Arguments.Separator = new[] { separator };
    tl.Arguments.AllowQuoting = allowQuotedStrings;
    tl.Arguments.AllowSparse = supportSparse;
    tl.Arguments.TrimWhitespace = trimWhitespace;
    

    现在是重要的部分,您需要为数据集中的每一列填充一个 TextLoader.Arguments.Columns 条目。如果您提前知道您将拥有 5 或 10 列,那将是最简单的,否则,我会查看 CSV 以找出答案。

    tl.Arguments.Column = new TextLoaderColumns[numColumns];
    tl.Arguments.Column[0].Name = ...
    tl.Arguments.Column[0].Source = ... // see the docs
    tl.Arguments.Column[0].Type = ...
    // and so on.
    

    【讨论】:

    • 我希望有一个更直接的解决方案,但你是对的,这应该可行(我还没有尝试过)。谢谢。
    猜你喜欢
    • 2019-08-08
    • 2021-07-05
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    相关资源
    最近更新 更多