命令檢視是否可用
注意:安裝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...