「作者主頁」:士別三日wyx
「作者簡介」:CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡安全領域優(yōu)質創(chuàng)作者
「推薦專欄」:對網(wǎng)絡安全感興趣的小伙伴可以關注專欄《網(wǎng)絡安全入門到精通》
對「文本」進行特征提取時,一般會用「單詞」作為特征,即特征詞。
TfidfVectorizer會計算特征詞的「權重」,幫我們發(fā)現(xiàn)哪個詞是最重要的。
比如,某個詞在這篇文章中出現(xiàn)的頻率很高,但在其他文章中出現(xiàn)的頻率很低,那么這個詞對于這篇文章的權重就高。
而 CountVectorizer 則只是單純的計算特征詞出現(xiàn)的「次數(shù)」,對于多篇文章的特征提取,就相對遜色。
一、特征提取API
sklearn.feature_extraction 是用來提取特征的API。
sklearn.feature_extraction.text.TfidfVectorizer( stop_words=[…] )
- fit_transform( data ):接收數(shù)據(jù)(文本或包含文本字符串的可迭代對象),返回提取的特征(權重矩陣)
- vector.inverse_transform(new_data):將提取的特征,轉換成之前的數(shù)據(jù)
- get_feature_names_out():獲取(特征)單詞列表
參數(shù):
- stop_words:停用詞,數(shù)組類型,指定的停用詞不再作為特征詞。
二、提取特征
我們準備一組原始數(shù)據(jù),「提取」特征:
from sklearn import feature_extraction
# 原始數(shù)據(jù)
old_data = [
"I am your mather !"
"I am your father !"
]
# 初始化
tf = feature_extraction.text.TfidfVectorizer()
# 提取特征
new_data = tf.fit_transform(old_data)
print(new_data)
輸出:
(0, 1) 0.31622776601683794
(0, 2) 0.31622776601683794
(0, 3) 0.6324555320336759
(0, 0) 0.6324555320336759
提取的結果是sparse類型的特征矩陣,我們用type查看一下返回值類型:
new_data = tf.fit_transform(old_data)
print(type(new_data))
輸出:
<class 'scipy.sparse._csr.csr_matrix'>
這種存儲形式目的是「節(jié)省內(nèi)存」,但不利于我們分析,接下來,我們把結果轉化成數(shù)組形式。
三、轉成數(shù)組
使用sparse矩陣的內(nèi)置方法 toarray() 轉成「數(shù)組」
from sklearn import feature_extraction
# 原始數(shù)據(jù)
old_data = [
"I am your mather !"
"I am your father !"
]
# 初始化
tf = feature_extraction.text.TfidfVectorizer()
# 提取特征
new_data = tf.fit_transform(old_data)
print(new_data.toarray())
輸出:
[[0.63245553 0.31622777 0.31622777 0.63245553]]
這種格式看起來友好一些,接下來,我們來分析一下這個輸出結果是什么意思。
四、特征名字
get_feature_names_out() 獲取提取特征的「名字」
from sklearn import feature_extraction
# 原始數(shù)據(jù)
old_data = [
"I am your mather !"
"I am your father !"
]
# 初始化
tf = feature_extraction.text.TfidfVectorizer()
# 提取特征
new_data = tf.fit_transform(old_data)
print(new_data.toarray())
print(tf.get_feature_names_out())
輸出:
[[0.63245553 0.31622777 0.31622777 0.63245553]]
['am' 'father' 'mather' 'your']
原始數(shù)據(jù)中的每一個單詞,都被當做一個特征;
當然,字母和標點符號默認不統(tǒng)計,因為沒有意義。
特征名字 [‘a(chǎn)m’ ‘father’ ‘mather’ ‘your’] 和 提取的特征 [0.63245553 0.31622777 0.31622777 0.63245553] 是一 一 對應的。
意思是:特征詞 am 的權重是 0.63245553,特征詞 father 的權重是 0.31622777,…
五、轉回原始數(shù)據(jù)
inverse_transform( ) 方法可以將提取的特征轉換成原始數(shù)據(jù):文章來源:http://www.zghlxwxcb.cn/news/detail-525373.html
from sklearn import feature_extraction
# 原始數(shù)據(jù)
old_data = [
"I am your mather !"
"I am your father !"
]
# 初始化
tf = feature_extraction.text.TfidfVectorizer()
# 提取特征
new_data = tf.fit_transform(old_data)
print(new_data.toarray())
# 轉回原始數(shù)據(jù)
print(tf.inverse_transform(new_data))
輸出:文章來源地址http://www.zghlxwxcb.cn/news/detail-525373.html
[[0.63245553 0.31622777 0.31622777 0.63245553]]
[array(['father', 'mather', 'your', 'am'], dtype='<U6')]
到了這里,關于【機器學習】特征工程 - 文本特征提取TfidfVectorizer的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!