【精通特征工程】學(xué)習(xí)筆記(四)

【精通特征工程】學(xué)習(xí)筆記Day4&2.22&D5章&P65-81頁(yè)

5傀蚌、分類變量:自動(dòng)化時(shí)代的數(shù)據(jù)計(jì)數(shù)

  • 分類變量是用來(lái)表示類別或標(biāo)記的勋桶,又稱為無(wú)序變量
  • 大型分類變量脱衙,分箱計(jì)數(shù)

5.1 分類變量的編碼

分類變量中的類別通常不是數(shù)值型的。例如哥遮,眼睛的顏色可以是“黑色”“藍(lán)色”和“褐 色”岂丘,等等。因此眠饮,需要一種編碼方法來(lái)將非數(shù)值型的類別轉(zhuǎn)換為數(shù)值奥帘。如果簡(jiǎn)單地為 k 個(gè)可能類別中的每個(gè)類別分配一個(gè)整數(shù),如從 1 到 k仪召,但這樣做的結(jié)果是 使類別彼此之間有了順序寨蹋,這在分類變量中是不允許的。

  • 三個(gè)不同城市的公寓價(jià)格數(shù)據(jù)集
5.1.1 one-hot 編碼

使用一組比特位扔茅,每個(gè)比特位表示一種可能的類別已旧。如果變量不能同時(shí)屬于 多個(gè)類別,那么這組值中就只有一個(gè)比特位是“開(kāi)”的召娜。這就是 one-hot 編碼运褪,它可以通 過(guò)scikit-learn中 的 sklearn.preprocessing.OneHotEncoder 實(shí) 現(xiàn)。 每 個(gè) 比 特 位 表 示 一 個(gè) 特 征玖瘸,因此秸讹,一個(gè)可能有 k 個(gè)類別的分類變量就可以編碼為一個(gè)長(zhǎng)度為 k 的特征向量。

  • 對(duì)3個(gè)城市的類別進(jìn)行獨(dú)熱編碼
5.1.2 虛擬編碼

one-hot 編碼的問(wèn)題是它允許有 k 個(gè)自由度雅倒,而變量本身只需要 k-1 個(gè)自由度璃诀。虛擬編碼在進(jìn)行表示時(shí)只使用 k-1 個(gè)特征,除去了額外的自由度蔑匣。沒(méi)有被使用的那個(gè)特征通過(guò)一個(gè)全零向量來(lái)表示劣欢,它稱為參照類。虛擬編碼和 one-hot 編碼都可以通過(guò) Pandas 包中的pandas.get_dummies 來(lái)實(shí)現(xiàn)裁良。

  • 對(duì)3個(gè)城市的類別進(jìn)行dummy編碼
  • eg:在獨(dú)熱編碼上的線性回歸

>>> import pandas
>>> from sklearn import linear_model

# 定義一個(gè)模擬數(shù)據(jù)集凿将,表示紐約、舊金山和西雅圖的公寓租金
>>> df = pd.DataFrame({'City': ['SF', 'SF', 'SF', 'NYC', 'NYC', 'NYC','Seattle', 'Seattle', 'Seattle'],
                       'Rent': [3999, 4000, 4001, 3499, 3500, 3501, 2499, 2500, 2501]})
>>> df['Rent'].mean()
3333.3333333333335

# 將數(shù)據(jù)框中的分類變量轉(zhuǎn)換為one-hot編碼并擬合一個(gè)線性回歸模型 
>>> one_hot_df = pd.get_dummies(df, prefix=['city'])
>>> one_hot_df
   Rent  city_NYC  city_SF  city_Seattle
0  3999         0        1             0
1  4000         0        1             0
2  4001         0        1             0
3  3499         1        0             0
4  3500         1        0             0
5  3501         1        0             0
6  2499         0        0             1
7  2500         0        0             1
8  2501         0        0             1

model = linear_model.LinearRegression()
model.fit(one_hot_df[['city_NYC', 'city_SF', 'city_Seattle']],
         one_hot_df[['Rent']])
>>> model.coef_
array([[ 166.66666667,  666.66666667, -833.33333333]])
>>> model.intercept_
array([ 3333.33333333])


  • eg:在虛擬變量上進(jìn)行線性回歸
dummy_df = pd.get_dummies(df, prefix=['city'], drop_first=True)

>>> dummy_df
   Rent  city_SF  city_Seattle
0  3999        1             0
1  4000        1             0
2  4001        1             0
3  3499        0             0
4  3500        0             0
5  3501        0             0
6  2499        0             1
7  2500        0             1
8  2501        0             1

>>> model.fit(dummy_df[['city_SF', 'city_Seattle']], dummy_df['Rent'])
>>> model.coef_
array([  500., -1000.])
>>> model.intercept_
3500.0

使用 one-hot 編碼時(shí)价脾,截距項(xiàng)表示目標(biāo)變量 Rent 的整體均值牧抵,每個(gè)線性系數(shù)表示相應(yīng)城市的租金均值與整體均值有多大差別。

使用虛擬編碼時(shí)彼棍,偏差系數(shù)表示響應(yīng)變量 y 對(duì)于參照類的均值灭忠,本例中參照類是紐約。第 i個(gè)特征的系數(shù)等于第 i 個(gè)類別的均值與參照類均值的差座硕。

  • 線性回歸系數(shù)差距
5.1.3 效果編碼

分類變量編碼的另一種變體稱為Effect編碼弛作。 Effect編碼與虛擬編碼非常相似,區(qū)別在于參考類別現(xiàn)在由所有-1的向量表示华匾。

  • Effect編碼表示3個(gè)城市

Effect編碼與虛擬編碼非常相似映琳,但是在線性回歸中更容易被擬合。截距項(xiàng)表示目標(biāo)變量的整體均值蜘拉,各個(gè)系數(shù)表示了各個(gè)類別的均值與整體均值之間的差萨西。one-hot 編碼實(shí)際上也可以得到同樣的截距和系數(shù),但它的每個(gè)城市都有一個(gè)線性系數(shù)旭旭。在 效果編碼中谎脯,沒(méi)有單獨(dú)的特征來(lái)表示參照類,所以參照類的效果需要單獨(dú)計(jì)算持寄,它是所有其他類別的系數(shù)的相反數(shù)之和源梭。

  • 使用效果編碼的線性回歸
>>> effect_df = dummy_df.copy()
>>> effect_df.ix[3:5, ['city_SF', 'city_Seattle']] = -1.0
>>> effect_df
   Rent  city_SF  city_Seattle
0  3999      1.0           0.0
1  4000      1.0           0.0
2  4001      1.0           0.0
3  3499     -1.0          -1.0
4  3500     -1.0          -1.0
5  3501     -1.0          -1.0
6  2499      0.0           1.0
7  2500      0.0           1.0
8  2501      0.0           1.0
>>> model.fit(effect_df[['city_SF', 'city_Seattle']], effect_df['Rent'])
>>> model.coef_
array([ 666.66666667, -833.33333333])
>>> model.intercept_
3333.3333333333335
5.1.4 各種分類變量編碼的優(yōu)缺點(diǎn)

one-hot 編碼、虛擬編碼和效果編碼彼此之間非常相似稍味,它們都有各自的優(yōu)缺點(diǎn)废麻。one-hot 編碼有冗余,這會(huì)使得同一個(gè)問(wèn)題有多個(gè)有效模型模庐,這種非唯一性有時(shí)候比較難以解釋烛愧。 它的優(yōu)點(diǎn)是每個(gè)特征都明確對(duì)應(yīng)一個(gè)類別,而且可以把缺失數(shù)據(jù)編碼為全零向量掂碱,模型輸 出也是目標(biāo)變量的總體均值怜姿。

虛擬編碼和效果編碼沒(méi)有冗余,它們可以生成唯一的可解釋的模型顶吮。虛擬編碼的缺點(diǎn)是不 太容易處理缺失數(shù)據(jù)社牲,因?yàn)槿阆蛄恳呀?jīng)映射為參照類了。它還會(huì)將每個(gè)類別的效果表示 為與參照類的相對(duì)值悴了,這看上去有點(diǎn)不直觀搏恤。

效果編碼使用另外一種編碼表示參照類,從而避免了這個(gè)問(wèn)題湃交,但是全由 -1 組成的向量 是個(gè)密集向量熟空,計(jì)算和存儲(chǔ)的成本都比較高。正是因?yàn)檫@個(gè)原因搞莺,像 Pandas 和 scikit-learn 這樣的常用機(jī)器學(xué)習(xí)軟件包更喜歡使用虛擬編碼或 one-hot 編碼息罗,而不是效果編碼。

當(dāng)類別的數(shù)量變得非常大時(shí)才沧,這 3 種編碼方式都會(huì)出現(xiàn)問(wèn)題迈喉,所以需要另外的策略來(lái)處理 超大型分類變量绍刮。

5.2 處理大型分類變量

5.2.1 特征散列化
  • demo : 使用 scikit-learnFeatureHasher 函數(shù)
 >>> from sklearn.feature_extraction import FeatureHasher
 >>> h = FeatureHasher(n_features=m, input_type='string')
 >>> f = h.transform(review_df['business_id'])
5.2.2 分箱計(jì)數(shù)

分箱計(jì)數(shù)它不使用分類變量的值作為特征,而是使用目標(biāo)變量取這 個(gè)值的條件概率挨摸。換句話說(shuō)孩革,我們不對(duì)分類變量的值進(jìn)行編碼,而是要計(jì)算分類變量值與 要預(yù)測(cè)的目標(biāo)變量之間的相關(guān)統(tǒng)計(jì)量得运。

小結(jié)

one-hot encoding

空間使用:O(n) 時(shí)間復(fù)雜度:O(nk)

優(yōu)點(diǎn):

  • 容易實(shí)現(xiàn)
  • 更高的精度
  • 在線學(xué)習(xí)特別容易擴(kuò)展

缺點(diǎn)

  • 計(jì)算不足
  • 如果類別增加則不能夠使用
  • 對(duì)線性模型以外的任何其他方法都不可行
  • 對(duì)于大數(shù)據(jù)集需要分布式訓(xùn)練

特征散列化 Feature hashing

空間使用:O(n) 時(shí)間復(fù)雜度:O(nm)

優(yōu)點(diǎn):

  • 容易實(shí)現(xiàn)
  • 容易訓(xùn)練
  • 容易擴(kuò)展到新類別
  • 容易處理稀有類別
  • 在線學(xué)習(xí)容易擴(kuò)展

缺點(diǎn)

  • 只能夠使用線性或核模型
  • 哈希編碼很難解釋
  • 精度有爭(zhēng)議

分箱計(jì)數(shù) Bin-counting

空間使用:O(n+k) 時(shí)間復(fù)雜度:O(n)

優(yōu)點(diǎn):

  • 訓(xùn)練快
  • 能夠使用樹(shù)模型
  • 容易擴(kuò)展到新列類別
  • 容易處理稀有類別
  • 可解釋

缺點(diǎn)

  • 需要利用歷史信息
  • 對(duì)于在線學(xué)習(xí)有困難
  • 會(huì)有數(shù)據(jù)泄露

參考:《精通特征工程》愛(ài)麗絲·鄭·阿曼達(dá)·卡薩麗

面向機(jī)器學(xué)習(xí)的特征工程學(xué)習(xí)筆記:
【精通特征工程】學(xué)習(xí)筆記(一)
【精通特征工程】學(xué)習(xí)筆記(二)
【精通特征工程】學(xué)習(xí)筆記(三)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膝蜈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子熔掺,更是在濱河造成了極大的恐慌饱搏,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件置逻,死亡現(xiàn)場(chǎng)離奇詭異推沸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)诽偷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門坤学,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人报慕,你說(shuō)我怎么就攤上這事深浮。” “怎么了眠冈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵飞苇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蜗顽,道長(zhǎng)布卡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任雇盖,我火速辦了婚禮忿等,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崔挖。我一直安慰自己贸街,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布狸相。 她就那樣靜靜地躺著薛匪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脓鹃。 梳的紋絲不亂的頭發(fā)上逸尖,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼娇跟。 笑死岩齿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苞俘。 我是一名探鬼主播纯衍,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苗胀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瓦堵,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤基协,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后菇用,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體澜驮,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年惋鸥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杂穷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卦绣,死狀恐怖耐量,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滤港,我是刑警寧澤廊蜒,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站溅漾,受9級(jí)特大地震影響山叮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜添履,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一屁倔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暮胧,春花似錦锐借、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至炼绘,卻和暖如春嗅战,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工驮捍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疟呐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓东且,卻偏偏與公主長(zhǎng)得像启具,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子珊泳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 機(jī)器學(xué)習(xí)術(shù)語(yǔ)表 本術(shù)語(yǔ)表中列出了一般的機(jī)器學(xué)習(xí)術(shù)語(yǔ)和 TensorFlow 專用術(shù)語(yǔ)的定義鲁冯。 A A/B 測(cè)試 (...
    yalesaleng閱讀 1,958評(píng)論 0 11
  • 由于學(xué)習(xí)需要,在此整理了網(wǎng)上特征工程方法色查,因?yàn)槠渲杏泻芏嗤卣沟膬?nèi)容薯演,所以文章較長(zhǎng)。 特征工程常用方法 1. 時(shí)間戳...
    ZAK_ML閱讀 6,622評(píng)論 2 4
  • 亦久閱讀 423評(píng)論 0 4
  • 這是一個(gè)知識(shí)付費(fèi)的時(shí)代,每個(gè)人都在為自己的無(wú)知焦慮著验毡。在線課程的火爆衡创,讓很多人成為了一茬又一茬的韭菜。 記得自己剛...
    在成長(zhǎng)的娟娟閱讀 245評(píng)論 0 9
  • 在一年中的最后一天晶通,在這辭舊迎新的日子里璃氢,家家戶戶張燈結(jié)彩,到處洋溢著歡樂(lè)喜悅的氛圍狮辽。而年夜飯是一年中最濃墨重彩的...
    novelmascot閱讀 280評(píng)論 0 0