Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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)));
 }