/// <summary> /// Auto-detect purpose for the data view columns. /// </summary> public static PurposeInference.Column[] InferPurposes(MLContext context, IDataView data, ColumnInformation columnInfo) { data = context.Data.TakeRows(data, MaxRowsToRead); var allColumns = new List <IntermediateColumn>(); var columnsToInfer = new List <IntermediateColumn>(); for (var i = 0; i < data.Schema.Count; i++) { var column = data.Schema[i]; IntermediateColumn intermediateCol; if (column.IsHidden) { intermediateCol = new IntermediateColumn(data, i, ColumnPurpose.Ignore); allColumns.Add(intermediateCol); continue; } var columnPurpose = columnInfo.GetColumnPurpose(column.Name); if (columnPurpose == null) { intermediateCol = new IntermediateColumn(data, i); columnsToInfer.Add(intermediateCol); } else { intermediateCol = new IntermediateColumn(data, i, columnPurpose.Value); } allColumns.Add(intermediateCol); } foreach (var expert in GetExperts()) { expert.Apply(columnsToInfer.ToArray()); } return(allColumns.Select(c => c.GetColumn()).ToArray()); }