我试图在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