機(jī)器學(xué)習(xí)之特征工程-數(shù)據(jù)預(yù)處理

通過特征提取拘央,我們能得到未經(jīng)處理的特征斋日,這時的特征可能有以下問題:

  • 不屬于同一量綱:即特征的規(guī)格不一樣渴杆,不能夠放在一起比較林艘。無量綱化可以解決這一問題盖奈。
  • 信息冗余:對于某些定量特征,其包含的有效信息為區(qū)間劃分狐援,例如學(xué)習(xí)成績钢坦,假若只關(guān)心“及格”或不“及格”,那么需要將定量的考分啥酱,轉(zhuǎn)換成“1”和“0”表示及格和未及格爹凹。二值化可以解決這一問題。
  • 定性特征不能直接使用:某些機(jī)器學(xué)習(xí)算法和模型只能接受定量特征的輸入镶殷,那么需要將定性特征轉(zhuǎn)換為定量特征禾酱。最簡單的方式是為每一種定性值指定一個定量值,但是這種方式過于靈活,增加了調(diào)參的工作颤陶。通常使用啞編碼的方式將定性特征轉(zhuǎn)換為定量特征**:假設(shè)有N種定性值颗管,則將這一個特征擴(kuò)展為N種特征,當(dāng)原始特征值為第i種定性值時指郁,第i個擴(kuò)展特征賦值為1忙上,其他擴(kuò)展特征賦值為0。啞編碼的方式相比直接指定的方式闲坎,不用增加調(diào)參的工作疫粥,對于線性模型來說,使用啞編碼后的特征可達(dá)到非線性的效果腰懂。
  • 存在缺失值:因?yàn)楦鞣N各樣的原因梗逮,真實(shí)世界中的許多數(shù)據(jù)集都包含缺失數(shù)據(jù),這類數(shù)據(jù)經(jīng)常被編碼成空格绣溜、NaNs慷彤,或其他占位符。
  • 信息利用率低:不同的機(jī)器學(xué)習(xí)算法和模型對數(shù)據(jù)中信息的利用是不同的怖喻,之前提到在線性模型中底哗,使用對定性特征啞編碼可以達(dá)到非線性的效果。類似地锚沸,對定量變量多項(xiàng)式化跋选,或者進(jìn)行其他的轉(zhuǎn)換,都能達(dá)到非線性的效果哗蜈。

無量綱化

標(biāo)準(zhǔn)化

數(shù)據(jù)的標(biāo)準(zhǔn)化是將數(shù)據(jù)按比例縮放前标,使之落入一個小的特定區(qū)間。在某些比較和評價的指標(biāo)處理中經(jīng)常會用到距潘,去除數(shù)據(jù)的單位限制炼列,將其轉(zhuǎn)化為無量綱的純數(shù)值,便于不同單位或量級的指標(biāo)能夠進(jìn)行比較和加權(quán)音比。
公式為:(X-mean)/std 計(jì)算時對每個屬性/每列分別進(jìn)行俭尖。
將數(shù)據(jù)按屬性(按列進(jìn)行)減去其均值,并除以其方差洞翩。得到結(jié)果是稽犁,對于每個屬性(每列)來說所有數(shù)據(jù)都聚集在0附近,方差為1菱农。

from sklearn.datasets import load_iris
import numpy as np

X = np.array([[ 1., -1.,  2.],
              [ 2.,  0.,  0.],
              [ 0.,  1., -1.]])
from sklearn import preprocessing
X_scaled = preprocessing.scale(X)
print(X_scaled)
print(X_scaled.mean(axis=0))
print(X_scaled.std(axis=0))

out

[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]
[ 0.  0.  0.]
[ 1.  1.  1.]

sklearn 還提供了StandardScaler類缭付,使用該類的好處在于可以保存訓(xùn)練集中的參數(shù)(均值柿估、方差)直接使用其對象轉(zhuǎn)換測試集數(shù)據(jù)循未。

scaler = preprocessing.StandardScaler().fit(X)
print(scaler)

print(scaler.mean_)                                     

print(scaler.scale_)                                     

print(scaler.transform(X))
scaler.transform([[-1.,  1., 0.]])

out

StandardScaler(copy=True, with_mean=True, with_std=True)
[ 1.          0.          0.33333333]
[ 0.81649658  0.81649658  1.24721913]
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]
Out[9]:
array([[-2.44948974,  1.22474487, -0.26726124]]) 

區(qū)間縮放

另一種常用的方法是將屬性縮放到一個指定的最大和最小值(通常是1-0)之間,這可以通過preprocessing.MinMaxScaler類實(shí)現(xiàn)。

使用這種方法的目的包括:
1的妖、對于方差非常小的屬性可以增強(qiáng)其穩(wěn)定性绣檬。
2、維持稀疏矩陣中為0的條目嫂粟。

image.png
X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
print(X_train_minmax) 

out

[[ 0.5         0.          1.        ]
 [ 1.          0.5         0.33333333]
 [ 0.          1.          0.        ]]

歸一化

歸一化是依照特征矩陣的行處理數(shù)據(jù)娇未,其目的在于樣本向量在點(diǎn)乘運(yùn)算或其他核函數(shù)計(jì)算相似性時,擁有統(tǒng)一的標(biāo)準(zhǔn)星虹,也就是說都轉(zhuǎn)化為“單位向量”零抬。規(guī)則為l2的歸一化公式如下:


image.png

該方法主要應(yīng)用于文本分類和聚類中。例如宽涌,對于兩個TF-IDF向量的l2-norm進(jìn)行點(diǎn)積平夜,就可以得到這兩個向量的余弦相似性。

X_normalized = preprocessing.normalize(X_train, norm='l2')
print(X_normalized)
normalizer = preprocessing.Normalizer().fit(X_train)
normalizer.transform(X_train)

out

[[ 0.40824829 -0.40824829  0.81649658]
 [ 1.          0.          0.        ]
 [ 0.          0.70710678 -0.70710678]]
Out[16]:
array([[ 0.40824829, -0.40824829,  0.81649658],
       [ 1.        ,  0.        ,  0.        ],
       [ 0.        ,  0.70710678, -0.70710678]])

后面接著介紹數(shù)據(jù)預(yù)處理

參考

關(guān)于使用sklearn進(jìn)行數(shù)據(jù)預(yù)處理 —— 歸一化/標(biāo)準(zhǔn)化/正則化
統(tǒng)計(jì)數(shù)據(jù)歸一化與標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化和歸一化什么區(qū)別卸亮?
特征工程到底是什么忽妒?
sklearn preprocess

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兼贸,隨后出現(xiàn)的幾起案子段直,更是在濱河造成了極大的恐慌,老刑警劉巖溶诞,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸯檬,死亡現(xiàn)場離奇詭異,居然都是意外死亡很澄,警方通過查閱死者的電腦和手機(jī)京闰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甩苛,“玉大人蹂楣,你說我怎么就攤上這事⊙镀眩” “怎么了痊土?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長墨林。 經(jīng)常有香客問我赁酝,道長,這世上最難降的妖魔是什么旭等? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任酌呆,我火速辦了婚禮,結(jié)果婚禮上搔耕,老公的妹妹穿的比我還像新娘隙袁。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布菩收。 她就那樣靜靜地躺著梨睁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娜饵。 梳的紋絲不亂的頭發(fā)上坡贺,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音箱舞,去河邊找鬼遍坟。 笑死,一個胖子當(dāng)著我的面吹牛晴股,可吹牛的內(nèi)容都是我干的政鼠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼队魏,長吁一口氣:“原來是場噩夢啊……” “哼公般!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胡桨,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤官帘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昧谊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刽虹,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年呢诬,在試婚紗的時候發(fā)現(xiàn)自己被綠了涌哲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡尚镰,死狀恐怖阀圾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狗唉,我是刑警寧澤初烘,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站分俯,受9級特大地震影響肾筐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缸剪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一吗铐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杏节,春花似錦唬渗、人聲如沸讥此。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卒稳,卻和暖如春蹋半,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背充坑。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工减江, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捻爷。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓辈灼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親也榄。 傳聞我的和親對象是個殘疾皇子巡莹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容