2013-12-18 98 views
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長度這應該意味着,我的空名單的問題?

+0

我不知道我是否可以幫助你,但同時,你爲什麼在列表理解中使用'list'作爲變量名? – Roberto

+0

我可能會說明這是顯而易見的,但是當'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

+1

在我真實的程序中,我沒有,但爲了清晰起見,我在這裏使用它。我將添加一個編輯 – Learner

回答