了解特征工程——小型分類變量的常見處理

什么是分類變量膝捞?

  • 通常來說,分類變量是用來表示類別或標(biāo)記的愧沟。小型分類變量例如:一年中的四季蔬咬,行業(yè)(銀行、保險沐寺、券商林艘、科技......),一線城市“北上廣深”等等混坞;大型分類變量例如:IP地址狐援,用戶ID,語料庫的詞匯表等等
  • 不管類別的大小究孕,分類變量有2個顯而易見的特點(diǎn):數(shù)量有限且無序啥酱。因此在很多涉及到數(shù)值度量的模型中,如:LR厨诸,SVM等镶殷,我們不能像處理數(shù)值型變量那樣來處理分類變量。
  • 所以今天我們來講講小型分類變量的常見處理方式:one-hot編碼微酬,虛擬編碼和效果編碼绘趋,以及通過虛構(gòu)的“城市&租金”數(shù)據(jù)來看看,三者之間的聯(lián)系與差異颗管。


    12.png

one-hot編碼(one-hot encoding)

  • 在虛構(gòu)的“城市&租金”數(shù)據(jù)中陷遮,“CITY”特征有BJ, SH, SZ三種值,我們可以簡單地為其標(biāo)注為0忙上,1拷呆,2,但是這樣做的結(jié)果是使類別彼此之間有了順序和大小關(guān)系疫粥。所以更好地方法是使用一組比特位茬斧,每個比特位表示一種可能的類別,因此k個類別的分類變量就可以編碼為長度為k的特征向量梗逮。one-hot encoding可以用scikit-learn中的sklearn.proprocessing.OneHotEncoder來實(shí)現(xiàn)项秉,在這里我們用pandas.get_dummies實(shí)現(xiàn)。
pd.get_dummies(df, columns=["CITY"])
3.png

虛擬編碼(dummy encoding)

  • 在one-hot編碼中慷彤,我們看到分類變量有k個類別娄蔼,就用了長度為k的特征向量來表示怖喻。而在虛擬編碼中,我們只使用長度為(k-1)的特征向量來表示岁诉,被去掉的特征被一個全零向量所替代锚沸,它被稱為參照類。
pd.get_dummies(df, columns=["CITY"], drop_first=True)
4.png

效果編碼(effect coding)

  • 另一種編碼是效果編碼涕癣,與虛擬編碼非常相似哗蜈,區(qū)別在于效果編碼的參照類由全零向量變成了全部由-1組成的向量來表示。
#先進(jìn)行虛擬編碼
dummyDF = pd.get_dummies(df, columns=["CITY"], drop_first=True)
#對編碼過后的DF進(jìn)行效果編碼形式的轉(zhuǎn)換
dummy2effect(dummyDF, columns)
#虛擬編碼轉(zhuǎn)為效果編碼的函數(shù)
def dummy2effect(dummyDF, columns):
    """將經(jīng)過虛擬編碼的DF轉(zhuǎn)變?yōu)樾Ч幋a的形式"""
    dummyColumns = dummyDF.columns.tolist()
    effectCols = [[newCol for newCol in dummyColumns if newCol.split("_")[0]==col] for col in columns ]
    effectDF = dummyDF.copy()
    for pairCols in effectCols:
        featureidx = [dummyColumns.index(c) for c in pairCols]
        sampleidx = np.nonzero(dummyDF[effectCols[0]].sum(axis=1).values == 0)[0]
        effectDF.iloc[sampleidx, featureidx] = -1.
    return effectDF
5.png

三種編碼的解釋性

  • 對編碼后的數(shù)據(jù)分別進(jìn)行線性回歸坠韩,再依次進(jìn)行解釋距潘。
if __name__ == "__main__":
    df = pd.DataFrame({'CITY':['BJ','BJ','BJ','SH','SH','SH','SZ','SZ','SZ'], 
                   'RENT':[3999,4000,4001,3499,3500,3501,2999,3000,3001]})
    #分別進(jìn)行編碼
    onehot_df = coding(df, ["CITY"], "one-hot")
    dummy_df = coding(df, ["CITY"], "dummy")
    effect_df = coding(df, ["CITY"], "effect")
    #分別進(jìn)行線性回歸
    from sklearn import linear_model
    clf_onehot = linear_model.LinearRegression()
    clf_onehot.fit(onehot_df.drop("RENT", axis=1), onehot_df["RENT"])
    clf_dummy = linear_model.LinearRegression()
    clf_dummy.fit(dummy_df.drop("RENT", axis=1), dummy_df["RENT"])
    clf_effect = linear_model.LinearRegression()
    clf_effect.fit(effect_df.drop("RENT", axis=1), effect_df["RENT"])
6.png
  • 我們可以發(fā)現(xiàn),在one-hot編碼中只搁,截距代表了整體Y值(租金)的均值音比,每個線性系數(shù)代表了相應(yīng)城市的租金均值與整體租金均值有多大差別。
  • 在虛擬編碼中氢惋,截距代表了參照類Y值(租金)的均值洞翩,本例中的參照類是BJ,第i個特征的系數(shù)等于第i個類別的租金均值與參照類均值的差異焰望。
  • 在效果編碼中菱农,截距代表了整體Y值(租金)的均值,各個系數(shù)表示了各個類別的均值與整體均值之間的差柿估,此處BJ的均值當(dāng)且僅當(dāng)"CITY_SH=CITY_SZ=-1"時所取到的值。

以上就是one-hot, 虛擬編碼, 效果編碼的簡單介紹陷猫,謝謝閱讀秫舌。
全部代碼可前往以下地址下載:
https://github.com/shoucangjia1qu/ML_gzh/tree/master/FeatureEngineer

*本文知識點(diǎn)參考了Alice Zheng 的《Mastering Feature Engineering Principles and Techniques for Data Scientists》一書。

學(xué)無止境绣檬,歡迎關(guān)注筆者公眾號足陨,互相學(xué)習(xí)!


ewm.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娇未,一起剝皮案震驚了整個濱河市墨缘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌零抬,老刑警劉巖镊讼,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異平夜,居然都是意外死亡蝶棋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門忽妒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玩裙,“玉大人兼贸,你說我怎么就攤上這事〕越Γ” “怎么了溶诞?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長决侈。 經(jīng)常有香客問我螺垢,道長,這世上最難降的妖魔是什么颜及? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任甩苛,我火速辦了婚禮,結(jié)果婚禮上俏站,老公的妹妹穿的比我還像新娘讯蒲。我一直安慰自己,他們只是感情好肄扎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布墨林。 她就那樣靜靜地躺著,像睡著了一般犯祠。 火紅的嫁衣襯著肌膚如雪旭等。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天衡载,我揣著相機(jī)與錄音搔耕,去河邊找鬼。 笑死痰娱,一個胖子當(dāng)著我的面吹牛弃榨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梨睁,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鲸睛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坡贺?” 一聲冷哼從身側(cè)響起官辈,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遍坟,沒想到半個月后拳亿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡政鼠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年风瘦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片公般。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡万搔,死狀恐怖胡桨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞬雹,我是刑警寧澤昧谊,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站酗捌,受9級特大地震影響呢诬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胖缤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一尚镰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哪廓,春花似錦狗唉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哆料,卻和暖如春缸剪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背东亦。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工杏节, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人典阵。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓拢锹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親萄喳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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

  • 【精通特征工程】學(xué)習(xí)筆記Day4&2.22&D5章&P65-81頁 5蹋半、分類變量:自動化時代的數(shù)據(jù)計數(shù) 分類變量是...
    小小孩兒的碎碎念閱讀 695評論 0 0
  • 機(jī)器學(xué)習(xí)術(shù)語表 本術(shù)語表中列出了一般的機(jī)器學(xué)習(xí)術(shù)語和 TensorFlow 專用術(shù)語的定義他巨。 A A/B 測試 (...
    yalesaleng閱讀 1,958評論 0 11
  • 維穩(wěn)問題其實(shí)最終還是吃飯問題。房價上漲可以不買减江,如果房租價格不能控制染突,農(nóng)產(chǎn)品價格不能控制。一旦大批群眾吃飯出現(xiàn)了問...
    009燈叔徐錫宏閱讀 160評論 0 0
  • 越來越大辈灼,越來越累份企,我覺得雙手顫抖已經(jīng)拿不起筆。各種壓力巡莹,各種不滿司志,我也漸漸習(xí)慣甜紫,不去抱怨,不去怨天尤人骂远,自己一步...
    溫水丶閱讀 333評論 2 1
  • 我走了囚霸,未曾與你道別 故意走得很匆忙 想引起你的不滿和怨恨 我走了,在那個風(fēng)和日麗的日子 身后隱約傳來你的呼喚 可...
    一個人的宅閱讀 991評論 11 30