1. 程式人生 > >Machine Learning part0---拿到資料後的第一件事該幹什麼?

Machine Learning part0---拿到資料後的第一件事該幹什麼?

在這個專題裡,我會就某個方面的問題進行總結,第一篇文章就是關於做機器學習的第一步,資料預處理的內容。本篇文章主要是我在看了“資料到手了,第一件事幹啥”這篇文章之後的筆記內容。

1.預處理的意義

a.減少或避免資料本身的錯誤或者遺漏
b.掌握資料的基本情況,獲得進一步分析的靈感。獲得比如取值範圍、中值、分散程度這樣的資訊,可以提示我們資料中也許存在的關聯。
c.初步判斷我們的某些模型的假設是否成立。有些模型對資料本身有一定的要求(比如對分佈的要求),只有當我們的資料滿足這些假設時,統計檢驗的結果才有意義。

2.關於離散型變數

a.說明:

對於有些離散型變數來說,不同的分類是有某種順序關係的,比如說教育程度可以從低到高排列,而有些離散變數並沒有這種順序,比如說某個基因的基因型。這兩種情況分別稱為有序變數

(ordinal variable)和名義變數(nominal variable)。

b.處理方式:

要對離散型資料進行探索性分析,最簡單、最有效的方法是算出一個包含所有情況的頻率表(直方圖)。


如圖我們可以很容易地算出資料中“性別”這個變數的所有不同情況的數量以及百分比。這能夠給我們提供哪些資訊?
首先,我們可以很快了解資料中男女性的比例,還可以看到是否有異常的資料點出現。假設我們都用中文“男”“女”來標註受試者的性別,那麼性別變數應該只有這兩種情況。如果我們不清楚部分受試者的性別,則還會有第三種情況。但是,如果你在頻數表中發現了還有一個類別“M”,那麼很可能是在錄入個別受試者的資料時不小心打了英文。
          其次,如果我們的研究中需要對男女性受試者進行比較,根據頻數的資訊,我們還可以考慮當前資料是否能夠滿足我們的需要(男、女性的數量是否都足夠多,兩者數量比例如何等)。
          如果你自認為是一個視覺動物,也可以選擇繪製餅狀圖,它展示的資訊與頻數(頻率)表是完全相同的。

3.關於連續型資料

a.說明:

連續型資料的數值有具體的科學意義,並且可以在數軸上的某個範圍連續取值。如果不受測量精度的限制,它在理論上可能的取值是無限多的。比如身高、體重、血糖濃度、腎小球濾過率等。有些資料理論上並沒有無限多的取值(比如人口只能取整數,商品的價格最高的精度只能是最小幣值),嚴格來說應該是有序離散變數,但由於它們可能的取值足夠繁多,因此在實際處理時當成連續型資料更加方便。

b.處理方法:

相比起離散型資料,連續型資料往往能提供更多的資訊,因此預處理也更復雜一些。對於一個連續性變數,每一個數據點可能都有不同的取值。在這些紛繁複雜之中,我們首先想知道的自然是大勢所趨——我們感興趣的整個群體平均而言是多大一個數?用高大上的統計學術語來說,這叫做集中趨勢(central tendency)。



算術平均數(arithmatic mean)是對集中趨勢的最常用的描述。還有一個東西叫做中位數(median)。中位數的計算,是把該變數所有取值從小到大(或從大到小)排序,取最中間的一個(例如總共有21個數,則取排行第11的)。如果樣本量是偶數,則取中間兩個數的平均。換句話說,在資料集裡,恰好有一半的資料點比中位數大,而另一半的資料點比它小。

許多人都會對中位數有些嫌棄,因為它不像算術平均數那樣有一個固定又簡單的式子。為什麼我們還需要它?相比起算術平均數,中位數有一個突出的優點:根據它的定義,它就是所有資料點裡最中不溜秋的一個,所以它有一種穩如泰山的性格(統計學中稱為穩健性,robustness)。

比如說,如果有人算了算現任上海籍全國政協委員的身高平均值,很可能會得到一個比一般人的身高要大的一個數。難道長得高更容易當選全國政協委員?不是。這個平均值只是個假象,因為全國政協委員裡面的上海人裡有個姚明。在存在極端值的情況下,中位數比算術平均值更能反映樣本的普遍水平,因為算術平均值很容易受到極端值的影響,而中位數則不然。

與此類似的是,如果我們感興趣的變數分佈不對稱時,中位數和算術平均數也會有比較大的差別。最經典的例子是個人收入,這個數字是有下限的(零),然而卻是上不封頂,所以算術平均往往會被最大的那一小撮資料點拉高。因此,我們如果想從人均收入裡推斷一個國家或地區普通居民的經濟情況,可能就不太準確了。這個時候該找誰?不錯,就是中位數!

集中趨勢只是資料中所蘊含資訊的一個部分,要得到進一步的知識我們還需要知道資料的波動或發散程度,也稱為展布(spread)

我們為什麼要關心資料的波動程度呢?集中趨勢能讓我們靠近表面以下的本質規律,但是展布卻告訴我們這一本質表現得有多穩定。設想一下,兩個程度相當的學生,一個四平八穩,另一個則是一把神經刀,一會兒超常發揮一會兒大跌眼鏡,他們倆進高考考場時的心態必然不一樣吧?

展布有幾種常見的表示方式。

其一是樣本方差(variance)意思是,取每個資料點與平均值之差的平方(可以將其視為各資料點到平均值的“距離”),並把它們都加起來然後除以n-1。這個定義並不難理解,無非只是把各個資料點與中心的偏離程度彙總起來而已。至於為什麼除的是n-1而不是n,涉及到稍微複雜一些的理論,我們暫時先不深究。由於平方的存在,方差的量綱也帶上了平方(例如血壓的方差的單位就成了毫米平方汞柱)。為了讓量綱和原來的資料一致,我們可以給樣本方差開個根號,這也就是大家常見的標準差(standard deviation)了。

聰明的你一定會想到,方差和標準差都有和算術平均數一樣的毛病,就是容易被極端值帶跑。那麼有沒有像中位數那樣的穩健的表示展布的量呢?

沿用尋找中位數的思路,我們把所有資料點從小到大排列,並且分成樣本量相等的四塊。那麼,這四塊之間就會產生三個分界點(稱為四分位點,quartile),從小到大分別用Q1, Q2, Q3表示。如果我們取Q3和Q1之差,那麼這就是四分位差(interquartile range),也稱為內距。由於四分位差不考慮首尾兩端的資料點,因此,它是一個不容易受極端值干擾的表示展布的統計量。

上面討論的這些統計量,可以很方便地用圖形來表示。其中一種選擇是箱線圖(boxplot),它彙集了中位數、四分位差以及一些其他資訊,能夠使我們對樣本的分佈有一個直觀的瞭解,也可以讓我們快速發現數據中可能存在的錯誤(例如因為資料錄入或單位錯誤導致的異常值)。

它之所以被稱為箱線圖,是因為它用一個“箱子”來表示我們的資料中最靠中間的一半(即Q1和Q3之間的所有資料點),而用箱子上下的兩根“鬍鬚”來表示資料的上下限範圍。具體原理可以看這裡

不難看到,箱線圖提供了相當豐富的資訊,但仍然不是全部。比如說,箱子裡那50%的資料是怎樣分佈的?我們無法在箱線圖上得知。這時,我們需要請出探索性資料分析的最大殺器——頻率直方圖(histogram)。
頻率直方圖是對樣本資料分佈狀況的一種視覺化的展現方式。它最初來源於大家在中學都聽說過的高爾頓釘板(下圖)。


我們可以把我們的每一個數據點想象成一個從上方以某種規律落下的小球(當然不一定像高爾頓釘板那樣),那麼頻率直方圖描繪的就是落到下方不同區域的球的數量。

要畫出一張頻率直方圖,首先要將變數的整個取值範圍劃出若干區間(通常等距)。比如說,我們有一個樣本,其中受試者體重的最小值和最大值分別是48公斤到73公斤,如果以5公斤作為組距(bin),那麼我們可以把整個體重的範圍分成[48,53], [53, 58], [58,63], [63, 68], [68,73]這些區間。然後以體重為橫座標,受試者的數量除以組距為縱座標(這樣每個矩形的面積就是該區間內受試者的數量),畫出受試者在這些區間中的分佈。

頻率直方圖可以讓我們對樣本的整體分佈一目瞭然,得到分佈形態、對稱程度等關鍵資訊(見下圖)。頻率直方圖一個關鍵的地方,在於區間數量的確定:區間數量太少的話,頻率直方圖過於粗略,會掩蓋真實的分佈;區間數量太多,則變得過於瑣碎,不容易看出分佈的大趨勢。區間數量多少合適,取決於樣本量的大小和資料的具體分佈情況,在實際應用時一般都要通過反覆嘗試才能獲得比較好的選擇。

要注意,千萬不要把頻率直方圖和另一種常見的統計圖——條形圖(bar plot,或稱柱狀圖)混為一談。頻率直方圖呈現的是某個連續變數的整體分佈情況(在不同取值範圍裡出現的次數多少),而柱狀圖描繪的是不同組別或個體的某一種用連續變數來表示的性質。因此,頻率直方圖(下圖右)的橫軸必然是該變數本身,而且必須覆蓋這個變數取值的整個範圍,矩形的高度表示的是落在對應區間的資料點的個數(或個數除以區間寬度);而條形圖(下圖左)的橫軸則是某個分類(如組別、個體、年份等),矩形的高度則是這些分類各自的某個連續變數的值。

探索性資料分析的方法很多,這裡介紹的只是其中最常用、最重要的一小部分。但是,萬變不離其宗,不論用哪種方法,我們的目的都是要管中窺豹,儘可能全面地瞭解手上資料的情況。千里之行,始於足下,不管你要做怎樣的資料分析,都別忘了這關鍵的第一步哦!