每月档案: 2013年九月

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.

WNYC电台:“黑客马拉松值得吗?”

WNYC电台的记者Jeff Coltin最近与我联系,要求我参加 显示关于黑客马拉松 在纽约。

他精选了我们谈话中的一小段内容,特别是有关黑客社区可以解决的问题。我说(模糊准确的转录):

“…骇客马拉松可以解决的问题太多了。我认为目前媒体上存在一些重大问题,例如NSA间谍丑闻之类的事情。我认为技术社区稍微做不到的一件事就是使加密变得非常容易。那里’是简单性和安全性之间的一种反向关系,因此应用程序越安全,通常使用起来就越不方便。所以我们有这样的事情 TOR,超长密码(TOR会大大降低您的连接速度),VPN和许多非常安全的服务与主流服务不兼容。因此,用户想要或需要的这种级别的安全性和隐私非常不便,这实际上取决于黑客社区,使他们更容易使用…”

已经进行了诸如 隐猫 但其采用率仍需要提高。 HTTPS可能是无缝加密的最佳示例,但是当人们对HTTPS证书被浏览器标记为无效时,人们无视或不知所措时,通常会失败。

密码学是计算机科学领域一个极为艰巨的领域,因此很难创建可靠的安全应用程序。对此进行自我教育可能需要相当超人的努力,而且我非常尊重做出贡献的人们 此字段中的模块到PyPI。一世’我希望开始 Coursera上的加密课程 一旦我有更多的空闲时间,但是击败我提到的安全性-简单逆关系肯定说起来容易做起来难。