類別變數與文字特徵表示

2022-06-20 10:18:10 字數 3244 閱讀 7816

一組資料:

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 語義模型的概率估計 一句話乙個片語在一起的...