iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
AI & Data

Machine Learning系列 第 3

Day 3 Feature Engineering - 2. Categorical Encoding(2)

  • 分享至 

  • xImage
  •  

2. Categorical Encoding

以這個例子說明

import pandas as pd
import numpy as np
data = {'Temperature': ['Hot','Cold','Very Hot','Warm','Hot','Warm','Warm','Hot','Hot','Cold'],
        'Color': ['Red','Yellow','Blue','Blue','Red','Yellow','Red','Yellow','Yellow','Yellow'],
        'Target':[1,1,1,0,1,0,1,0,1,1]}

df = pd.DataFrame(data, columns = ['Temperature', 'Color', 'Target'])
df

/| Temperature| Color| Target
------------- | -------------
0| Hot| Red| 1
1| Cold| Yellow| 1
2| Very Hot| Blue| 1
3| Warm| Blue| 0
4| Hot| Red| 1
5| Warm| Yellow| 0
6| Warm| Red| 1
7| Hot| Yellow| 0
8| Hot| Yellow| 1
9| Cold| Yellow| 1

2.4 Ordinal encoding

ordinal encoding是以任意或能顯示資料訊息的方式來給予變數中的類別整數值。假如使用任意方式,我們則不考慮類別之間的關係,給每個類別一個1到N數字,N個是類別的總數。如果使用能顯示資料訊息的方式,則我們根據類別之間的關係,例如大小順序,給予變數中的類別整數值。
例如,我們認為溫度有順序性,我們由冷到熱給予類別整數值:Cold(1) < Warm(2) < Hot(3) < Very Hot(4)

使用Pandas,我們首先將這些值寫入Python dictionary裡:

emp_dict = {'Cold' : 1,
             'Warm' : 2,
             'Hot' : 3,
             "Very Hot" : 4}
        
df['Temp_Ordinal'] = df.Temperature.map(temp_dict)
df

/| Temperature| Color| Target| Temp_Ordinal
------------- | ------------- | -------------
0| Hot| Red| 1| 3
1| Cold| Yellow| 1| 1
2| Very Hot| Blue| 1| 4
3| Warm| Blue| 0| 2
4| Hot| Red| 1| 3
5| Warm| Yellow| 0| 2
6| Warm| Red| 1| 2
7| Hot| Yellow| 0| 3
8| Hot| Yellow| 1| 3
9| Cold| Yellow| 1| 1

2.5 Weight of Evidence

Weight of evidence (WOE)通常用在分類(classification)機器學習上。 WOE能告訴我們一個獨立變項(自變項independent variable)和依變項(dependent variables)的預測能力。WOE是源自信用卡給分世界,用來區別好的顧客和不良顧客。
https://ithelp.ithome.com.tw/upload/images/20200903/20129584zLTTanGcKW.png

我們也可以把不良顧客和好的顧客看做 events(0)和 non-event(1),WOE就是 non-event(1)的機率除以events(0)的機率,再取其自然對數。
https://ithelp.ithome.com.tw/upload/images/20200903/20129584MCizt1Vf69.jpg
WOE的特點:假如特殊現象是隨機的,WOE的值將會是 0。WOE的值將會大於0,假如出現events(0)的機率較大時;WOE的值將會小於0,當non-event(1)的機率值較大
WOEㄓㄨ轉換對變數建立了一個非常好的視覺再現,因為觀察經過WOE轉換的變數時,我們可知道其下類別偏向events(0) 或 non-event(1)的結果。
Python程式範例

2.6 Rare label encoding

如果某些類別的出現的頻率非常小,我們傾向將這些類別歸納為 “Other” 或 “Rare”。這樣可以增進機器學習模型的一般化(generalisation),特別是使用數型基礎方法(tree based methods)。

2.7 Helmert encoding

Helmert Coding比較每一類別變數和其隨後所有類別的平均值。

!pip install --upgrade category_encoders

import category_encoders as ce

encoder = ce.HelmertEncoder(cols=['Temperature'], drop_invariant=True)
dfh = encoder.fit_transform(df['Temperature'])
f = pd.concat([df, dfh], axis=1)
df

/| Temperature| Color| Target| Temperature_0| Temperature_1| Temperature_2
------------- | ------------- | -------------| -------------| -------------
0| Hot| Red| 1| -1.0| -1.0| -1.0
1| Cold| Yellow| 1| 1.0| -1.0| -1.0
2| Very Hot| Blue| 1| 0.0| 2.0| -1.0
3| Warm| Blue| 0| 0.0| 0.0| 3.0
4| Hot| Red| 1| -1.0| -1.0| -1.0
5| Warm| Yellow| 0| 0.0| 0.0| 3.0
6| Warm| Red| 1| 0.0| 0.0| 3.0
7| Hot| Yellow| 0| -1.0| -1.0| -1.0
8| Hot| Yellow| 1| -1.0| -1.0| -1.0
9| Cold| Yellow| 1| 1.0| -1.0| -1.0


上一篇
Day-2 Feature Engineering - 2. Categorical Encoding(1)
下一篇
Day-4 Feature Engineering -- 2. Categorical Encoding(3)
系列文
Machine Learning32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
canon760d
iT邦新手 5 級 ‧ 2020-11-21 11:23:38

WOE在其他資料當中 events(0)和 non-event(1)這個有甚麼其他的舉例嗎
除了好客戶和壞客戶

我要留言

立即登入留言