gpt4 book ai didi

c# - ML.NET CategoricalOneHotVectorizer 是否也对测试数据进行编码?

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:00 24 4
gpt4 key购买 nike

我不确定 ML.NET CategoricalOneHotVectorizer 是如何工作的,来自他们的示例代码,

var pipeline = new LearningPipeline
{
// ... extra code ...
new CategoricalOneHotVectorizer("VendorId", "RateCode", "PaymentType"),
// ... extra code ...
new FastTreeRegressor()
};

在我看来,一旦我们调用 model = pipeline.Train() 来训练模型,它只会对分类输入数据进行编码。因此,如果我的测试数据有一些不在输入中的值,它会弄乱预测结果吗?

通常在 Python 上,在使用 OneHotEncoder 对分类变量进行编码之前,我会在训练和测试数据上训练 OneHotEncoder。不确定如何使用 ML.NET 做到这一点

最佳答案

您不应使用您的测试数据来训练您的模型。那是一个错误。默认情况下,All one 热编码机器学习框架会将一个看不见的类别编码为全空值。ML.NET v0.7 将做同样的事情:

public static void TryOneHot()
{
var data = Enumerable.Range(1, 4).Select(i => new { A = $"{i}", B = $"{i}" });
var trainData = data.Take(3).ToArray();
var testData = data.Skip(3).ToArray();
using (var env = new ConsoleEnvironment(seed: 1, conc: 1))
{
var dataView = env.CreateDataView(trainData).AssertStatic(env, c => (A: c.Text.Scalar, B: c.Text.Scalar));
var encoderPipe = dataView.MakeNewEstimator()
.Append(row => (
A_OH: row.A.OneHotEncoding(),
B_OH: row.B.OneHotEncoding()
));
var encoder = encoderPipe.Fit(dataView);

var encodedTrainingData = encoder.AsDynamic.Transform(env.CreateDataView(trainData));
var raw = encodedTrainingData.GetColumn<float[]>(env, "A_OH").ToArray();

var encodedTestData = encoder.AsDynamic.Transform(env.CreateDataView(testData));
var rawUnseen = encodedTestData.GetColumn<float[]>(env, "A_OH").ToArray();
}
}

如果您检查 rawUnseen,您会发现它将被 [0, 0, 0] 编码,因为该类别从未见过。

关于c# - ML.NET CategoricalOneHotVectorizer 是否也对测试数据进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52770135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com