我想使用Encog库中的CSV阅读器,如下所示:
var format = new CSVFormat('.', ' ');
IVersatileDataSource source = new CSVDataSource(filename, false, format);
var data = new VersatileMLDataSet(source);
是否可以从变量数据获取原始数据?在将其用于神经网络之前,我必须在dataGridView中显示CSV到用户的记录。我希望能够修改原始数据。根据{{3}},有属性数据,但它对我不起作用。如果我尝试这样的话:
data.Data[1][1]
我得到空指针异常。在规范化之前使用数据还有另一个问题。我希望通过以下方式获得记录数:
data.GetRecordCount()
但是我得到错误你必须在使用它之前规范化数据集。所以即使我还没有使用数据,我还要规范化它?如果这是真的,那么最好使用我自己的CSV阅读器,然后将其加载到内存中,这对吗?
答案 0 :(得分:1)
所以我只是看了GitHub上的Encog源代码。值得庆幸的是,你的问题定义明确,范围狭窄,所以我可以提供答案。不幸的是,你可能不喜欢它。
基本上,当您将IVersatileDataSource传递给VersatileMLDataSet的构造函数时,它会被放入名为_source的 private readonly 字段中。 _source周围没有抽象,因此您无法从VersatileMLDataSet外部访问它。
Data属性确实只会在规范化过程中填充。在CSVDataSource中似乎没有任何公开任何有价值的字段(同样,所有私有)。
如果您只想查看单列数据,可以保留在Encog中并查看Encog.Util.NetworkUtil.QuickCSVUtils。此类中有一些方法可以帮助您拾取文件并快速获取单列数据。
如果要从Encog中的文件中获取完整的CSV数据,可以使用Encog.Util.CSV.ReadCSV类来获取数据。这是实例化QuickCSVUtils时代码所使用的底层实现。您必须在ReadCSV周围提供一些包装器逻辑,类似于QuickCSVUtils。如果你走这条路,我建议在那个班级偷看,看看它是如何使用ReadCSV的。基本上,ReadCSV会在一次读取一行。
但是如果你真的需要从VersatileMLDataSet类中读取RAW csv数据,那么最好的办法就是在从VersatileMLDataSet派生的自定义类中提供你自己的实现。
答案 1 :(得分:1)
在阅读文件后,您需要执行以下几个步骤:
下面的代码带有适当的评论。
var filename = @"iris.data.csv";
var format = new CSVFormat('.', ',');
IVersatileDataSource source = new CSVDataSource(filename, false, CSVFormat.DecimalPoint);
var data = new VersatileMLDataSet(source);
// Define columns to read data in.
data.DefineSourceColumn("Col1", 0, ColumnType.Continuous);
data.DefineSourceColumn("Col2", 1, ColumnType.Continuous);
data.DefineSourceColumn("Col3", 2, ColumnType.Continuous);
data.DefineSourceColumn("Col4", 3, ColumnType.Continuous);
ColumnDefinition outputColumn = data.DefineSourceColumn("Col5", 4, ColumnType.Nominal);
// Analyze data
data.Analyze();
// Output mapping
data.DefineSingleOutputOthersInput(outputColumn);
// Set normalization strategy
data.NormHelper.NormStrategy = new BasicNormalizationStrategy(-1, 1, -1, 1);
data.Normalize();
// Get count
var count = data.GetRecordCount();
// Clone to get original data
var oiginalData = data.Data.Clone();
有关详细信息,请查看quickstart paper。
我使用的示例数据来自here。