一組資料:
data = [,,
]
其中born和died是數字,對於name要進行文字處理。直觀的方式是給每個名字加上乙個數字**,,這樣使名字之間會有大小之分。對於類別變數,往往尋找二值編碼,要麼是,1,要麼不是,0,在機器學習中稱獨熱編碼。
上述data的獨熱編碼結果,列名中,對於value是字串的資料,進行了一些拼接處理:
['born', 'died', 'name=吳中', 'name=張天', 'name=李地']
[[1996 2077 0 1 0]
[1986 2067 0 0 1]
[1976 2057 1 0 0]]
利用scikit-learn中的dictvectorizer轉換為獨熱編碼,以及係數矩陣的緊湊形式(三元組表示法):
from sklearn.feature_extraction import dictvectorizer
data = [,,
]# sparse=false 稀疏矩陣
vec = dictvectorizer(sparse=false, dtype=int)
# 將向量化的字典轉換成numpy.ndarray。轉化後才能用get_feature_names()。
transdata = vec.fit_transform(data)
print(vec.dtype,type(vec))
print(transdata.dtype, type(transdata))
print(vec.get_feature_names())
print(transdata)
# sparse=true 稀疏矩陣的緊湊表示方法
處理文字特徵時,較方便的方是用數字計數方式來表示單詞或短語
from sklearn.feature_extraction.text import countvectorizer
# data = ['乙個','兩個','三個'] 中文不太合適
data = ['feature engineering','feature selection','feature extraction feature']
vect = countvectorizer()
# 計算逆文件頻率tf-idf
ttransdata = vect.fit_transform(data)
print('ttransdata:\n',ttransdata)
print('faeture name:\n',vect.get_feature_names())
print('ttransdata.toarray:\n',ttransdata.toarray())
out:
ttransdata:
(0, 2) 1
(0, 0) 1
(1, 2) 1
(1, 3) 1
(2, 2) 2
(2, 1) 1
faeture name:
['engineering', 'extraction', 'feature', 'selection']
ttransdata.toarray:
[[1 0 1 0]
[0 0 1 1]
[0 1 2 0]]
另一種,根據單詞頻率計算權重的技術為逆文件頻率tf-idf (term frequency-inverse document frequency)
from sklearn.feature_extraction.text import tfidfvectorizer
# data = ['乙個','兩個','三個'] 中文不太合適
data = ['feature engineering','feature selection','feature extraction feature']
vect = tfidfvectorizer()
# 計算逆文件頻率tf-idf
ttransdata = vect.fit_transform(data)
print('ttransdata:\n',ttransdata)
print('faeture name:\n',vect.get_feature_names())
print('ttransdata.toarray:\n',ttransdata.toarray())
out:
ttransdata:
(0, 0) 0.8610369959439764
(0, 2) 0.5085423203783267
(1, 3) 0.8610369959439764
(1, 2) 0.5085423203783267
(2, 1) 0.6461289150464732
(2, 2) 0.7632282916276542
faeture name:
['engineering', 'extraction', 'feature', 'selection']
ttransdata.toarray:
[[0.861037 0. 0.50854232 0. ]
[0. 0. 0.50854232 0.861037 ]
[0. 0.64612892 0.76322829 0. ]]
那麼,這些東西有什麼用呢?
兩個醫療診斷的決策樹構建-sklearn、python
表示學習與特徵工程
當我們進行機器學習演算法時,首先做的第一步是對資料進行提取特徵,而在機器學習中一般有兩種思路來提公升原始資料的表達 1.表示學習 為了提高機器學習系統的準確率,我們就需要將輸入資訊轉換為有效的特徵,或者更一般性稱為表示。如果有一種演算法可以自動地學習出資料有效的特徵,並提高最終機器學習模型的效能,那...
機器學習 文字特徵值表示
對資料最簡單的編碼之一是使用單詞計數,對於每個短語,僅僅計算其中每個單詞出現的次數,在sklearn中,使用countvectorizer就可以輕鬆解決!看 文字特徵表示 from sklearn.feature extraction.text import countvectorizer samp...
文字特徵抽取與處理
一 nlp的文字表示 既是語言模型 language model 是我們分析的入口。1 統計語言模型的目的 建立乙個能夠描述一句話 乙個詞的概率估計方法 2 語義模型的基礎模型 p w1w2w3.wi 累乘 p w1 p w2 w1 p w2 w2w1 3 語義模型的概率估計 一句話乙個片語在一起的...