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
- 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
- Mark columns that are not real features as ignored columns (IgnoredColumnNames)
- 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
- Use float (not double/int) for numeric feature properties in ModelInput classes
- Mark id/metadata columns as ignored in ColumnInformation
- Pre-transform DateTime and key columns before handing data to AutoML
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
- {DefaultColumnNames.Features} column must be of data type {N
- If provided, {nameof(samplingKeyColumnName)} must be the sam
- Training data cannot be null
- Training data has 0 rows
- Duplicate column name {duplicateColName} is present in two o
AI-assisted analysis of dotnet/machinelearning@7b76e69cf9 (2026-09-11).
Data as JSON: /api/errors/c983e9d04e3d57b5.
Report an issue: GitHub.