public static CommonOutputs.TransformOutput CatTransformHash(IHostEnvironment env, CategoricalHashTransform.Arguments input) { Contracts.CheckValue(env, nameof(env)); var host = env.Register("CatTransformDict"); host.CheckValue(input, nameof(input)); EntryPointUtils.CheckInputArgs(host, input); var xf = CategoricalHashTransform.Create(host, input, input.Data); return(new CommonOutputs.TransformOutput { Model = new TransformModel(env, xf, input.Data), OutputData = xf }); }
public static IDataTransform CreateTransformCore( OutputKind argsOutputKind, OneToOneColumn[] columns, List <OutputKind?> columnOutputKinds, IDataTransform input, IHost h, IHostEnvironment env, CategoricalHashTransform.Arguments catHashArgs = null) { Contracts.CheckValue(columns, nameof(columns)); Contracts.CheckValue(columnOutputKinds, nameof(columnOutputKinds)); Contracts.CheckParam(columns.Length == columnOutputKinds.Count, nameof(columns)); using (var ch = h.Start("Create Transform Core")) { // Create the KeyToVectorTransform, if needed. List <KeyToVectorTransform.Column> cols = new List <KeyToVectorTransform.Column>(); bool binaryEncoding = argsOutputKind == OutputKind.Bin; for (int i = 0; i < columns.Length; i++) { var column = columns[i]; if (!column.TrySanitize()) { throw h.ExceptUserArg(nameof(Column.Name)); } bool? bag; OutputKind kind = columnOutputKinds[i].HasValue ? columnOutputKinds[i].Value : argsOutputKind; switch (kind) { default: throw env.ExceptUserArg(nameof(Column.OutputKind)); case OutputKind.Key: continue; case OutputKind.Bin: binaryEncoding = true; bag = false; break; case OutputKind.Ind: bag = false; break; case OutputKind.Bag: bag = true; break; } var col = new KeyToVectorTransform.Column(); col.Name = column.Name; col.Source = column.Name; col.Bag = bag; cols.Add(col); } if (cols.Count == 0) { return(input); } IDataTransform transform; if (binaryEncoding) { if ((catHashArgs?.InvertHash ?? 0) != 0) { ch.Warning("Invert hashing is being used with binary encoding."); } var keyToBinaryArgs = new KeyToBinaryVectorTransform.Arguments(); keyToBinaryArgs.Column = cols.ToArray(); transform = new KeyToBinaryVectorTransform(h, keyToBinaryArgs, input); } else { var keyToVecArgs = new KeyToVectorTransform.Arguments { Bag = argsOutputKind == OutputKind.Bag, Column = cols.ToArray() }; transform = new KeyToVectorTransform(h, keyToVecArgs, input); } ch.Done(); return(transform); } }