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] <<集體智慧編程>>