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()); }
/// <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)); }
public DataTableTrainingDataProvider(ILinearAlgebraProvider lap, IDataTable table, IDataTableVectoriser vectoriser) { _lap = lap; _table = table; _vectoriser = vectoriser; _inputSize = _vectoriser.InputSize; _outputSize = _vectoriser.OutputSize; }
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()); }
public DefaultDataTableAdaptor(ILinearAlgebraProvider lap, IDataTable dataTable, IDataTableVectoriser vectoriser = null) : base(lap, dataTable) { _vectoriser = vectoriser ?? dataTable.GetVectoriser(); }
public ITrainingDataProvider CreateTrainingDataProvider(IDataTable table, IDataTableVectoriser vectoriser = null) { return(new DataTableTrainingDataProvider(_lap, table, vectoriser ?? table.GetVectoriser())); }