選自Medium
作者:Farhad Malik
機器之心編譯
參與:李詩萌、張倩
我們從高中就開始學正態分布,現在做數據分析、機器學習還是離不開它,那你有沒有想過正態分布有什麽特別之處?為什麽那麽多關於數據科學和機器學習的文章都圍繞正態分布展開?本文作者專門寫了一篇文章,試著用易於理解的方式闡明正態分布的概念。
機器學習的世界是以概率分布為中心的,而概率分布的核心是正態分布。本文說明了什麽是正態分布,以及為什麽正態分布的使用如此廣泛,尤其是對數據科學家和機器學習專家來說。
我會從最基礎的內容開始解釋,以便讀者們理解為什麽正態分布如此重要。
文章結構如下:
什麽是概率分布?
什麽是正態分布?
為什麽變量如此青睞正態分布
如何用 Python 查看查看特徵的分布?
其它分布變一變也能近似正態分布
Unsplash,由 timJ 發布。
先讓我們來看一點背景知識:
1. 首先,要注意的最重要的一點是,正態分布也被稱為高斯分布。
2. 它是以天才卡爾·弗裡德裡希·高斯(Carl Friedrich Gauss)的名字命名的。
3. 最後需要注意的是,簡單的預測模型一般都是最常用的模型,因為它們易於解釋,也易於理解。現在補充一點:正態分布因為簡單而流行。
因此,正態概率分布很值得我們去花時間了解。
什麽是概率分布?
想象我們正在自己的數據科學項目中構建感興趣的預測模型:
如果我們想準確地預測變量,那麽首先我們要了解目標變量的基本行為。
我們先要確定目標變量可能輸出的結果,以及這個可能的輸出結果是離散值(孤立值)還是連續值(無限值)。簡單點解釋就是,如果我們要評估骰子的行為,那麽第一步是要知道它可以取 1 到 6 之間的任一整數值(離散值)。
然後下一步是開始為事件(值)分配概率。因此,如果一個值不會出現,則概率為 0%。
概率越高,事件發生的可能性就越大。
Unsplash,Brett Jordan 發布
舉個例子,我們可以大量重複一個實驗,並記錄我們檢索到的變量值,這樣概率分布就會慢慢展現在我們的面前。
每次實驗產生一個值,這些值可以分配到類別/桶中了。對每個桶來說,我們可以記錄變量值出現在桶裡的次數。例如,我們可以扔 10,000 次骰子,每次骰子會產生 6 個可能的值,我們可以創建 6 個桶。並記錄每個值出現的次數。
我們可以根據這些值作圖。所作曲線就是概率分布曲線,目標變量得到一個值的概率就是該變量的概率分布。
理解了值的分布方式後,就可以開始估計事件的概率了,甚至可以使用公式(概率分布函數)。因此,我們可以更好地理解它的行為。概率分布依賴於樣本的矩,比如平均值、標準差、偏度及峰度。如果對所有概率求和,總和為 100%。
現實世界中存在很多概率分布,最常用的是「正態分布」。
什麽是正態概率分布
如果對概率分布作圖,得到一條倒鍾形曲線,樣本的平均值、眾數以及中位數是相等的,那麽該變量就是正態分布的。
這是正態分布鍾形曲線的示例:
上面是一個變量的高斯分布圖形,像神經網絡那樣上百萬的參數量,每個參數都有自己獨立的分布形狀,還有極其恐怖的聯合分布形狀。這種高維聯合分布就主導了不同任務的表現,因此理解和估計目標變量的概率分布是很重要的。
以下變量非常接近正態分布:
1. 人群的身高
2. 成年人的血壓
3. 擴散後的粒子的位置
4. 測量誤差
5. 人群的鞋碼
6. 員工回家所需時間
此外,我們周圍的大部分變量都呈置信度為 x% 的正態分布(x
好理解的正態分布
正態分布是隻依賴數據集中兩個參數的分布,這兩個參數分別是:樣本的平均值和標準差。
平均值——樣本中所有點的平均值。
標準差——表示數據集與樣本均值的偏離程度。
分布的這一特性讓統計人員省事不少,因此預測任何呈正態分布的變量準確率通常都很高。值得注意的是,一旦你研究過自然界中大多數變量的概率分布,你會發現它們都大致遵循正態分布。
正態分布很好解釋。因為:
1. 分布的均值、眾數和中位數是相等的;
2. 我們只要用平均值和標準差就可以解釋整個分布。
為什麽這麽多變量近似正態分布?
為什麽樣本一多,那麽總會有一堆樣本都非常普通?這個想法背後有這樣一個定理:你在大量隨機變量上多次重複一個實驗時,它們的分布總和將非常接近正態性(normality)。
人的身高是一個基於其他隨機變量(比如一個人所消耗的營養量、他們居住的環境以及他們的基因等)的隨機變量,這些隨機變量的分布總和最終是非常接近正態的。這就是中心極限定理。
我們從前文了解到,正態分布是許多隨機分布的和。如果我們對正態分布密度函數作圖,那所作曲線有如下特性:
這個鍾形曲線平均值為 100,標準差為 1。
平均值是曲線的中心。這是曲線的最高點,因為大多數點都在平均值附近;
曲線兩側點的數量是相等的。曲線中心的點數量最多;
曲線下的面積是變量能取的所有值的概率和;
因此曲線下面的總面積為 100%。
上圖介紹了非常出名的 3σ原則,即:
約有 68.2% 的點落在 ±1 個標準差的範圍內
約有 95.5% 的點落在 ±2 個標準差的範圍內
約有 99.7% 的點落在 ±3 個標準差的範圍內。
這樣我們就可以輕鬆地估計出變量的波動性,還可以給出一個置信水準,估計它可能取的值是多少。例如,在上面的灰色鍾型曲線中,變量值出現在 101~99 之間的概率約為 68.2%。想象一下,當你根據這樣的信息做決定時,你的信心有多充足。
概率分布函數
正態分布的概率密度函數是:
概率密度函數本質上是連續隨機變量取某些值的概率。例如想知道變量出現在 0 到 1 之間,它的概率就能通過概率密度函數求出。
如果你用計算好的概率密度函數繪製概率分布曲線,那麽給定範圍的曲線下的面積就描述了目標變量在該範圍內的概率。
概率分布函數是根據多個參數(如變量的平均值或標準差)計算得到的。
我們可以用概率分布函數求出隨機變量在一個範圍內取值的相對概率。舉個例子,我們可以記錄股票的日收益,把它們分到合適的桶中,然後找出未來收益概率在 20~40% 的股票。
標準差越大,樣本波動越大。
如何用 Python 找出特徵分布?
我用過的最簡單的方法是在 Pandas 的 DataFrame 中加載所有特徵,然後直接調用它的方法找出特徵的概率分布:
這裡的 bins 表示分布的柱狀數量。當然上面並不是一個正態分布,那麽當變量滿足正態分布時,它意味著什麽?
這意味著,如果你把大量分布不同的隨機變量加在一起,你的新變量最終也服從正態分布,這就是中心極限定理的魅力。此外,服從正態分布的變量會一直服從正態分布。舉個例子,如果 A 和 B 是兩個服從正態分布的變量,那麽:
AxB 服從正態分布;
A+B 服從正態分布。
變量還是乖乖地變成正態分布吧
如果樣本滿足某個未知的分布,那麽通過一系列操作,它總是能變成正態分布。相反,標準正態分布的疊加與轉換,也一定能變化為任意未知分布。從標準正態轉換到未知分布,就是很多機器學習模型希望做到的,不論是視覺中的 VAE 或 GAN,還是其它領域的模型。
但對於傳統統計學,我們更希望將特徵的分布轉換成正態分布,因為正態分布簡單又好算呀。下面展示了幾種轉換為標準正態的方法,像相信變換什麽的,在高中都有學過。
1. 線性變換
我們收集到作為變量的樣本後,就可以用下面的公式對樣本做線性變換,從而計算出
Z 分數
計算平均值
計算標準差
用下式根據每一個值 x 計算出 Z
以前 x 可能服從某個未知分布,但是歸一化後的 Z 是服從正態分布的。嗯,這就是做批量歸一化或其它歸一化的好處吧。
2.Box-cox 變換
你可以用 Python 的 SciPy 包將數據轉換成正態分布:
3.YEO-JOHBSON 變換
此外,也可以用強大的 yeo-johnson 變換。Python 的 sci-kit learn 提供了合適的函數:
最後,非常重要的一點是,在沒有做任何分析的情況下假設變量服從正態分布是很不明智的。
以遵循泊松分布(Poisson distribution)、t 分布(student-t 分布)或二項分布(Binomial distribution)的樣本為例,如果錯誤地假設變量服從正態分布可能會得到錯誤的結果。
市北·GMIS 2019全球數據智能峰會於7月19日-20日在上海市靜安區舉行。本次峰會以「數據智能」為主題,聚焦最前沿研究方向,同時更加關注數據智能經濟及其產業生態的發展情況,為技術從研究走向落地提供借鑒。
本次峰會設置主旨演講、主題演講、AI畫展、「AI00」數據智能榜單發布、閉門晚宴等環節,已確認出席嘉賓如下: