易水寒 發表於 2018-11-17 09:31:41
在學習機器學習中,看過挺多案例,看到很多人在處理數據的時候,經常把連續性特徵離散化。為此挺好奇,為什麼要這麼做,什麼情況下才要做呢。
一、離散化原因
數據離散化是指將連續的數據進行分段,使其變為一段段離散化的區間。分段的原則有基於等距離、等頻率或優化的方法。數據離散化的原因主要有以下幾點:
1、算法需要
比如決策樹、樸素貝葉斯等算法,都是基於離散型的數據展開的。如果要使用該類算法,必須將離散型的數據進行。有效的離散化能減小算法的時間和空間開銷,提高系統對樣本的分類聚類能力和抗噪聲能力。
2、離散化的特徵相對於連續型特徵更易理解,更接近知識層面的表達
比如工資收入,月薪2000和月薪20000,從連續型特徵來看高低薪的差異還要通過數值層面才能理解,但將其轉換為離散型數據(底薪、高薪),則可以更加直觀的表達出了我們心中所想的高薪和底薪。
3、可以有效的克服數據中隱藏的缺陷,使模型結果更加穩定
二、離散化的優勢
在工業界,很少直接將連續值作為邏輯回歸模型的特徵輸入,而是將連續特徵離散化為一系列0、1特徵交給邏輯回歸模型,這樣做的優勢有以下幾點:
1. 離散特徵的增加和減少都很容易,易於模型的快速迭代;
2. 稀疏向量內積乘法運算速度快,計算結果方便存儲,容易擴展;
3. 離散化後的特徵對異常數據有很強的魯棒性:比如一個特徵是年齡>30是1,否則0。如果特徵沒有離散化,一個異常數據「年齡300歲」會給模型造成很大的幹擾;
4. 邏輯回歸屬於廣義線性模型,表達能力受限;單變量離散化為N個後,每個變量有單獨的權重,相當於為模型引入了非線性,能夠提升模型表達能力,加大擬合;
5. 離散化後可以進行特徵交叉,由M+N個變量變為M*N個變量,進一步引入非線性,提升表達能力;
6. 特徵離散化後,模型會更穩定,比如如果對用戶年齡離散化,20-30作為一個區間,不會因為一個用戶年齡長了一歲就變成一個完全不同的人。當然處於區間相鄰處的樣本會剛好相反,所以怎麼劃分區間是門學問;
7. 特徵離散化以後,起到了簡化了邏輯回歸模型的作用,降低了模型過擬合的風險。
三、離散化的方法
1、無監督學習方法
等寬法
等寬法即是將屬性值分為具有相同寬度的區間,區間的個數k根據實際情況來決定。比如屬性值在[0,60]之間,最小值為0,最大值為60,我們要將其分為3等分,則區間被劃分為[0,20] 、[21,40] 、[41,60],每個屬性值對應屬於它的那個區間
等頻法
等寬法即是將屬性值分為具有相同寬度的區間,區間的個數k根據實際情況來決定。比如有60個樣本,我們要將其分為k=3部分,則每部分的長度為20個樣本。
基於聚類的方法
基於聚類的方法分為兩個步驟,即:
選定聚類算法將其進行聚類
將在同一個簇內的屬性值做為統一標記。
註:基於聚類的方法,簇的個數要根據聚類算法的實際情況來決定,比如對於k-means算法,簇的個數可以自己決定,但對於DBSCAN,則是算法找尋簇的個數。
2、有監督學習方法:
1R方法
基於信息熵的方法
基於卡方的方法
四、總結
模型是使用離散特徵還是連續特徵,其實是一個「海量離散特徵+簡單模型」 同 「少量連續特徵+複雜模型」的權衡。既可以離散化用線性模型,也可以用連續特徵加深度學習。就看是喜歡折騰特徵還是折騰模型了。通常來說,前者容易,而且可以n個人一起並行做,有成功經驗;後者目前看很贊,能走多遠還須拭目以待。
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴