我有一个列表列表,每个列表包含1个最多5个标签。我构建了一个包含前50个标签的列表。我的目标是构建一个新的列表列表,其中每个列表仅包含前50个标记。我的方法是这样的:
首先,我构建了一个仅包含前50个标签的新列表列表:
top_50 = list(np.array(pd.read_csv(os.path.join(dir,"Tags.csv")))[:,1])
train = pd.read_csv(os.path.join(dir,"Train.csv"),iterator = True)
top_50 = top_50[:51]
tags = list(np.array(train.get_chunk(50000))[:,3])
top_50_tags = [[tag for tag in list if tag in top_50] for list in tags]
然后我尝试对标签进行编码:
coder = preprocessing.LabelEncoder()
coder = coder.fit(top_50)
tags = [coder.transform(tag) for tag in list for list in top_50_tags]
然而,这给了我这个错误:
Traceback (most recent call last):
File "C:\Users\Ano\workspace\final_submission\src\rf_test.py", line 69, in <module>
main()
File "C:\Users\Ano\workspace\final_submission\src\rf_test.py", line 33, in main
labels = [coder.transform(tag) for tag in list for list in top_50_tags]
File "C:\Python27\lib\site-packages\sklearn\preprocessing\label.py", line 120, in transform
raise ValueError("y contains new labels: %s" % str(diff))
ValueError: y contains new labels: ['#']
我认为这个错误会上升,因为我的一些列表是空的,因为它们中没有前50个标记。但该错误明确指出[“#”]是新见过的标签。我的假设是对的吗?我应该怎么处理错误信息?
修改
对于那些想知道为什么我在列表理解中使用list作为变量的人,我实际上在我的真实程序中使用了一个不同的单词作为变量。
更新
我检查了top_50和标签的差异:
print(len(top_50.difference(tags)))
给了我一个0的长度。这应该意味着我的空列表是问题吗?
答案 0 :(得分:-1)
也许您可以查看此问题:https://github.com/scikit-learn/scikit-learn/issues/3123 在scikit-learn 0.17版本中,这个bug已经解决了。