機器學習 特徵工程和文字特徵提取

2021-10-05 11:10:34 字數 4559 閱讀 9049

命令檢視是否可用

注意:安裝scikit-learn需要numpy,pandas等庫

from sklearn.feature_extraction import dictvectorizer

defdictvec()

:"""

對字典特徵值

return none

"""dit = dictvectorizer(

)#例項化

data = dit.fit_transform([,

,])print

(data)

return

none

if __name__==

"__main__"

: dictvec(

)

from sklearn.feature_extraction.text import dictvectorizer 

defwenben()

:"""

對文字特徵值

return none

"""wb = dictvectorizer(

)#例項化

data = wb.fit_transform(

['人生苦短,我用python'

,'人生漫長,不用python'])

print

(data.toarray())

return

none

if __name__==

"__main__"

: wenben(

)

from sklearn.feature_extraction.text import dictvectorizer

import jieba

defcutword()

: cont1=jieba.cut(

"今天很殘忍,明天更殘酷"

) cont2=jieba.cut(

"我們看到的從很遠星系來的光是在幾百萬年之前發出的"

) cont3=jieba.cut(

"如果重用一種方式了解某種事物,你就不會真正的了解他"

)#轉換成列表

content1=

list

(con1)

content2=

list

(con2)

content3=

list

(con3)

#把列表轉換成字串

c1=" ".join(content1)

c2=" ".join(content2)

c3=" ".join(content3)

return c1,c2,c3

defzhongwen()

:"""

對中文特徵值

return none

"""c1,c2,c3=cutword(

)print

(c1,c2,c3)

zw = dictvectorizer(

)#例項化

data = zw.fit_transform(

[c1,c2,c3]

)print

(zw.get_feature_names())

print

(data.toarray())

return

none

if __name__==

"__main__"

: zhongwen(

)

tf:term frequency :詞的頻率 出現的次數

idf:逆文件頻率 inverse document frequency log(總文件數量/該詞出現的文件數量)

資料的特徵預處理:

特徵處理是通過特定的統計方法(數學方法)將資料轉換成演算法要求的資料

數值型資料:標準縮放:1、歸一化 2、標準化 3、缺失值

類別型資料:one-hot編碼

時間型別:時間的切分

特點:通過對原始資料進行變換把資料對映到(預設為[0,1])之間

from sklearn.preprocessing import minmaxscaler

defmm()

:"""

歸一化處理

return none

"""mm=minmaxscaler(feature_range=(2

,3))

data=mm.fit_transfrom([[

90,2,

10,40]

,[60,

2,15,

45],[

75,3,

13,46]

])print

(data)

return

none

if __name__==

"__main__"

: mm(

)

公式:x』=(x-min)/(max-min) x』』=x』*(mx-mi)+mi

注釋:作用於每一列,max為一列得到最大值,min為一列的最小值,那麼x』'為最終結果,mx,mi分別指定區間預設mx=1,mi=0

三個或多個特徵同等重要的時候:進行歸一化

目的:是對某乙個特徵對最終結果不會造成更大的影響

提問:如果資料中異常點較多,會有什麼影響?

答:異常點對最大值最小值影響太大,對最後的值影響大,歸一化的魯棒性較差,只適合傳統經過卻小資料場景。

特點:通過對原始資料進行變換把資料變換到均值為0,標準差為1範圍內

公式:x』=(x-mean)/標準差

注釋:作用於每一列,mean為平均值,var為方差,var=(x1-mean)²+(x2-mean)²+……/n(每個特徵的樣本數)

標準差=var開平方。

其中:方差(考量資料的穩定性)方差越大,資料越分散,方差越小,資料越聚集。

對於標準化來講,異常點不會對標準化有太大的影響,因為具有一定的資料量,少量的異常點對於平均值的影響並不大,從而方差改變較小。

方差為0時,這個特徵所有值都一樣。

sklearn特徵化api:scikit-learn.preprocessing.standardscaler

standarscaler()處理之後每列來說所有的資料都聚集在均值為0附近標準差為1

standarscaler.mean_ 檢視原始資料中每列特徵的平均值

standarscaler.std_ 檢視原始資料每列特徵的方差

標準化步驟:

from sklearn.preprocessing import standardscaler

defbz()

:"""

標準化縮放

return none

"""bz=standardscaler(

) data=standardscaler.fit_transform([[

2.,-

1.,3

.],[

2.,4

.,2.

],[4

.,6.

,-2.

]])print

(data)

return

none

if __name__==

"__main__"

: bz(

)

標準化總結:

在已有樣本足夠多的情況下比較穩定,適合現代嘈雜大資料場景。

如何處理資料中的缺失值:

刪除:如果某行或某列資料缺失值達到一定的比列,建議放棄整行或整列(一般不建議用此方法)

插補:可以通過缺失值每行或每列的平均值、中位數來填充

sklearn缺失值api:sklearn.preprocessing.imputer

資料中的缺失值:np.nan

如果不是則用replace("?",np.nan)進行轉換

缺失值步驟:

from sklearn.preprocessing import imputer

import numpy as np

defim()

:"""

缺失值處理

return none

"""im=imputer(missing_values=

'nan'

,strategy=

'mean,axis=0'

) data=im.fit_transfrom([[

1,2]

,[np.nan,3]

,[7,

6]])

print

(data)

return

none

if __name__==

"__main__"

: im(

)

注意:需要匯入numpy庫,numpy的陣列中可以使用np.nan/np.nan來代替缺失值,屬於float型別,

如果是檔案中的一些缺失值,可以替換成nan,通過np.array轉化成float型的資料即可。

機器學習 特徵工程 字典特徵提取

將原始資料轉換為更好地代表 模型的潛在問題的特徵的過程,從而提高了對未知資料的 準確性,直接影響 結果。對文字等特徵進行特徵值化,為了計算機更好地理解資料 sklearn.feature extraction 對字典資料進行特徵值化 字典資料抽取 就是把字典中一些類別資料,分別轉換成特徵,數值型別不...

機器學習 特徵工程之特徵提取

第二部分 特徵提取 備註 1.資料決定了機器學習的上限,而演算法只是盡可能逼近這個上限 這句話很好的闡述了資料在機器學習中的重要性。大部分直接拿過來的資料都是特徵不明顯的 沒有經過處理的或者說是存在很多無用的資料,那麼需要進行一些特徵處理,特徵的縮放等等,滿足訓練資料的要求。2.特徵工程的過程 從資...

字典特徵提取和文字特徵抽取

什麼叫字典特徵提取?字典內容轉化成計算機可以處理的數值 比如現在有個字典 data 分別是老三,老四,老五的個人基本資訊 我們想提取出來這幾個人的特徵值,也就是給我用乙個向量,表示某個獨一無二的人的特徵 我們先給出 coding utf 8 特徵提取 首先匯入轉換器類 from sklearn.fe...