数据预处理过程
? ? ? ? 數(shù)據(jù)預處理過程會占用很多時間,雖然麻煩但也是必不可少且非常重要的一步。在數(shù)據(jù)能用于計算的前提下,我們希望數(shù)據(jù)預處理過程能夠提升分析結(jié)果的準確性、縮短計算過程,這是數(shù)據(jù)預處理的目的。本文只說明這些預處理方法的用途及實施的過程,并不涉及編程方面內(nèi)容,預處理的過程可以用各種各樣的語言編程實現(xiàn)來實現(xiàn)。我個人始終是秉持著這樣的觀點:沒有任何一種方法可以一成不變的被應(yīng)用于任何任務(wù)中,依據(jù)實際任務(wù)選擇、調(diào)整處理方法是最佳的。
? ? ? ? 數(shù)據(jù)預處理方法可以大致分為四類:數(shù)據(jù)清理、數(shù)據(jù)集成、數(shù)據(jù)變換和數(shù)據(jù)規(guī)約。
1.數(shù)據(jù)清理
? ? ? ? 數(shù)據(jù)清理主要針對數(shù)據(jù)數(shù)值上的各種異常情況的處理,根據(jù)數(shù)值異常情況的不同,數(shù)據(jù)清理常見的有以下:缺失值處理、離群和噪聲值處理、異常范圍及類型值處理。
1.1 缺失值處理
? ? ? ?缺失值使數(shù)據(jù)記錄丟失了部分信息,一些魯棒性不佳的模型也會因為缺失值而導致無法計算數(shù)據(jù)。缺失值的處理,一般有以下兩種思路:丟棄和估計。
- 丟棄
? ? ? ?你可以只丟棄缺失項處的值,也可以丟棄包含缺失項的整條數(shù)據(jù)記錄,這得看該條數(shù)據(jù)記錄上其它的數(shù)據(jù)是否有價值,尤其是在數(shù)據(jù)樣本較少的情況下,需要權(quán)衡一番。
- 估計? ? ?
? ? ? ?不想丟棄缺失值時,對缺失值進行估計是必要的。估計的方法有多種,最直接的是讓有經(jīng)驗的人員手工填寫,除此之外其它的常見方法有如下幾種:
? ? ? ?(1)? 替代。用缺失值所處屬性上全部值的平均值(此時也可以加權(quán)重)、某個分位值代替。對于時間序列,則可以用相鄰數(shù)據(jù)記錄處值(或平均值)替代。
? ? ? ?(2) 填充。 可以用與缺失值記錄“相似”記錄上的值來填充缺失值,不過這里需要先定義“相似”,這可能會是一個棘手的問題,用K最鄰近、聚類等方法估計缺失值都是這種思想。對于時間序列,則可以用插值的方法,包括線性和非線性插值。
? ? ? ?(3) 基于統(tǒng)計模型的估計。基于非缺失的值構(gòu)建統(tǒng)計模型,并對模型參數(shù)進行估計,然后再預測缺失處的值。
1.2 離群和噪聲值處理
? ? ? ?實際上噪聲含括的范圍比較廣泛,對計算過程無用或造成干擾的都可以稱為噪聲,像1.1節(jié)中所說的缺失值、1.3節(jié)中說的異常范圍及類型值均屬于噪聲的范疇,之所以在這里和離群點放在一起討論,是想說一下噪聲和離群點間的關(guān)系。
? ? ? ?離群點則是指與數(shù)據(jù)總體特征差別較大的。離群點是否是噪聲需要在實際的應(yīng)用場景中判斷,比如像建立系統(tǒng)總體的模型,那么離群點就可以視為噪聲,它對模型的創(chuàng)建毫無用處,甚至會影響模型的準確性。而在一些模式識別領(lǐng)域中,那么就要考慮離群點是噪聲,還是對模式創(chuàng)建有用的點,因為模式總是針對少量樣本的。
? ? ? ?上面關(guān)于離群點的說明中,我覺得應(yīng)該有一個“離群點數(shù)據(jù)量”的問題,個別與數(shù)據(jù)總體特征差別較大的點我們可以稱為離群點,但如果有相當一部分量與數(shù)據(jù)總體特征差別較大的點,那此時就要考慮這些點能不能被稱為離群點了。
? ? ? ?相比于處理離群點,識別離群點是一個更重要的問題。識別離群點的方法有很多,比如基于統(tǒng)計學的方法、基于距離的檢測、基于密度的監(jiān)測(如DBSCAN聚類法)等,本文中不涉及這方面的內(nèi)容,故不作詳解介紹。
? ? ? ?噪聲的處理可以針對具體情況進行,離群點處理前先要判斷該點是否是有用的,若是無用點則可以當做噪聲處理,若是有用的則保留。
1.3 異常范圍及類型值處理
? ? ? ?異常范圍類型是指記錄數(shù)據(jù)超過了當前場景下屬性可取值的范圍,比如記錄一個人的身高為300cm,或者月收入為負值,這顯然也是不合理的。異常類型值是指屬性取值類型記錄錯誤,比如記錄一個人的身高為“超重”。
? ? ? ?對于以上兩種情況,如果數(shù)據(jù)記錄異常是有規(guī)律的,比如身高記錄下的數(shù)據(jù)依次為“312,365,373...”那么可能原紀錄是“112,165,173...”。如果異常值是隨機的,那么可以將這些異常值當做缺失值處理。
2.數(shù)據(jù)集成
? ? ? ?數(shù)據(jù)集成主要是增大樣本數(shù)據(jù)量。
2.1 數(shù)據(jù)拼接
? ? ?? 數(shù)據(jù)拼接在數(shù)據(jù)庫操作中較為常見,它將多個數(shù)據(jù)集合為一個數(shù)據(jù)集。數(shù)據(jù)拼接依賴的是不同數(shù)據(jù)集間有相同的屬性(或關(guān)鍵字或其它的特征)(不同類型數(shù)據(jù)庫下拼接的原則可能不同,如關(guān)系型數(shù)據(jù)庫、半關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫下)。
3.數(shù)據(jù)變換
? ? ? ?數(shù)據(jù)變換包含的方法眾多,作用也不盡相同。數(shù)據(jù)變換的目的可以簡單的概括為改變數(shù)據(jù)的特征,方便計算及發(fā)現(xiàn)新的信息(這個概括可能不太合適。。。)。常見的數(shù)據(jù)變換過程包含以下方法:離散化、區(qū)間化、二元化、規(guī)范化(有的地方也成稱為標準化)、特征轉(zhuǎn)換與創(chuàng)建、函數(shù)變換。
3.1 離散化
? ? ? ?當我們不太關(guān)心值的小范圍變化,或者想要將連續(xù)屬性當成離散屬性處理時,可以使用離散化方法,這可以簡化計算,提高模型準確率。? ? ? ?
? ? ? ? 一般來說,離散化是將排序數(shù)據(jù)劃分為多個空間,例如將 [0,10] 離散為[0,2),[2,4),[4,6),[6,8),[8,10],這樣可以將一個連續(xù)取值的屬性轉(zhuǎn)換為離散取值的屬性來處理。
? ? ? ?我們還可以將一個取值比較“密”的離散屬性進一步離散化,這是離散化中的另外一種情況,例如一個離散屬性的取值集合為{0,1,2,3,4,5,6,7,8,9,10},那么此時可以將該取值集合進一步離散化為{0,1,2},{3,4,5},{6,7,8},{9,10}。
? ? ? ?在實際應(yīng)用時,對于標量型取值,可以將每個離散區(qū)間用一個新的值表示,不管是采用取中位值還是求平均等方法;而對于標稱型取值,可以重新定義一組標稱取值表示,例如 {極差,差,較差},{一般},{較好,好,極好},可以重新定義成{下},{中},{下},也可以選取其中一個值來代替整體,如 {差},{一般},{好}
? ? ? ?離散化過程需要考慮兩點:(1)如何確定離散區(qū)間(集合)的個數(shù) (2)如何將取值映射到離散化后的區(qū)間(集合)中。為了方便以下不再單獨強調(diào)集合,統(tǒng)一稱為區(qū)間。
? ? ? ?針對第一個問題,可以采用非監(jiān)督和監(jiān)督的離散化方法來確定離散區(qū)間的個數(shù),一旦離散集合劃分完畢,那么對于第二個問題,直接將數(shù)據(jù)映射到其分類值上即可。監(jiān)督和非監(jiān)督的區(qū)別在于區(qū)間劃分過程是否利用樣本類別信息,一般來說利用類別信息能達到更好的區(qū)間劃分結(jié)果,但計算量也會大一些。
? ? ? ?非監(jiān)督的離散方法主要包括等寬離散化、等頻率離散化、聚類離散化等,離散過程不利用樣本的分類信息。
- 等寬離散化。使每個離散區(qū)間據(jù)有相同的寬度。類似于將 [0,10] 離散為[0,2),[2,4),[4,6),[6,8),[8,10]的過程
- 等頻離散化。等頻離散化過程確保每個區(qū)間內(nèi)包含相同的樣本數(shù)。
- 聚類離散化。利用算法自身優(yōu)化目標進行,聚類完成后每個簇就對應(yīng)著一個區(qū)間,常用的如K均值聚類。
? ? ? ?監(jiān)督的離散化方法主要包括,基于熵(或信息增益)的區(qū)間離散化、卡方分裂算法離散化等。這里只介紹基于一種簡單的基于熵的離散過程。
- 基于熵的離散化。設(shè)是樣本集中包含的樣本個數(shù),是樣本集中類別的總數(shù),是劃分的第個區(qū)間中的樣本個數(shù),是第個區(qū)間中屬于類別的個數(shù),則第個區(qū)間的熵可以定義為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?其中,是第個區(qū)間中類別所占樣本的比例。區(qū)間劃分完成后,總的熵是各個區(qū)間熵的加權(quán)平均,即
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?其中,是各個區(qū)間中樣本的占比,n為劃分的區(qū)間個數(shù)。依據(jù)以上的定義,一種連續(xù)屬性區(qū)間離散化過程為:
(1) 把區(qū)間上每個值看做分割點,將樣本集劃分為兩部分,尋找使得總體熵最小的一種劃分方式。
(2) 選擇已劃分的兩個區(qū)間中熵最大的一個,繼續(xù)步驟(1)
(3)當劃分區(qū)間達到指定數(shù)目,或者滿足指定終止條件(如區(qū)間劃分后總體的熵變化小于指定閾值)時停止區(qū)間劃分
? ? ? ? 對于多維屬性,可以將其每一維上的值進行離散化,然后組合起來得到離散的多維空間。實際上離散化方法分類遠不止監(jiān)督和非監(jiān)督這兩種,感興趣的同學可以參考這篇文章(https://blog.csdn.net/CalCuLuSearch/article/details/52751218)進行更詳細的了解,后面如果有需要的話再單獨寫文章介紹離散化過程。
3.2?二元化
? ? ? 有一些算法中要求屬性為二元屬性(例如關(guān)聯(lián)模式算法),即屬性的取值只能為0或1(當然其它二元取值形式都可以,如Yes和No,只是都可以轉(zhuǎn)化為0和1表示),此時就要用到屬性二元化的過程。??
? ? ? 二元化的過程是用多個二元屬性來表示一個多元屬性。假設(shè)屬性取值有個,則將整數(shù)區(qū)間?中的每個值唯一的賦予該屬性的每個取值,如果該屬性的取值是有序的,則賦值的過程也必須按順序賦值,然后將這個值用二進制表示,共需要?(結(jié)果向上取整)個二進制位。例如一個具有5個取值的屬性{awful,poor,ok,good,great}可以用3個二元屬性、、表示
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? 以上的二元化過程可能會導致屬性間關(guān)系復雜化,例如上表中屬性和是相關(guān)的,因為“good”值需要這兩個屬性來表示。這種情況下可以為每一個取值引入一個二元屬性,比如下表中的方式
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?當一個屬性取值數(shù)量較多時,這種做法會引入過多的屬性值,此時可以在二元化之前先進行離散化,減少屬性取值。
3.3?規(guī)范化
? ? ??數(shù)據(jù)規(guī)范化是調(diào)整屬性取值的一些特征,比如取值范圍、均值或方差統(tǒng)計量等,這在一些算法中很重要。常見的規(guī)范化方位有:最小-最大規(guī)范化、z-score規(guī)范化、小數(shù)定標規(guī)范化。
- 最小-最大規(guī)范化
? ? ? 該方法是對原始數(shù)據(jù)的線性變換,將數(shù)值映射到[0,1]上,如身高(cm)和體重(kg)的取值范圍相差較大,在鄰近度分析中就需要進行最小-最大規(guī)范化,消除量綱(單位)的影響。該過程為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? 其中、分別為屬性取值的最小值和最大值
- z-score規(guī)范化
? ? ?該方法也成為標準差規(guī)范化,處理后屬性取值的均值為0,方差為1。該過程為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?其中、分別為屬性的均值和標準差。當數(shù)據(jù)中存在一些離群點時,上述的規(guī)范化方式受離群點影響較大,此時可以用中位數(shù)代替均值,用絕對偏差代替標準差,弱化離群點的影響。絕對偏差的定義為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
- 小數(shù)定標規(guī)范化
? ? ?該方法通過移動小數(shù)點的位置,將數(shù)值映射到[-1,1]上。該過程為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ?其中表示小數(shù)點移動的位數(shù),它取決于屬性取值絕對值中的最大值。如屬性取值的最大、最小值分別為-987、678,則應(yīng)該為3。
3.4?特征轉(zhuǎn)換與創(chuàng)建
? ? ? 對有一些時間序列,可以通過傅里葉變換、小波變換、EMD分解等方法得到數(shù)據(jù)的頻域或其它類型特征,這能幫助我們從另一個角度分析問題,例如EMD分解在經(jīng)濟學上就有較多的應(yīng)用。采用這一類方法時,一個比較重要的問題是如何解釋在頻域或時域上得到的新特征。
? ? ? 假如屬性集中包含“質(zhì)量”和"體積”這兩種屬性,那么可以利用“密度=質(zhì)量/體積“的方法得到密度屬性,這樣就創(chuàng)建了一個新的屬性。當然,需不需要這么做完全取決于目的。
3.5?函數(shù)變換
? ? ??函數(shù)變換是一個比較寬泛的說法,上面的規(guī)范化過程也是一種函數(shù)變換過程。我們可以依據(jù)需求,選擇函數(shù)來處理數(shù)據(jù),例如當屬性取值比較大時,可以用log函數(shù)來處理數(shù)據(jù)。
4.數(shù)據(jù)規(guī)約
? ? ? ?數(shù)據(jù)規(guī)約的目的是減少數(shù)據(jù)量,降低數(shù)據(jù)的維度,刪除冗余信息,提升分析準確性,減少計算量。數(shù)據(jù)規(guī)約包含的方法有:數(shù)據(jù)聚集、抽樣、維規(guī)約。
4.1 數(shù)據(jù)聚集
? ? ? ?數(shù)據(jù)聚集是將多個數(shù)據(jù)對象合并成一個數(shù)據(jù)對象,目的是為了減少數(shù)據(jù)及計算量,同時也可以得到更加穩(wěn)定的特征。聚集時需要考慮的問題是如何合并所有數(shù)據(jù)記錄上每個屬性上的值,可以采用對所有記錄每個屬性上的值求和、求平均(也可以加權(quán)重)的方式,也可以依據(jù)應(yīng)用場景采用其它方式。比如一家全球零售商,如果統(tǒng)計一天之中全球范圍內(nèi)所有店的全部銷售數(shù)據(jù),那么數(shù)據(jù)量會比較大且不是很有必要,此時可以將一個店內(nèi)一天的銷售數(shù)據(jù)進行聚集,得到一條或有限條銷售數(shù)據(jù),然后再匯總。
? ? ? ?進行數(shù)據(jù)聚集時可能會丟失數(shù)據(jù)細節(jié),也許這些細節(jié)正是你所關(guān)注的,這點尤為需要注意。
4.2 數(shù)據(jù)抽樣
? ? ? ?在數(shù)據(jù)預處理中提抽樣,實際上就是重抽樣了,目的就是為了獲取數(shù)據(jù)樣本中的一部分用于計算,減少計算負擔。重抽樣的方式與一般抽樣一致。
4.3?維規(guī)約
? ? ? ?維規(guī)約方法是為了減少屬性的個數(shù),上面提到的由質(zhì)量和體積得到密度是一種維規(guī)約方式。當屬性為標稱類型時,沒有“密度、質(zhì)量、體積”這種數(shù)值上的聯(lián)系,但是也可能存在其它的聯(lián)系來進行維規(guī)約,例如將“機械學科、自動化學科、材料學科”同一歸為“工程學”。
? ? ? ?更一般的,是采用一些數(shù)據(jù)降維的方法。數(shù)據(jù)降維的方法有很多,本文不打算在此處詳細說明降維的方法,后面會單獨寫一篇文章來說明數(shù)據(jù)降維的方法。有興趣的同學可以先看看這篇文章https://www.cnblogs.com/guoyaohua/p/8855636.html
小結(jié)? ?
? ?數(shù)據(jù)預處理是為了得到 tidy data ,但預處理過程絕不僅僅只是以上的內(nèi)容,很多處理過程與數(shù)據(jù)分析目的緊密結(jié)合的,本文只是簡要的介紹一些常見的數(shù)據(jù)預處理過程。
總結(jié)
- 上一篇: 计算机博士5篇sci,8篇SCI论文,5
- 下一篇: Cadence Allegro过电阻电容