从构建管道的角度可以避免这个问题。确保您的一个热编码或特征化列具有不同的列名。输入和输出列仍将出现在 DataView 中,因此您只需适当地构建输出模型。
例如:
在建造管道时
var pipeline = mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "label_hotencoded", inputColumnName: "label")
// Append other processing in the pipeline
.Append(...)
// Ensure that you override the default name("label") for the label column in the pipeline trainer and/or calibrator to your hot encoded label column
.Append(mlContext.BinaryClassification.Trainers.FastTree(labelColumnName: "label_hotencoded"))
.Append(mlContext.BinaryClassification.Calibrators.Platt(labelColumnName: "label_hotencoded"));
您现在可以构建输出模型 POCO 类来接收您想要的值
public class OutputModel
{
[ColumnName("label")]
public string Label{ get; set; }
[ColumnName("Score")]
public float Score{ get; set; }
}
这样,您的输出列是人类可读的,同时您对培训师的输入列的格式正确。
注意:此技术也可用于数据中的其他列。只需确保在转换管道中的列时使用不同的列名,并在连接到“功能”时传入正确的列名。然后可以编写您的输出模型类以提取您想要的任何值。