public FieldAwareFactorizationMachineScalarRowMapper(IHostEnvironment env, RoleMappedSchema schema,
                                                             DataViewSchema outputSchema, FieldAwareFactorizationMachineModelParameters pred)
        {
            Contracts.AssertValue(env);
            Contracts.AssertValue(schema);
            Contracts.CheckParam(outputSchema.Count == 2, nameof(outputSchema));
            Contracts.CheckParam(outputSchema[0].Type is NumberDataViewType, nameof(outputSchema));
            Contracts.CheckParam(outputSchema[1].Type is NumberDataViewType, nameof(outputSchema));
            Contracts.AssertValue(pred);

            _env     = env;
            _columns = schema.GetColumns(RoleMappedSchema.ColumnRole.Feature).ToArray();
            _pred    = pred;

            var inputFeatureColumns = _columns.Select(c => new KeyValuePair <RoleMappedSchema.ColumnRole, string>(RoleMappedSchema.ColumnRole.Feature, c.Name)).ToList();

            InputRoleMappedSchema = new RoleMappedSchema(schema.Schema, inputFeatureColumns);
            OutputSchema          = outputSchema;

            _inputColumnIndexes = new List <int>();
            foreach (var kvp in inputFeatureColumns)
            {
                if (schema.Schema.TryGetColumnIndex(kvp.Value, out int index))
                {
                    _inputColumnIndexes.Add(index);
                }
            }
        }