我試圖在scikit-learn中使用一些自定義詞彙來處理一些聚類任務,並且我得到了很奇怪的結果。使用TfidfVectorizer自定義詞彙表的問題scikit-learn
當不使用自定義詞彙時,程序運行正常,我對集羣創建感到滿意。但是,我已經確定了一組我希望用作自定義詞彙的單詞(約24,000個)。
單詞存儲在SQL Server表中。到目前爲止,我嘗試了兩種方法,但最後我得到了相同的結果。第一個是創建一個列表,第二個是創建一個字典。爲創建字典的代碼是這樣的:
myvocab = {}
vocabulary = []
count = 0
for row in results:
skillName = re.sub(r'&#?[a-z0-9]+;', ' ', row['SkillName'])
skillName = unicode(skillName,"utf-8")
vocabulary.append(skillName) #Using a list
myvocab[str(skillName)] = count #Using a dictionary
count+=1
然後我用在TfidfVectorizer詞彙(列表中的每個版本或字典中,他們都給予末相同的結果),如下所示:
vectorizer = TfidfVectorizer(max_df=0.8,
stop_words='english' ,ngram_range=(1,2) ,vocabulary=myvocab)
X = vectorizer.fit_transform(dataset2)
X的形狀是(651,24321),因爲我有651個實例羣集和在詞彙24321個字。
如果我打印X的內容,這就是我得到:
(14, 11462) 1.0
(20, 10218) 1.0
(34, 11462) 1.0
(40, 11462) 0.852815313278
(40, 10218) 0.52221264006
(50, 11462) 1.0
(81, 11462) 1.0
(84, 11462) 1.0
(85, 11462) 1.0
(99, 10218) 1.0
(127, 11462) 1.0
(129, 10218) 1.0
(132, 11462) 1.0
(136, 11462) 1.0
(138, 11462) 1.0
(150, 11462) 1.0
(158, 11462) 1.0
(186, 11462) 1.0
(210, 11462) 1.0
: :
如可以看出,大多數情況下,只有從詞彙詞存在(這是不對的,因爲至少10個),並且對於很多實例,甚至沒有找到一個單詞。而且,所發現的單詞在實例中總是相同的,這是沒有意義的。
如果我使用打印feature_names:
feature_names = np.asarray(vectorizer.get_feature_names())
我得到:
['.NET' '10K' '21 CFR Part 11' ..., 'Zend Studio' 'Zendesk' 'Zenworks']
我必須說,這一項目是完全運行時所使用的詞彙是一個從輸入文件確定,所以我強烈懷疑問題與使用自定義詞彙有關。
有沒有人有線索發生了什麼?
(我不使用流水線所以這個問題不能與以前的錯誤,這已經被固定)
我嘗試過使用ngram_range從(1,1)到(1,5)的不同變化,我總是得到相同的結果。 1克詞彙項目的數量是9692,2克:13215,3克:1337,4克:77。我不認爲這是問題所在。 – FRiverai 2013-02-21 10:55:46