2
我有一個列表,每個列表包含1到5個標籤。我已經構建了包含前50個標籤的列表。我的目標是構建一份列表,其中每個列表只包含前50個標籤。我的方法是這樣的:ValueError:y包含新標籤:['#']
首先我構建了一個列表的新列表,只有排名前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名的標籤。但是錯誤特別指出[「#」]是新近出現的標籤。我對我的假設是否正確?我該如何處理錯誤信息?
編輯: 對於想知道爲什麼我將列表作爲列表理解中的變量使用的人,實際上我在實際程序中使用了另一個字作爲變量。
更新
我檢查了我的top_50和標籤區別:
print(len(top_50.difference(tags)))
這給了我一個0長度這應該意味着,我的空名單的問題?
我不知道我是否可以幫助你,但同時,你爲什麼在列表理解中使用'list'作爲變量名? – Roberto
我可能會說明這是顯而易見的,但是當'tag'中存在一些獨特標籤時,''transform''中出現的錯誤並不存在於'self.classes_'中的唯一標籤中(這是使用編碼器設置的屬性= coder.fit(top_50)'): https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/preprocessing/label.py 所以你必須檢查兩個列表' top_50'和'tags',並找出他們爲什麼不同... – Roberto
在我真實的程序中,我沒有,但爲了清晰起見,我在這裏使用它。我將添加一個編輯 – Learner