private static IDataView AppendFloatMapper <TInput>(IHostEnvironment env, IChannel ch, IDataView input, string col, KeyType type, int seed) { // Any key is convertible to ulong, so rather than add special case handling for all possible // key-types we just upfront convert it to the most general type (ulong) and work from there. KeyType dstType = new KeyType(DataKind.U8, type.Min, type.Count, type.Contiguous); bool identity; var converter = Conversions.Instance.GetStandardConversion <TInput, ulong>(type, dstType, out identity); var isNa = Conversions.Instance.GetIsNAPredicate <TInput>(type); ulong temp = 0; ValueMapper <TInput, Single> mapper; if (seed == 0) { mapper = (ref TInput src, ref Single dst) => { if (isNa(ref src)) { dst = Single.NaN; return; } converter(ref src, ref temp); dst = (Single)(temp - 1); }; } else { ch.Check(type.Count > 0, "Label must be of known cardinality."); int[] permutation = Utils.GetRandomPermutation(RandomUtils.Create(seed), type.Count); mapper = (ref TInput src, ref Single dst) => { if (isNa(ref src)) { dst = Single.NaN; return; } converter(ref src, ref temp); dst = (Single)permutation[(int)(temp - 1)]; }; } return(LambdaColumnMapper.Create(env, "Key to Float Mapper", input, col, col, type, NumberType.Float, mapper)); }
private IDataView ExtractRelevantIndex(IDataView data) { IDataView output = data; for (int i = 0; i < data.Schema.ColumnCount; i++) { var type = data.Schema.GetColumnType(i); if (type.IsKnownSizeVector && type.ItemType == NumberType.R8) { var name = data.Schema.GetColumnName(i); var index = _index ?? type.VectorSize / 2; output = LambdaColumnMapper.Create(Host, "Quantile Regression", output, name, name, type, NumberType.R8, (ref VBuffer <Double> src, ref Double dst) => dst = src.GetItemOrDefault(index)); } } return(output); }
private static IDataView AddVarLengthColumn <TSrc>(IHostEnvironment env, IDataView idv, string variableSizeVectorColumnName, ColumnType typeSrc) { return(LambdaColumnMapper.Create(env, "ChangeToVarLength", idv, variableSizeVectorColumnName, variableSizeVectorColumnName + "_VarLength", typeSrc, new VectorType(typeSrc.ItemType.AsPrimitive), (ref VBuffer <TSrc> src, ref VBuffer <TSrc> dst) => src.CopyTo(ref dst))); }