我正在为自己的一些工作开发一个C ++机器学习库,我对表示输入数据的最佳实践感到好奇。现在,我正在考虑使用一个DataManager类来处理I / O操作,以便从文件,流中读取数据等。在开发中,我意识到还需要创建类来管理功能标签(与输入数据相关联)和类标签(在训练数据的情况下)。
因此,我的实现有一个类,它将文件中的数据(我正在使用UCI机器学习库)读入boost :: variant对象。 DataManager类重载运算符>>这样我就可以从提供的行中读取每个以逗号分隔的特征值;它的特征值是'?',它输入struct t_missing {}。
对于类/功能管理器,我认为维护一个功能/类名称的链接列表以及每个功能/类名称的实例数量是合适的。
无论如何,这只是我对这样一个课程的初步想法,我很想听听关于实施的其他一些想法/建议。显示代码不是必需的;我大部分只是想听听我应该考虑的其他事情。
谢谢!
答案 0 :(得分:1)
稀疏数据存在一些学习问题,即具有大量可能特征的数据,其中大部分都是零。在这种情况下,仅存储非零的特征会更有效。
这通常是SVM库的情况,例如LibSVM,它将向量存储为(feature_index,feature_value)对的列表。例如。他们将用于矢量的格式:
[0, 1, 0, 0, 1, 0, 0, 1]
将是:(索引从1开始)
2:1 5:1 8:1