我正在研究一个未经训练的分类器模型。我在Python 2.7中工作。我有一个循环。它看起来像这样:
features = [0 for i in xrange(len(dictionary))]
for bgrm in new_scored:
for i in xrange(len(dictionary)):
if bgrm[0] == dictionary[i]:
features[i] = int(bgrm[1])
break
我有一本"字典"我从包含客户评论的数据集中收集的双字母组合,我想构建与我创建的字典相对应的每个评论的特征数组。它将包含在词典中的功能审查中发现的双字母组合的频率(我希望这是有道理的)。 new_scored是一个元组列表,其中包含特定评论中找到的bigrams,以及在该评论中发生的相对频率。最终的特征数组与原始字典的长度相同,几乎没有非零条目。
以上工作正常,但我正在查看13000条评论的数据集,因为每次审核都要循环使用此代码(如果我的电脑首先没有用完RAM)。我已经和它坐了一会儿,看不出我怎么能压缩它。
我是python的新手,所以我希望更有经验的人可以帮助缩小它,或者让我指向一个包含我需要的功能的库的正确方向。
提前谢谢!
答案 0 :(得分:0)
考虑使dictionary
成为一个实际的dict
对象(或dict
的一些更好的子类,如果它更适合您的需要),而不是迭代(list
或{ {1}}看起来就像现在一样)。 tuple
可以将bigrams映射为标识特征位置的整数标识符的键。
如果以这种方式重构dictionary
,则可以将循环重写为:
dictionary
这应该将通过features = [0 for key in dictionary]
for bgram in new_scored:
try:
features[dictionary[bgram[0]]] = int(bgrm[1])
except KeyError:
# do something if the bigram is not in the dictionary for some reason
的O(n)遍历转换为哈希查找。
希望这有帮助。