OrderedDict的快速解决方案’O(1)索引查找在Python中的限制

问题的背景

我定期处理巨大的机器学习数据集。一种非常通用的格式,用于 威卡 是个 “ARFF”(属性关系文件格式)。这本质上创建了一个结构良好的,丰富的CSV文件,可以轻松地在Logistic回归,决策树,SVM等中使用。每个文件,例如:

f0 f1 f2 f3 fn
1 0 1 0 0

进入更简洁的版本,其中您具有功能列表,只需指定功能’的索引和值(如果有):

@ATTRIBUTE f0数值
@ATTRIBUTE f1数值
@ATTRIBUTE f2 NUMERIC
@ATTRIBUTE f3 NUMERIC

@属性fn数字
@数据
{0 1,2 1}

{feature-index-zero为1,feature-index-two为1}, 只需忽略所有零值。

实施问题

如果您有4个功能,这很容易,但是如果您有超过100万个功能并且需要找到每个功能的索引,该怎么办?在列表中搜索特征是O(n),并且如果您的训练数据也很大,那么创建稀疏的ARFF将会非常低效:

我以为可以通过使用OrderedDict来改善这一点。很简单,这是一个维护其项目顺序的字典–因此您可以以类似堆栈的方式从最后弹出()项目。但是,之后 关于StackOverflow的一些研究,这令人失望’包含任何有效的方法来计算键的索引:

解决方案

我们该怎么办?输入我最喜欢的东西,默认为lambdas:

稍微修改一下lambda,除了索引之外,分配项目值也很简单:

 局限性

这是一个有趣的修复程序,但没有’支持完整的词典功能– deleting items won’重新排序索引,您可以’轻松地依次进行迭代。但是,由于在创建此ARFF文件时,’无需删除或迭代’s not a problem.

发表评论