dotnet/machinelearning · error · ArgumentException

Only supported feature column types are {BooleanDataViewType

Error message

Only supported feature column types are {BooleanDataViewType.Instance}, {NumberDataViewType.Single}, and {TextDataViewType.Instance}. Please change the feature column {column.Name} of type {column.Type} to one of the supported types.

What it means

Thrown when a training-data column that is not the label/userId/itemId/groupId column (i.e. is treated as a feature column) has an item type other than Boolean, Single (float), or Text. AutoML featurization only supports these primitive types for feature columns; everything else (double, int vectors, key types, DateTime) is rejected.

Source

Thrown at src/Microsoft.ML.AutoML/Utils/UserInputValidationUtil.cs:97

            }

            foreach (var column in trainData.Schema)
            {
                if (column.Name == DefaultColumnNames.Features && column.Type.GetItemType() != NumberDataViewType.Single)
                {
                    throw new ArgumentException($"{DefaultColumnNames.Features} column must be of data type {NumberDataViewType.Single}", nameof(trainData));
                }

                if ((column.Name != columnInformation.LabelColumnName &&
                    column.Name != columnInformation.UserIdColumnName &&
                    column.Name != columnInformation.ItemIdColumnName &&
                    column.Name != columnInformation.GroupIdColumnName)
                    &&
                        column.Type.GetItemType() != BooleanDataViewType.Instance &&
                        column.Type.GetItemType() != NumberDataViewType.Single &&
                        column.Type.GetItemType() != TextDataViewType.Instance)
                {
                    throw new ArgumentException($"Only supported feature column types are " +
                        $"{BooleanDataViewType.Instance}, {NumberDataViewType.Single}, and {TextDataViewType.Instance}. " +
                        $"Please change the feature column {column.Name} of type {column.Type} to one of " +
                        $"the supported types.", nameof(trainData));
                }
            }
        }

        private static void ValidateColumnInformation(IDataView trainData, ColumnInformation columnInformation, TaskKind task)
        {
            ValidateColumnInformation(columnInformation);
            ValidateTrainDataColumn(trainData, columnInformation.LabelColumnName, LabelColumnPurposeName, GetAllowedLabelTypes(task));
            ValidateTrainDataColumn(trainData, columnInformation.ExampleWeightColumnName, WeightColumnPurposeName);
            ValidateTrainDataColumn(trainData, columnInformation.SamplingKeyColumnName, SamplingKeyColumnPurposeName);
            ValidateTrainDataColumn(trainData, columnInformation.UserIdColumnName, UserIdColumnPurposeName);
            ValidateTrainDataColumn(trainData, columnInformation.ItemIdColumnName, ItemIdColumnPurposeName);
            ValidateTrainDataColumn(trainData, columnInformation.GroupIdColumnName, GroupIdColumnPurposeName);
            ValidateTrainDataColumns(trainData, columnInformation.CategoricalColumnNames, CategoricalColumnPurposeName,
                new DataViewType[] { NumberDataViewType.Single, TextDataViewType.Instance });

View on GitHub (pinned to 7b76e69cf9)

Solutions

  1. Convert unsupported numeric columns to float (Single) before Execute, e.g. via ConvertTransform.Type.Conversion to I8→R4 or by changing the C# type to float
  2. Mark columns that are not real features as ignored columns (IgnoredColumnNames)
  3. Pre-convert DateTime or key columns to text/float features with your own transforms before handing data to AutoML

Example fix

// before
public class ModelInput {
    public double Temperature { get; set; } // unsupported feature type
    public string Label { get; set; }
}

// after
public class ModelInput {
    public float Temperature { get; set; }
    public string Label { get; set; }
}
Defensive patterns

Strategy: validation

Validate before calling

foreach (var col in trainData.Schema)
{
    if (col.Name == colInfo.LabelColumnName) continue;
    var t = col.Type.GetItemType();
    if (t != BooleanDataViewType.Instance && t != NumberDataViewType.Single && t != TextDataViewType.Instance)
        throw new InvalidOperationException($"Column {col.Name} of type {t} is unsupported");
}

Try / catch

try { var r = experiment.Execute(data, label, "A"); }
catch (ArgumentException ex) when (ex.Message.Contains("supported feature column types")) { /* convert or ignore offending column, retry */ }

Prevention

When it happens

Trigger: Passing data with numeric columns typed as double/int/short, DateTime columns, or key-typed columns that are not declared as label/ignore/userId/itemId/groupId and are not pre-converted.

Common situations: C# model classes using double for measurements; CSV inference producing double columns; loading parquet/SQL data with int32 columns; forgetting to mark metadata/id columns as ignored.

Related errors


AI-assisted analysis of dotnet/machinelearning@7b76e69cf9 (2026-09-11). Data as JSON: /api/errors/c983e9d04e3d57b5. Report an issue: GitHub.