python中以表示语块_scikitlearn:将数据拟合成块与将其全部拟合到on
這取決于您使用的矢量器。在
CountVectorizer統(tǒng)計(jì)文檔中單詞的出現(xiàn)次數(shù)。
它為每個(gè)文檔輸出一個(gè)(n_words, 1)向量,其中包含每個(gè)單詞在文檔中出現(xiàn)的次數(shù)。n_words是文檔中的單詞總數(shù)(也就是詞匯表的大小)。
它也適合詞匯表,這樣您就可以反省模型(看看哪個(gè)詞是重要的,等等)。您可以使用vectorizer.get_feature_names()查看它。在
當(dāng)你把它放在前500個(gè)文檔中時(shí),詞匯表將只由500個(gè)文檔中的單詞組成。假設(shè)有30k個(gè)這樣的矩陣,fit_transform輸出一個(gè)500x30k稀疏矩陣。
現(xiàn)在您再次使用接下來的500個(gè)文檔fit_transform,但是它們只包含29k個(gè)單詞,所以您得到了一個(gè)500x29k矩陣…
現(xiàn)在,如何調(diào)整矩陣以確保所有文檔都具有一致的表示形式?
我現(xiàn)在想不出一個(gè)簡(jiǎn)單的辦法來做這件事。在
對(duì)于TfidfVectorizer您還有另一個(gè)問題,那就是文檔頻率的倒數(shù):為了能夠計(jì)算文檔頻率,您需要一次查看所有文檔。
但是TfidfVectorizer只是一個(gè)CountVectorizer,后面跟著一個(gè)TfIdfTransformer,因此,如果您設(shè)法獲得CountVectorizer的輸出,那么您可以對(duì)數(shù)據(jù)應(yīng)用TfIdfTransformer。在
使用HashingVectorizer,情況有所不同:這里沒有詞匯表。在In [51]: hvect = HashingVectorizer()
In [52]: hvect.fit_transform(X[:1000])
<1000x1048576 sparse matrix of type ''
with 156733 stored elements in Compressed Sparse Row format>
在這里,前1000個(gè)文檔中沒有1M+個(gè)不同的單詞,但是我們得到的矩陣有1M+列。
HashingVectorizer不在內(nèi)存中存儲(chǔ)單詞。這樣可以提高內(nèi)存效率,并確保返回的矩陣始終具有相同的列數(shù)。
所以您不會(huì)遇到與CountVectorizer相同的問題。在
這可能是您所描述的批處理的最佳解決方案。有兩個(gè)缺點(diǎn),即你不能得到idf權(quán)重,你不知道單詞和你的特征之間的映射。在
希望這有幫助。在
編輯:
如果您有太多的數(shù)據(jù),HashingVectorizer是最好的選擇。
如果您仍然想使用CountVectorizer,一個(gè)可能的解決方法是自己調(diào)整詞匯表并將其傳遞給向量器,這樣您只需要調(diào)用tranform。在
下面是一個(gè)您可以修改的示例:
^{pr2}$
現(xiàn)在,不起作用的方法是:# Fitting directly:
vect = CountVectorizer()
vect.fit_transform(X[:1000])
<1000x27953 sparse matrix of type ''
with 156751 stored elements in Compressed Sparse Row format>
注意我們得到的矩陣的大小。
“手動(dòng)”匹配詞匯:def tokenizer(doc):
# Using default pattern from CountVectorizer
token_pattern = re.compile('(?u)\\b\\w\\w+\\b')
return [t for t in token_pattern.findall(doc)]
stop_words = set() # Whatever you want to have as stop words.
vocabulary = set([word for doc in X for word in tokenizer(doc) if word not in stop_words])
vectorizer = CountVectorizer(vocabulary=vocabulary)
X_counts = vectorizer.transform(X[:1000])
# Now X_counts is:
# <1000x155448 sparse matrix of type ''
# with 149624 stored elements in Compressed Sparse Row format>
#
X_tfidf = tfidf.transform(X_counts)
在您的示例中,您需要在應(yīng)用tfidf轉(zhuǎn)換之前首先構(gòu)建整個(gè)矩陣X_計(jì)數(shù)(對(duì)于所有文檔)。在
總結(jié)
以上是生活随笔為你收集整理的python中以表示语块_scikitlearn:将数据拟合成块与将其全部拟合到on的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淡奶油哪里可以买到 淡奶油购买指南?
- 下一篇: ssh 配置:在 Linux 中 ssh