标签: ml.net

是否可以使用 ML.NET Preview (0.6) 来表征 C# 集合?

可以说我有一个复杂的类型:

class Policy
{
    string Name { get; set; }
    DateTime InceptionDate { get; set; }
    DateTime ExpirationDate { get; set; }
    List<Location> Locations { get; set; }
}

class Location
{
    string Street { get; set; }
    string City { get; set; }
    string State { get; set; }
    string PostalCode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何将 的集合转换Locations为特征列以供 ML.NET 理解?

c# collections ml.net

5
推荐指数
1
解决办法
2082
查看次数

如何使用回归任务通过 ML.NET 预测多个标签?

我对机器学习非常陌生,我偶然发现了以下问题。考虑到官方的纽约市出租车票价金额预测教程,假设我想预测另一个实际值,例如TripTime。我修改了我的代码如下:

public class TripFarePrediction // this class is used to store prediction result
{
    [ColumnName("Score")]
    public float FareAmount { get; set; }

    [ColumnName("Score2")]
    public float TripTime { get; set; }
}


private static ITransformer Train(MLContext mlContext, string trainDataPath)
{
    IDataView dataView = _textLoader.Read(trainDataPath);
    var pipelineForTripTime = mlContext.Transforms.CopyColumns("Label", "TripTime")
    .Append(mlContext.Transforms.Categorical.OneHotEncoding("VendorId"))
    .Append(mlContext.Transforms.Categorical.OneHotEncoding("RateCode"))
    .Append(mlContext.Transforms.Categorical.OneHotEncoding("PaymentType"))
    .Append(mlContext.Transforms.Concatenate("Features", "VendorId", "RateCode", "PassengerCount", "TripDistance", "PaymentType"))
    .Append(mlContext.Regression.Trainers.FastTree());

    var pipelineForFareAmount = mlContext.Transforms.CopyColumns("Label", "FareAmount")
    .Append(mlContext.Transforms.Categorical.OneHotEncoding("VendorId"))
    .Append(mlContext.Transforms.Categorical.OneHotEncoding("RateCode"))
    .Append(mlContext.Transforms.Categorical.OneHotEncoding("PaymentType"))
    .Append(mlContext.Transforms.Concatenate("Features", "VendorId", "RateCode", "PassengerCount", "TripDistance", "PaymentType"))
    .Append(mlContext.Regression.Trainers.FastTree());



    var model = …
Run Code Online (Sandbox Code Playgroud)

.net c# machine-learning ml.net

5
推荐指数
1
解决办法
4756
查看次数

如何在ml.net中为tf-idf词袋获得带权重的词汇?

ML.NET 的文档展示了如何使用context.Transforms.Text.ProduceWordBags获取词袋。该方法将Transforms.Text.NgramExtractingEstimator.WeightingCriteria作为参数之一,因此可以请求使用TfIdf权重。最简单的例子是:

// Get a small dataset as an IEnumerable and then read it as a ML.NET data set.
IEnumerable<SamplesUtils.DatasetUtils.SampleTopicsData> data = SamplesUtils.DatasetUtils.GetTopicsData();
var trainData = ml.Data.LoadFromEnumerable(data);

var pipeline = ml.Transforms.Text.ProduceWordBags("bags", review, ngramLength: 1, weighting: Transforms.Text.NgramExtractingEstimator.WeightingCriteria.TfIdf);

var transformer = pipeline.Fit(trainData);
var transformed_data = transformer.Transform(trainData);
Run Code Online (Sandbox Code Playgroud)

一切都很好,但我如何得到实际结果transformed_data呢?

我在调试器中做了一些挖掘,但我仍然对这里实际发生的事情感到困惑。

首先,运行管道会添加三个额外的列transformed_data

在此处输入图片说明

预览数据后,我可以看到这些列中的内容。为了让事情更清楚,这里是GetTopicsData返回的内容,这就是我们运行转换的内容:

animals birds cats dogs fish horse
horse birds house fish duck cats
car truck driver bus pickup
car truck driver …
Run Code Online (Sandbox Code Playgroud)

c# tf-idf ml.net

5
推荐指数
0
解决办法
601
查看次数

ML.NET:如何解决“具有角色 MatrixColumnIndex 的列应该是已知基数 U4 键,但改为“UInt32””

我正在尝试将以下 ML.NET F# 产品推荐示例改编为我自己的用例:https://github.com/dotnet/machinelearning-samples/tree/master/samples/fsharp/getting-started/MatrixFactorization_ProductRecommendation

但是,在我的数据集中,我没有两个数字 ID。相反,我有一个 UserId(数字)和一个 ProductId(字符串)。因为键值似乎只能是数字,所以我尝试使用该MapValueToKey函数来映射它。但是,我仍然收到以下错误:

Unhandled Exception: System.InvalidOperationException: Column 'UserId' with role MatrixColumnIndex should be a known cardinality U4 key, but is instead 'UInt32'
   at Microsoft.ML.Recommender.RecommenderUtils.CheckRowColumnType(RoleMappedData data, ColumnRole role, Column& col, Boolean isDecode)
   at Microsoft.ML.Recommender.RecommenderUtils.CheckAndGetMatrixIndexColumns(RoleMappedData data, Column& matrixColumnIndexColumn, Column& matrixRowIndexColumn, Boolean isDecode)
   at Microsoft.ML.Trainers.MatrixFactorizationTrainer.TrainCore(IChannel ch, RoleMappedData data, RoleMappedData validData)
   at Microsoft.ML.Trainers.MatrixFactorizationTrainer.Fit(IDataView trainData, IDataView validationData)
   at Microsoft.ML.Trainers.MatrixFactorizationTrainer.Fit(IDataView input)
   at <StartupCode$Recommender>.$Program.main@() in /Users/nat/Projects/Recommender/Recommender/Program.fs:line 75
Run Code Online (Sandbox Code Playgroud)

我的数据的架构类似于以下内容:

UserId,ProductId
1,test-product-id
Run Code Online (Sandbox Code Playgroud)

这是失败的代码,改编自链接的示例:

Unhandled Exception: System.InvalidOperationException: Column 'UserId' with role MatrixColumnIndex …
Run Code Online (Sandbox Code Playgroud)

.net f# ml.net

5
推荐指数
1
解决办法
837
查看次数

ML.NET - 特征列“Features”的架构不匹配:预期为 Vector&lt;Single&gt;,得到了 Vector&lt;Int32&gt;

我只是尝试制作我的第一个ML.NET项目,之前我使用 Azure ML、可视化界面、Python 等构建了该项目,但现在我想使用C#来完成。

我正在遵循教程,但具有完全不同的数据集和目的。

数据集有很多额外的列,但我的数据模型如下所示(指向数据集中列的索引):

using Microsoft.ML.Data;

namespace ML_Net
{

    public class Earthquake
    {
        [LoadColumn(1)]
        public int geo_level_1_id { get; set; }
        [LoadColumn(2)]
        public int geo_level_2_id { get; set; }
        [LoadColumn(3)]
        public int geo_level_3_id { get; set; }
        [LoadColumn(4)]
        public int count_floors_pre_eq { get; set; }
        [LoadColumn(5)]
        public int age { get; set; }
        [LoadColumn(6)]
        public int area { get; set; }
        [LoadColumn(7)]
        public int height { get; set; }
        [LoadColumn(8)]
        public int …
Run Code Online (Sandbox Code Playgroud)

c# classification multiclass-classification ml.net

5
推荐指数
0
解决办法
4349
查看次数

ML.Net“TransformsCatalog”不包含“LoadRawImageBytes”的定义

我正在尝试实现 ML.Net 的示例之一。示例中的项目面向 .Net core 2.1,我正在 .NET 4.7 Framework 中构建我的项目。我遇到的问题是下面的行无法编译

mlContext.Transforms.LoadRawImageBytes(.....等)

我得到的错误是

错误 CS1061“TransformsCatalog”不包含“LoadRawImageBytes”的定义,并且找不到接受“TransformsCatalog”类型的第一个参数的可访问扩展方法“LoadRawImageBytes”(您是否缺少 using 指令或程序集引用?)。我已经看过,LoadRawImageBytes 应该是方法的一部分,但它不被识别。我正在使用 ML.Net 1.4.0 Nuget 包。有任何想法吗?非常感谢

ml.net

5
推荐指数
1
解决办法
1852
查看次数

Microsoft.ML 和 Xamarin

Microsoft.ML 在 Xamarin 中工作吗?

我关注了https://dotnet.microsoft.com/learn/ml-dotnet 上的许多教程和视频。简单教程(此处)列出了我遵循的核心流程(在 Xamarin 项目中),但我无法使用 iOS(或 Android)Xamarin 应用程序查看MLModel.zip从模型生成器生成的文件。它设置为“始终复制”。

我可以这样做,还是 Microsoft.ML 与 Xamarin(用于 ARM)不兼容?

ML NET 1.4 的发行说明(https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-4-global-availability-machine-learning-for-net/)表明它将作为 .NET 运行Core 3.0 等应该可用于 ARM 处理器,但我无法确认或否认 ML.NET 在 Xamarin 跨平台开发方面的状态。

c# ios xamarin ml.net microsoft.ml

5
推荐指数
1
解决办法
601
查看次数

C# ML.Net 图像分类:GPU 加速是否有助于提高预测性能?如何判断是否有效?

我目前正在开发 .NET Framework 4.8 中的桌面工具,该工具接收具有潜在裂纹的图像列表,并使用经过 ML.Net (C#) 训练的模型来执行裂纹检测。理想情况下,我希望 10 个图像的预测时间少于 100 毫秒(注意:单个图像预测需要 36-41 毫秒)。

首先,我尝试使用 PredictionEngines 列表和 Parallel.For 循环在不同线程中执行多个预测(使用线程列表,因为 .Net Framework 没有 PredictionEnginePool 实现)。后来我了解到,使用 ITransformer 进行预测是 .Net Framework 推荐的线程安全方法,并转而使用该方法,但在这两种情况下,它都没有给我带来我所希望的性能。

执行以下代码大约需要 255-281 毫秒(平均 267.1 毫秒):

    MLContext mlContext = new MLContext();
    IDataView inputData = mlContext.Data.LoadFromEnumerable(inputDataEnumerable);
    IDataView results = _LoadedModel.Transform(inputData);
    var imageClassificationPredictions = mlContext.Data.CreateEnumerable<ImageClassificationPrediction>(results, false).ToList();
Run Code Online (Sandbox Code Playgroud)

其中_LoadedModel是一个ITransformer,表示之前训练和加载的模型,inputDataEnumerable是ModelInput的列表,它包含两个属性:ImageData(从png图像中提取的图像数据的byte[])和Label(字符串类型,设置为null)。

SciSharp.TensorFlow.Redist我尝试通过将 TensorFlow 包依赖项从 切换为 来 加速此过程,如本教程SciSharp.TensorFlow.Redist-Windows-GPU 中所述。

然而,执行时间几乎保持不变(10 个图像的平均时间为 262.4 毫秒)。我还尝试比较了 5760 张图像的小数据集的训练时间,但看不出有太大差异(两者都花费了大约 7 分 21 秒)。

从这些结果来看,它似乎没有使用 GPU,所以我首先尝试删除项目的 …

c# windows prediction tensorflow ml.net

5
推荐指数
1
解决办法
4028
查看次数

在 ML.NET 中使用通过 python 创建的模型

我们有一个场景,需要使用机器学习算法来预测值。由于一些问题,我们希望在 ML.NET 中实现这一点。

我们在一个项目中尝试了 AutoML,并使用近 8 万条数据记录对其进行了训练。我们对数据进行了 30 多分钟的训练。csv 文件为 22MB。数据如下所示。

------------------------------------
Col1                        col2
------------------------------------
Some text                    21
Some other text               2
Run Code Online (Sandbox Code Playgroud)

我们有一些上述类型的历史数据。我们需要从 col1 文本中预测 col2。即使该列是整数,它也会以小数形式预测结果。

有人用 python 创建了一个模型,目前正在按预期工作。我们想在 ML.NET 中使用它。

我们是否有可能在 ML.NET 中使用由 python 创建的模型?

machine-learning automl ml.net

5
推荐指数
1
解决办法
2110
查看次数

ML.NET 使用动态类创建预测引擎

我有一个 ML.NET 应用程序,我必须在编译后动态创建接口 IDataView 以用于训练。我找到了这个线程,并且我已经能够成功地为训练数据集创建动态接口,然后用它来训练模型。当我尝试使用相同的界面以便使用经过训练的模型创建预测时,我的问题就出现了。文档显示您应该创建一个预测引擎,您必须在其中定义输入和输出类类型才能创建引擎。就像是:

mlContext.Model.CreatePredictionEngine<TSrc,TDst>(ITransformer, DataViewSchema)
Run Code Online (Sandbox Code Playgroud)

其中TSrcTDst是编译时已知的类类型。我的问题是我在编译时不知道输入类类型的结构,并且必须为输入数据源创建动态接口。由于参数已知,因此可以定义输出类对象,但我不确定如何继续进行动态输入。

我想我可以尝试在接口上使用类似GetType()的东西,但它说“隐式类型变量不能有多个声明符”。我的简化示例如下所示:

public class ModelOutput
{
    public string PredictedLabel { get; set; }
    public float[] Score { get; set; }
}

public class MakePrediction
{
    protected void Solve(IDataView data, ITransformer model)
    {
        var mlContext = new MLContext();
        var engine = mlContext.Model.CreatePredictionEngine<data.GetType(), ModelOutput>(model, data.Schema);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# ml.net

5
推荐指数
1
解决办法
1678
查看次数