數據挖掘中的特徵工程-持續更新。。。。。

高集勢類別特徵的處理方法(經驗貝葉斯方法)

論文參考:

A Preprocessing Scheme for High-Cardinality Categorical Attributes in Classification and Prediction Problems

參考一個kaggle比賽:

很多預測或者回歸問題都需要數值類型特徵作為輸入,但是在現實中很多特徵都是類別特徵的,所以就出現了文中提高的使用統計方法對類別特徵進行處理的方法。

什麼是高集勢類別特徵(High-cardinality categorical data)

包含有很多取值的非數值特徵,如性別只能取到 男、女,這是一個類別特徵但是不是高集勢的。

高集勢類別特徵處理方法:

1、如果類別特徵的取值較少(如 10)經常的一個處理方法就是,那麼使用one-hot的方 法就可以解決類別特徵編碼問題。

2、如果取值很多的話,那麼使用上面的one-hot方法會帶來維度爆炸的問題,所以會使用到聚類的方法,如取值有N個,將這些聚類到K個類裡面,K<< N,是有每個類值去代替類中的每一個值,然後在使用one-hot處理,很明顯,聚類的方法會丟失原始數據中的信息

目標編碼(高集勢類別特徵的處理方法(經驗貝葉斯方法)):

編碼策略:將獨立的高集勢特徵值映射到獨立的高集勢特徵值的概率的估計值(翻譯好難看,原話是這樣的:map individual values of a high-cardinality categorical independent attribute to an estimate of the probability or the expected value of the dependent attribute)

這種編碼的方法適用的場景有:二分類、多分類、回歸問題

二分類中的編碼方法:目標值取值{0,1},高集勢特徵為 x,取值有 x_{i} ,將 x_{i} 編碼後:

計算公式為: n_{iY} 為在Y = 1 X = x_{i} 情況下的count值, n_{i} 就是說X = x_{i}的count

這個公式存在很大的問題,只有少數的 n_{iY} ,那麼對它的估計s將會不可信,為此對其進行一下修改,上式s也是後驗概率。於是在式(2)中加入先驗概率,得到下式,

如果後驗概率不可信,那麼在加入先驗概率, n_{Y} 是所有訓練集中取到 Y = 1 的count, n_{TR} 是所有訓練集的count,也就是 shape[0],lambda(ni)是一個[0,1]範圍的函數s函數,

當使用的數據個數n很大的時候,lambda -> 1,此時就是給後驗(式(3)前半部分公式)交大權重,如果n比較少,那麼後驗估計就不可信,公式3,就會給先驗較大的權重,參數f控制s函數拐點的斜率,f控制的是。

缺失值的處理:

1、缺失值為數值的,那麼會以平均值填補

2、若果是低集勢的類別特徵,將這些特徵one-hot編碼處理,然後缺失值就是全0的

3、有些模型會直接忽視缺失值,直接將缺失值作為另外一個值

而可以直接使用上面的方法去計算缺失值的映射

這個方法的好處是,如果缺失值與目標值有很大相關性,那麼這個公式就能很好的表達出相關信息。如果缺失值與目標值沒有太大關係,那麼S0S0也會很快收斂於先驗概率,這也是對缺失值的中立表示。

處理回歸問題中的高集勢類別特徵:很好理解哈,直接計算平均值來著,


推薦閱讀:

數據挖掘簡介第一講(已完結)
用時間序列的方法處理數據
R 包 `ezdf`的講解
《Python數據挖掘》筆記(二)關聯規則挖掘
從懵逼到菜逼------菜逼來談數據挖掘

TAG:數據挖掘 | 特徵工程 |