コード例 #1
0
ファイル: DataTable.cs プロジェクト: prosa100/brightwire
        public IDataTable ConvertToNumeric(IDataTableVectoriser vectoriser = null, bool useTargetColumnIndex = true, Stream output = null)
        {
            var writer = new DataTableWriter(output);

            vectoriser = vectoriser ?? GetVectoriser(useTargetColumnIndex);

            // add the numeric columns
            foreach (var name in vectoriser.ColumnNames)
            {
                writer.AddColumn(name, ColumnType.Float);
            }

            // add the classification label column
            var classColumnIndex = TargetColumnIndex;

            if (useTargetColumnIndex)
            {
                var classColumn = _column[classColumnIndex];
                writer.AddColumn(classColumn.Name, ColumnType.String, true);
            }

            // vectorise each row
            _Iterate((row, i) => {
                var rowData = vectoriser.GetInput(row).Data.AsEnumerable().Cast <object>();
                if (useTargetColumnIndex)
                {
                    rowData = rowData.Concat(new object[] { row.GetField <string>(classColumnIndex) });
                }

                writer.AddRow(new DataTableRow(this, rowData.ToArray(), _rowConverter));
                return(true);
            });
            return(writer.GetDataTable());
        }
コード例 #2
0
        /// <summary>
        /// Creates a data source from a data table
        /// </summary>
        /// <param name="dataTable">The data table to convert</param>
        /// <param name="vectoriser">Optional data table vectoriser (if the data table contains categorical or index based data)</param>
        /// <returns></returns>
        public IDataSource CreateDataSource(IDataTable dataTable, IDataTableVectoriser vectoriser = null)
        {
            var columns         = dataTable.Columns;
            var dataColumnTypes = columns
                                  .Where((c, i) => i != dataTable.TargetColumnIndex)
                                  .Select(c => c.Type)
                                  .ToList()
            ;
            var targetColumnType    = columns[dataTable.TargetColumnIndex].Type;
            var firstDataColumnType = dataColumnTypes.FirstOrDefault();

            if (firstDataColumnType != ColumnType.Null && dataColumnTypes.All(ct => ct == firstDataColumnType))
            {
                // many to many
                if (firstDataColumnType == ColumnType.Matrix && targetColumnType == ColumnType.Matrix)
                {
                    return(new SequentialDataTableAdaptor(_lap, dataTable));
                }

                // one to one
                else if (firstDataColumnType == ColumnType.Vector && targetColumnType == ColumnType.Vector)
                {
                    return(new VectorBasedDataTableAdaptor(_lap, dataTable));
                }

                // one to many
                else if (firstDataColumnType == ColumnType.Vector && targetColumnType == ColumnType.Matrix)
                {
                    return(new OneToManyDataTableAdaptor(_lap, dataTable));
                }

                // many to one
                else if (firstDataColumnType == ColumnType.Matrix && targetColumnType == ColumnType.Vector)
                {
                    return(new ManyToOneDataTableAdaptor(_lap, dataTable));
                }

                // volume classification
                else if (firstDataColumnType == ColumnType.Tensor && targetColumnType == ColumnType.Vector)
                {
                    return(new TensorBasedDataTableAdaptor(_lap, dataTable));
                }

                // index list
                else if (firstDataColumnType == ColumnType.IndexList)
                {
                    return(new IndexListDataTableAdaptor(_lap, dataTable, vectoriser));
                }

                // weighted index list
                else if (firstDataColumnType == ColumnType.WeightedIndexList)
                {
                    return(new WeightedIndexListDataTableAdaptor(_lap, dataTable, vectoriser));
                }
            }

            // default adapator
            return(new DefaultDataTableAdaptor(_lap, dataTable, vectoriser));
        }
コード例 #3
0
 public DataTableTrainingDataProvider(ILinearAlgebraProvider lap, IDataTable table, IDataTableVectoriser vectoriser)
 {
     _lap        = lap;
     _table      = table;
     _vectoriser = vectoriser;
     _inputSize  = _vectoriser.InputSize;
     _outputSize = _vectoriser.OutputSize;
 }
コード例 #4
0
        public IDataTable ConvertToNumeric(IDataTableVectoriser vectoriser = null, Stream output = null)
        {
            var writer = new DataTableWriter(output);

            vectoriser = vectoriser ?? GetVectoriser();
            foreach (var name in vectoriser.ColumnNames)
            {
                writer.AddColumn(name, ColumnType.Float);
            }
            var classColumnIndex = TargetColumnIndex;
            var classColumn      = _column[classColumnIndex];

            writer.AddColumn(classColumn.Name, ColumnType.String, true);

            _Iterate(row => {
                var data = vectoriser.GetInput(row).AsEnumerable().Cast <object>().Concat(new object[] { row.GetField <string>(classColumnIndex) });
                writer.AddRow(data);
                return(true);
            });
            return(writer.GetDataTable());
        }
コード例 #5
0
 public DefaultDataTableAdaptor(ILinearAlgebraProvider lap, IDataTable dataTable, IDataTableVectoriser vectoriser = null)
     : base(lap, dataTable)
 {
     _vectoriser = vectoriser ?? dataTable.GetVectoriser();
 }
コード例 #6
0
 public ITrainingDataProvider CreateTrainingDataProvider(IDataTable table, IDataTableVectoriser vectoriser = null)
 {
     return(new DataTableTrainingDataProvider(_lap, table, vectoriser ?? table.GetVectoriser()));
 }