- 產品
- 產品解決方案
- 行業解決方案
- 案例
- 數據資產入表
- 賦能中心
- 伙伴
- 關于
時間:2022-07-03來源:美的像謎底瀏覽數:1154次
人的身高是一個基于其他隨機變量(比如一個人所消耗的營養量、他們居住的環境以及他們的基因等)的隨機變量,這些隨機變量的分布總和最終是非常接近正態的。這就是中心極限定理。
我們從高中就開始學正態分布,現在做數據分析、機器學習還是離不開它,那你有沒有想過正態分布有什么特別之處?為什么那么多關于數據科學和機器學習的文章都圍繞正態分布展開?本文作者專門寫了一篇文章,試著用易于理解的方式闡明正態分布的概念。
機器學習的世界是以概率分布為中心的,而概率分布的核心是正態分布。本文說明了什么是正態分布,以及為什么正態分布的使用如此廣泛,尤其是對數據科學家和機器學習專家來說。
我會從最基礎的內容開始解釋,以便讀者們理解為什么正態分布如此重要。
文章結構如下:
什么是概率分布?
什么是正態分布?
為什么變量如此青睞正態分布
如何用 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<100)。所以說,生活中經常出現的各種變量,差不多都能用高斯分布描述。
好理解的正態分布正態分布是只依賴數據集中兩個參數的分布,這兩個參數分別是:樣本的平均值和標準差。
平均值——樣本中所有點的平均值。
標準差——表示數據集與樣本均值的偏離程度。
分布的這一特性讓統計人員省事不少,因此預測任何呈正態分布的變量準確率通常都很高。值得注意的是,一旦你研究過自然界中大多數變量的概率分布,你會發現它們都大致遵循正態分布。
正態分布很好解釋。因為:
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 包將數據轉換成正態分布:
scipy.stats.boxcox(x,?lmbda=None,?alpha=None)

3.YEO-JOHBSON 變換
此外,也可以用強大的 yeo-johnson 變換。Python 的 sci-kit learn 提供了合適的函數:
sklearn.preprocessing.PowerTransformer(method=’yeo-johnson’,?standardize=True,?copy=True)
最后,非常重要的一點是,在沒有做任何分析的情況下假設變量服從正態分布是很不明智的。
以遵循泊松分布(Poisson distribution)、t 分布(student-t 分布)或二項分布(Binomial distribution)的樣本為例,如果錯誤地假設變量服從正態分布可能會得到錯誤的結果。