我正在尝试对一些输入进行分类(文本分类:10,000 多个示例和 100,000 多个特征)
而且我已经读到使用 LibLinear 对于此类任务来说速度更快/内存效率更高,因此,我已将我的 LibSvm 分类器移植到accord/net,如下所示:
//SVM Settings
var teacher = new MulticlassSupportVectorLearning<Linear, Sparse<double>>()
{
//Using LIBLINEAR's L2-loss SVC dual for each SVM
Learner = (p) => new LinearDualCoordinateDescent<Linear, Sparse<double>>()
{
Loss = Loss.L2,
Complexity = 1,
}
};
var inputs = allTerms.Select(t => new Sparse<double>(t.Sentence.Select(s => s.Index).ToArray(), t.Sentence.Select(s => (double)s.Value).ToArray())).ToArray();
var classes = allTerms.Select(t => t.Class).ToArray();
//Train the model
var model = teacher.Learn(inputs, classes);
在点.Learn()
- 我得到一个瞬间OutOfMemoryExcpetion
。
我已经看到CacheSize
文档中有一个设置,但是,我找不到可以降低此设置的位置,如许多示例中所示。
一个可能的原因——我使用的是“哈希技巧”而不是索引——Accord.Net 是否试图分配一个完整的哈希空间数组?(可能接近 int.MaxValue)如果是这样 - 有没有办法避免这种情况?
非常感谢任何帮助!