from sklearn.feature_extraction.text import countvectorizer, tfidfvectorizer, tfidftransformer
corpus = [
'this is the first document.',
'this is the second second document.',
'and the third one.',
'is this the first document?',
]
countvectorizer是通過fit_transform函式將文字中的詞語轉換為詞頻矩陣
get_feature_names()可看到所有文字的關鍵字
vocabulary_可看到所有文字的關鍵字和其位置
toarray()可看到詞頻矩陣的結果
vectorizer = countvectorizer()
count = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
print(vectorizer.vocabulary_)
print(count.toarray())
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
[[0 1 1 1 0 0 1 0 1]
[0 1 0 1 0 2 1 0 1]
[1 0 0 0 1 0 1 1 0]
[0 1 1 1 0 0 1 0 1]]
tfidftransformer是統計countvectorizer中每個詞語的tf-idf權值
transformer = tfidftransformer()
tfidf_matrix = transformer.fit_transform(count)
print(tfidf_matrix.toarray())
[[ 0. 0.43877674 0.54197657 0.43877674 0. 0.
0.35872874 0. 0.43877674]
[ 0. 0.27230147 0. 0.27230147 0. 0.85322574
0.22262429 0. 0.27230147]
[ 0.55280532 0. 0. 0. 0.55280532 0.
0.28847675 0.55280532 0. ]
[ 0. 0.43877674 0.54197657 0.43877674 0. 0.
0.35872874 0. 0.43877674]]
tfidfvectorizer可以把countvectorizer, tfidftransformer合併起來,直接生成tfidf值
tfidfvectorizer的關鍵引數:
max_df:這個給定特徵可以應用在 tf-idf 矩陣中,用以描述單詞在文件中的最高出現率。假設乙個詞(term)在 80% 的文件中都出現過了,那它也許(在劇情簡介的語境裡)只攜帶非常少資訊。
min_df:可以是乙個整數(例如5)。意味著單詞必須在 5 個以上的文件**現才會被納入考慮。設定為 0.2;即單詞至少在 20% 的文件**現 。
ngram_range:這個引數將用來觀察一元模型(unigrams),二元模型( bigrams) 和三元模型(trigrams)。參考n元模型(n-grams)。
token_pattern:token_pattern這個引數使用正規表示式來分詞,其預設引數為r"(?u)\b\w\w+\b",其中的兩個\w決定了其匹配長度至少為2的單詞,所以這邊減到1個(r"(?u)\b\w+\b")。對這個引數進行更多修改,可以滿足其他要求,比如這裡依然沒有得到標點符號,在此不詳解了。
tfidf_vec = tfidfvectorizer()
tfidf_matrix = tfidf_vec.fit_transform(corpus)
print(tfidf_vec.get_feature_names())
print(tfidf_vec.vocabulary_)
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
print(tfidf_matrix.toarray())
[[ 0. 0.43877674 0.54197657 0.43877674 0. 0.
0.35872874 0. 0.43877674]
[ 0. 0.27230147 0. 0.27230147 0. 0.85322574
0.22262429 0. 0.27230147]
[ 0.55280532 0. 0. 0. 0.55280532 0.
0.28847675 0.55280532 0. ]
[ 0. 0.43877674 0.54197657 0.43877674 0. 0.
0.35872874 0. 0.43877674]]
如果想用訓練集的idf值來計算測試集的tf-idf值,可以通過fit() + transform()
tfidf_vec = tfidfvectorizer()
tfidf_matrix = tfidf_vec1.fit(x_train).transform(x_test)
注:sklearn中計算tf-idf的公式和原理,可以參考tf-idf 原理及sklearn中的tf-idf例項分析 sklearn特徵的提取 上)
首先必須知道什麼是特徵工程 特徵工程是通過對原始資料的處理和加工,將原始資料屬性通過處理轉換為資料特徵的過程,屬性是資料本身具有的維度,特徵是資料中所呈現出來的某一種重要的特性,通常是通過屬性的計算,組合或轉換得到的。比如主成分分析就是將大量的資料屬性轉換為少數幾個特徵的過程。某種程度而言,好的資料...
sklearn特徵的提取 下)
上文特徵的提取 上 詞袋模型的方法很好用,也很直接,但在有些場景下很難使用,比如分詞後的詞彙字典表非常大,達到100萬 此時如果直接使用詞頻向量或tf idf權重向量的方法,將對應的樣本對應特徵矩陣載 入記憶體,有可能將記憶體撐爆,在這種情況下我們該怎麼辦呢?詞袋模型的方法很好用,也很直接,但在有些...
使用awk提取文字
1.使用awk提取文字 問題本案例要求使用awk工具完成下列過濾任務 練習awk工具的基本用法 提取本機的ip位址 根分割槽使用率 格式化輸出 etc passwd檔案中的使用者名稱 uid 宿主目錄資訊 格式化輸出passwd檔案內容時,要求第一行為列表標題,最後一行提示一共已處理文字的總行數,如...