예제 #1
0
        /// <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());
        }