如何在ML.NET中获取OneHotEncoding标签

时间:2019-08-18 23:12:16

标签: ml.net

将类别列编码为一键编码向量是一项简单的任务。

但是,我不知道如何从所提供的代码中获得一次性编码标签,因为知道哪个编码列代表类别标签很重要。

因此,以下代码将类别列编码为一键编码矢量。

//create dataview from the string array 'colVector'
IDataView data = mlContext.Data.LoadFromEnumerable<IrisFlower>(colVector);

//create a pipeline to transform the category into one-hot encoding vector 
var fitData = mlContext.Transforms.Categorical.OneHotEncoding(nameof(IrisFlower.Label)).Fit(data);
var transData = fitData.Transform(data);
var convertedData = mlContext.Data.CreateEnumerable<EncodedIrisFlower>(transData, true);

所以,我的问题是如何从上述代码中获取类别标签(sentosavirginicaversicolor)。

2 个答案:

答案 0 :(得分:1)

您要使用的是称为import forest from "../../images/forest.mp4" //import the video file and then <video width="100%" height="100vh" preload='auto' poster={poster} loop autoPlay muted> <source src={video} type="video/mp4" /> Your browser does not support HTML5 video. </video> 的方法。这将为您提供GetSlotNames,其中缓冲区中的每个字符串都是VBuffer<ReadOnlyMemory<char>>向量中对应索引的标签。

OneHotEncoding

答案 1 :(得分:0)

GetColumn方法应该可以帮助您做到这一点。

类似于您拥有的管道,我有以下内容。我确实在IrisData类中添加了标签字段。

var data = context.Data.LoadFromTextFile<IrisData>("./iris.data", hasHeader: false, separatorChar: ',');

var shuffledData = context.Data.ShuffleRows(data);

var transData = context.Transforms.Categorical.OneHotEncoding("LabelOneHot", nameof(IrisData.Label))
    .Fit(shuffledData)
    .Transform(shuffledData);

从那里我们可以提取列值。

var oneHotLabels = transData.GetColumn<float[]>("LabelOneHot").ToArray();
var originalLabels = transData.GetColumn<string>("Label").ToArray();

使用Label列,只需获取一系列不同的项目即可。

var labels = originalLabels.Distinct().ToArray();

然后可以循环通过它们,根据一种热编码来确定正确的标签。

foreach (var item in oneHotLabels)
{
    var maxItem = Array.IndexOf(item, item.Max());

    Console.WriteLine(labels[maxItem]);
}

enter image description here

希望有帮助!