大數據之數據預處理


 

1.數據處理的主要操作

2.離散化與連續化

3.特征提取與構造

4.數據選擇與構造

5.缺失值的處理

6.多重共線性和內生性

1. 數據處理的主要操作

映射與收集數據 :我們獲得數據后需要對數據的每一列都定義屬性,這樣才方便我們接下來的數據處理。

縮放大型數據:對於使用數據不一定要全部使用,我們應該根據情況選擇我們需要的數據,或者說根據我們的需求增加數據。

處理噪聲與錯誤:主要分為兩種問題,內部錯誤:由於模型設計問題產生的錯誤;外部錯誤:隨機錯誤與噪聲。

處理未知屬性:我們需要關注未知的源 1. 是否是被遺忘 2. 某些屬性是不恰當的 3. 屬性實不恰當的4. 數據庫的設計者不關心的變量。

數值離散化: 有些算法只能使用分類數據,那么我們需要將連續變量轉化為離散變量。

數值連續化:有些算法只能處理連續變量,因此我么你需要將分類變量轉化為連續變量,我們采用啞變量 的手法或者 WOE的手段來實現。

屬性選擇:有時數據維數過多,存在非常強的相關性,不利於模型擬合,因此我們使用屬性選擇法篩檢數據。

屬性構造和變換:如果屬性過少或者原本數據不太好用,我們可以對數據進行構造,形成新的數據來進行模型分析。           

數據選擇與構造:很多時候數據存在大量的干擾和不均衡的數據,我們需要對數據進行篩選。         

2. 離散化與連續化

1)離散化的主要方法

   2.1 分箱法

通常有等寬法與等頻法,一個是按照邊界划分,一個是按照元素數量划分。

   2.2 基於熵的離散化

   類似於決策樹的方法,計算熵值或者基尼系數,划分數據集。

   2.3  卡方分布法

   通過卡方假設檢驗,通過計算每一個區間的顯著性來判斷兩個區間是否可以合並。 判斷兩個相鄰區間的獨立性。具體步驟如下所示:

  2.3.1 將原始數據按照遞排列。

  2.3.2 確定初始區間,是的每個特征在一個獨立區間內。

  2.3.3 合並區間。使用卡方分布,判斷兩個相鄰區間的獨立性,如果$\chi_2 $ 的結果小於閾值,那么就合並。

2)連續化的主要方法

  2.1 虛擬變量的選用

   虛擬變量的使用主要是因為在邏輯回歸中,分類變量不具有特別的代表意義,因此使用虛擬變量,將分類變量轉化為可以使用邏輯斯特回歸的變量。

   大致方法就是將我們的分類變量中的每一類形成一個樣本,使用這個樣本進行訓練回歸,得到的回歸參數是 這個分類變量中兩個類別的對於y的差異!

  2.2 WOE方法的使用

     這個方法更加直接 直接上公式:

$WOE_i= In \frac{B_i/B_t}{G_i/G_t}$

   其中 B表示bad,G表示good,$B_i$表示第i個bad類,$B_t$表示B的總數,同理,$G_i$表示第i個good的數量,$G_t$表示good的總數。

   具體詳見 <<精通數據科學>> ,這個作者也寫了 博客   https://zhuanlan.zhihu.com/p/39361047 。大家可以多參考參考。

3. 特征提取和構造

    我們使用特征提取和構造的原因

 1. 可以進行一次,計算開銷比模型訓練小。

 2. 是離線進行的,因此可以嘗試很多算法

特征提取的主要方法:

  3.1. PCA主成分分析法

PCA的方法大家肯定不會陌生,使用PCA,找出屬性中的特征值,並選出特征值的最大的前幾個,為什么我們可以這么做呢。如果大家學習過矩陣分析便很容易知道,PCA是求出矩陣的譜,本質上是將一個矩陣做一次線性變化,換句話將,就是對當前的標准正交基變成另外一組標准正交基,這個變化是可以讓組內方差最大,也就是說,PCA是將原來的屬性做出一組線性變化,成為新的一個屬性。

  3.2. 奇異值分解法

奇異值分解和PCA非常相似,其實就是一個矩陣變換,將一個矩陣變成3個矩陣的乘積 $A=U \Sigma D $,和PCA非常相似,但是值得注意的是,PCA主要是為了保持數據之間的差異,SVD主要是盡可能還原矩陣,但是,他們的本質都是矩陣的譜。PCA主要用於數據可視化,和降低數據中的隨機因素的干擾,而奇異值主要用於生成更高效的向量來表示數據。

  3.3. Fisher Score 分析法

又稱LDA判別法,在使用PCA方法進行降維的基礎上考慮到訓練樣本的類間信息。FLD的基本原理就是找到一個最合適的投影軸,使各類樣本在該軸上投影之間的距離盡可能遠,而每一類內的樣本的投影盡可能緊湊,從而使分類效果達到最佳,即在最大化類間距離的同時最小化類內距離。所以主要思想就是將系統分為類內散度和類間散度兩類判別,就是希望尋找的投影方向使投影以后兩類盡可能分開,而各類內部又盡可能聚集。公式如下

$F(x^i)=\frac{\sum_{j=0}^{numC}n_j(\mu_{j}^i-\mu^i)^2}{\sum_{j=0}^{numC}n_j(\sigma_{j}^i )^2}$

其中,$x_i$表示第i個屬性,$n_j$表示標簽列中,每一個屬性都有不同的類,取值為第j個類的對應的行數,$(\sigma_j^{i})^2 $表示第i個屬性中第j個類的集合在第i個屬性上的方差。$\mu_j^{i}$表示第i列第j個屬性的集合的均值,$\mu^i$表示第j個列的均值。

 通過計算,可以得到得分前幾個得分最高的屬性。

  3.4. 基尼系數選擇法

基尼系數選擇法 和熵值判別法大多類似,求出每一列的基尼系數,然后選取其中基尼系數較小,或者熵值較大的屬性。

  3.5.T檢驗法與卡方分布判別法

t檢驗法和卡方檢驗法非常相似,主要是通過t分布或者卡方分布,進行假設檢驗,比較兩個屬性之間是否顯著。下面為t分布檢驗法(Welch's T-test):

$t=\frac{\bar{x_1}-\bar{x_2} }{\sqrt{\frac{S_{1}^2}{N_1}+\frac{S_{2}^2}{N_2}}}$

其中$\bar{x_1},S_1^2,N_1$是第一個樣本的均值,樣本方差,和樣本大小。同理其余三個變量。

  3.6.線性前向選擇法

    ToDo

  3.7.基於系數多項式回歸的屬性選擇法

    ToDo

    這兩個算法比較難,我還沒有完全搞懂,也不敢隨意亂寫,這里先放着,等我搞懂了再來補充。

4. 數據選擇與構造

   從數據角度,通常會遇到兩種問題,第一種是數據不平衡問題,第二種就是數據缺失問題。以下內容主要圍繞數據不平衡問題。

   我們必須重視這個問題,因為不均衡的數據會帶來我們模型的錯誤,會讓我們模型誤判真實的結果,並且稍不注意我們就會陷入准確率陷阱,表現出准確率高但是模型效果不好的假象,使用ROC曲線則可以顯示出數據不均衡的問題,但是要解決的話,通常有以下方法:

  4.1.修改類別權重

  這個方法是最常用也是最簡單的方法,,將不重要的數據的權重降低,將重要的數據的權重升高,權重的改變主要是在損失函數中加入。

  4.2.RUS(Random Under-sampling隨機下采樣)

  這個方法也是常用方法之一,我們只要將多余的數據部分隨機刪除,就可以達到我們需要的要求。

  4.3.CNN(Condense的Nearest Neighbor Decision Rule)

  CNN是對NN規則的改進。其實使用的也是最鄰近的思想,具體算法如下:

    1) 兩個數據容器,grabbag 和store

    2)先選第一個數據放入grabbag中,取第二個數據,如果符合NN規則,那么放入grabbag,否則放入store。

    3)遍歷一遍后如果這一輪沒有一個放入grabbag,那么循環結束

    4)重復步驟2,3直到grabbag中沒有數據。

  4.4.SMOTE(Synthetic Minority Over-sampling Technique)

  一般來說,我們使用抽樣,並不能很好的滿足我么你的需求,更多的時候我們要生成一些數據,一般我們可以用我們重要的數據和距離他近的不重要的數據,生成原本不存在的樣本$c=(a+b)*\gamma$ 其中$\gamma$ 為一個隨機數,將a,b各個維度相加然后乘以一個隨機數,便是我們需要的數據。

5.OSS(One side selection)

  這個算法就比較高大上了,主要思路如下所示:

   1) S為初始訓練集

   2) 最初的時候,C包含了S中所有的少數類,並且隨機挑選了一個多數類實例

   3)使用C中的實例,使用1-NN規則最鄰近方法對S進行預測,將預測標簽與原始標簽對比,將未能正確預測的標簽放入C

   4) 最終將所有處於C中的所有符合Tomek links 的多數類全部移走,而少數類留下,最終就是我們需要的標簽。

  Tomek links: 取兩個x,y,這兩個具有不同標簽,x,y的距離為$delta(x,y),如果不存在實例$z$,是的$delta(x,z)<delta(x,y)$或者$delta(y,z)<delta(x,y)$我們就把           $(x,y)$稱為Tomek links。

5. 缺失值的處理

  缺失值其實是一個很難處理的問題,因為缺失的因素實在是太多了,因此,我們只有判斷好數據缺失的原因,才能更好的處理缺失值。

5.1 缺失值的機制

實際上數據缺失通常有三種性質:

1)數據完全隨機缺失:這就意味着數據缺失與其他值完全無關

2)數據隨機缺失:缺失僅僅依賴於其他變量

3)非隨機缺失:$P(y缺失|Y,X)=P(Y缺失|X)

5.2 數據缺失如何處理

我們必須解決一下三個問題:

1) 如何比較兩個具有不同數目的缺失值樣本

2)在划分數據集是未知數據該如何處理

3) 在分類階段,樣本具有缺失值該如何處理

那么我們首先可以拋棄數據,但這樣做在有大量數據缺失的情況下是不能容忍的,

第二種情況便是使用可以處理缺失數據的模型:決策樹,在決策樹,中處理缺失數據主要有兩個方面。決策樹建立環節和決策樹預測環節

    1)決策樹建立環節:這個地方主要參照了<<數據挖掘基礎教程>>這本書,大多數書都沒有提到過這個問題。在決策樹建立環節,我們通常使用基尼系數或者熵值來確定分叉,推廣來講就是我們的增益,XGBOOST也不例外,熵值的計算是通過計算每一類的熵。這是如果我么你具有一個缺失的數據,我們恰好使用其缺失的參數,我我么你可以先對未缺失的數據進行分類,然后將這個缺少數據的依次放入每個類中,當然,此時我們需要給我們的分類加上權重。通常來說,如果數據不具有缺失,那么系數為1,否則系數為這一類占總樹的百分數。

$\omega_new=\omega_old*P(T_i)$

$P(T_i)=\frac{c_i}{\sum_{i=1}^{numC}c_i}$

   其中$c_i$為當前列的第i個屬性的列數,$numC$為當前列的總的屬性個數。

   通過這種加入權重的方法,最后我們得出的樹的結果將以百分數表示,通常表示為具有多少可能性會被分到當前類。

    2)決策樹預測環節: 如果重要的數據缺失,那么此時決策樹可以使用兩個節點都走的策略,當然,這里兩個節點都走是具有權重的,那么最終結果就會是得到的結果乘以他們的權重!

6.多重共線性和內生性

6.1 多重共線性:

我們知道,數據的屬性很多情況下具有極強的線性相關性,同時我們選擇數據是如果我們使用虛擬變量,極其容易產生多重共線性,這種情況對於模型建立時十分不利的,因此我們要消除多重共線性,首先我們要檢驗是否存在多重共線性。

1. 使用皮爾遜相關度或者斯皮爾曼相關度檢驗相關度

2. 使用聯合檢驗假設:如果幾個變量分別不顯著,但是聯合顯著,那么他們存在多重共線性。

3. 方差膨脹因子法。

而我們想要解決這個問題,可以使用以下手段

1. 增加數據量

2. 去掉數據變量:這樣會帶來很多的信息損失,去掉了變量,因此我們不建議這么做。

3. 降維: 使用PCA等方法降維

4. 加入懲罰項:使用l1,l2 正則化。

5. 有一種特別的情況,叫做結構化地方共線性,類似於 $x_1,x_1^2$兩個參數,在遠離遠點的位置二者的值呈線性分布[2],因此使用中心位置置0可以解決這種問題,即是用 $x_1-\bar{x_1} (x_1-\bar{x_1})^2$。

6.2 內生性:

 與多重共線性類似,內生性也同樣來自於線性模型,數學上表示為由於模型中一個或者兩個變量。由於受到擾動的影響,導致變量與擾動之間存在某種聯系,致使模型重要的假設:擾動是一個獨立的相矛盾,這樣的后果就是模型預測失准。從表現上來看,就是因變量與自變量互為因果,例如學區房與升學率之間的關系就是互為因果。

  我們要解決這個問題,主要是使用工具變量,工具變量就是變量要是與引起內生性變量相關,其次與隨機擾動不相關。,找到隨機變量后使用二階最小二乘法,便可以消除內生性。

7.參考文獻

[1] 唐亘<<精通數據科學--從線性回歸到深度學習>>

[2] 張重生<<大數據分析-數據挖掘散發實例詳解>>

[3] <<集體智慧編程>>       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM