對某欄位作LabelEncoding後其他欄位的相關度都提高了,是為什麼?
2019/09/30 上午 00:18
機器學習共學討論版
Ma Chao Ting
觀看數:59
回答數:2
收藏數:1
ml100-3
ml100-3-d30
在D30的實作作業中
我先對想作群聚編碼的column作了Label Encoding
但在這當中我觀察到所有欄位的目標特徵的相關度都變高了
代碼如下:
print(df2.corr())
# 取一個類別型欄位, 與一個數值型欄位, 做群聚編碼
gby = 'Sex'
gbyV = 'Age'
# 對照組 : 標籤編碼 + 邏輯斯迴歸
df2[gby] = df2[gby].fillna('None')
df2[gby + '_Lab'] = LabelEncoder().fit_transform(df2[gby])
df2[df2[gbyV].isnull()] = df2[gbyV].mean()
print(df2.corr())
回傳:
想請教這是為何??
回答列表
-
2019/09/30 上午 00:49張維元 (WeiYuan)贊同數:0不贊同數:0留言數:1
你這行做了什麼?
```
df2[df2[gbyV].isnull()] = df2[gbyV].mean()
```
-
2019/10/01 下午 01:15陳明佑 (Ming You Chen)贊同數:0不贊同數:0留言數:1
再這個資料當中, 確實會有這個情況
仔細推敲後, 應該是資料存放的順序, 是依照是否生存的順序排列
如此雖然拿掉 target 的值, 你用 Label Encoding 效果就會變超好
這個可以算得上是一種 Leakage
如果是競賽, 碰上這種問題就先拿高分再說
但如果資料集是自己收集的, 或者你不希望這種有 leakage的結果
那就建議先用下列兩行, 把資料打亂再行預測即可
from
sklearn.utils
import
shuffle
df = shuffle(df)