将类别列编码为一键编码向量是一项简单的任务。
但是,我不知道如何从所提供的代码中获得一次性编码标签,因为知道哪个编码列代表类别标签很重要。
因此,以下代码将类别列编码为一键编码矢量。
//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);
所以,我的问题是如何从上述代码中获取类别标签(sentosa
,virginica
,versicolor
)。
答案 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]);
}
希望有帮助!