華文網

僅靠一道簡單的數學題,他就變成了Stack Overflow的資料科學家

古語有雲,“學好數理化,走遍天下都不怕。”

人工智慧時代尤其如此。

比如,寫上幾句基礎的數學概念,天上就能掉下一個工作來……這是真事。

學概率的時候,我們會反復來理解什麼是正態分佈,什麼是均勻分佈,什麼是二項分佈,什麼是貝塔分佈……不知在座的各位是否還能記起當時做過的習題?是否還能通俗地講解一下這些概念?

在Stack Overflow,有位學機器學習的同學理解不了貝塔分佈,希望有人能幫他解答下。剛好,正在學生物資訊學博士的David Robinson現身說法,

用一個有關棒球運動的統計資料來解釋這個概念。這位博士純粹是為了消磨時間,覺得好玩。

不過,Stack Overflow資料科學團隊的Jason Punyon讀完David Robinson的解答後,覺得解釋很贊,他在內部會議上突發奇想:

“哇!咱們乾脆雇了這哥們兒吧。”

於是,一份公開的邀請不期而至:我們十分期待你能拜訪一下Stack Overflow。

在好奇心的驅使下,原本打算博士畢業後研究計算生物學的David Robinson,鬼使神差地拜訪了這家科技公司。一次拜訪、幾周面試,Stack Overflow提供給他一個無法拒絕的工作機會,David Robinson從計算生物學博士變成了一個資料科學家。

你一定特別好奇,這到底是個怎樣的問題,直接就讓這位元博士拿到了資料科學家的offer?David Robinson的解釋到底又有多精彩?現在我們讓來看看這個問題。

問題

首先聲明,我並不是統計學家,只是一名軟體工程師。我所掌握的大部分統計學知識都來自于自學,因此對於一些別人覺得很簡單的概念,我可能會覺得很難理解。因此我希望答案能儘量通俗易懂,少一些專業名詞而多一些形象解釋。

我之前試圖想弄清楚貝塔分佈(beta distribution)的本質——它能用於做什麼以及如何解釋它的應用場景?

例如,當我們談正態分佈時,可以將它描述成火車的到達時間:大多數情況下火車正點到站,

有時候會早1分鐘或者遲1分鐘,但是早20分鐘或者遲20分鐘的情況則非常罕見;均勻分佈可以描述為彩票中獎的機會事件;二項分佈可以描述成拋硬幣事件等等。那麼,貝塔分佈有這樣的直觀解釋嗎?

例如 α=.99,β=.5,貝塔分佈B(α,β)如下圖所示(使用R生成):

那麼這個圖代表什麼意思?Y軸是一個概率密度,那麼X軸呢?

答案可以基於這個例子來解釋,

或者任何其他的也行。我將感激不盡。

David Robinson 解釋如下:

簡而言之,貝塔分佈可以看作是一個概率的分佈,也就是說,當我們不知道一個東西的具體概率是多少時,它給出了所有概率出現的可能性大小。下面結合一個應用場景來理解:

熟悉棒球運動的都知道一個指標就是棒球擊球率(batting average-http://en.wikipedia.org/wiki/Batting_average%22),就是用一個運動員擊中的球數除以總的擊球數(因此它是一個0到1之間的百分比)。我們一般認為0.266是一個平均的擊球水準,而如果擊球率達到0.3就會被認為非常優秀了。

假設有一個棒球運動員,現在我們想預測他整個賽季的棒球擊球率如何。你可能就會直接計算他目前的棒球擊球率,用擊中數除以擊球數,但這在賽季開始階段時是很不合理的!假如這個運動員就打了一次,還中了,那麼他的擊球率就是100%,如果他沒中,那麼就是0%。甚至打5、6次的時候,也可能運氣爆棚全中擊球率100%,或者運氣很糟擊球率0%。無論如何,基於這些來做預測是不合理的。

那麼,為什麼用前幾次擊中來預測整個賽季擊球率不合理呢?當運動員首次擊球沒中時,為什麼沒人認為他整個賽季都會一次不中?因為我們有先驗期望。根據歷史資訊,我們知道擊球率一般會在0.215到0.36之間。如果一個運動員一開始打了幾次沒中,那麼我們知道他可能最終成績會比平均稍微差一點,但是一般不可能會偏離上述區間。

對於這個擊球率問題,我們可以用二項分佈(https://en.wikipedia.org/wiki/Binomial_distribution)表示(一系列的成功或失敗事件),一個最好的方法來表示這些先驗期望(統計中稱為先驗(prior))就是貝塔分佈,這表示在運動員打球之前,我們就對他的擊球率有了一個大概範圍的預測。貝塔分佈的定義域為(0, 1),與概率是一樣的。我們下面繼續解釋為什麼貝塔分佈用在這個任務上是合理的。

假設我們預計運動員整個賽季的擊球率大概是0.27左右,範圍大概是在0.21到0.35之間。那麼用貝塔分佈來表示,我們可以取參數 α==81,β==219。

curve(dbeta(x, 81, 219))

之所以取這兩個參數,原因如下:

貝塔分佈的均值

從上圖中可以看出,這個分佈主要落在(0.2, 0.35)之間,這是從經驗得到的合理範圍。

你問在貝塔分佈的密度圖上x軸代表什麼,在這裡,x軸代表運動員的擊球率。注意到在這個例子裡,不僅y軸是代表概率(確切說是概率密度),x軸也是(擊球率是擊中次數的概率分佈)。因此貝塔分佈可以看作一個概率的分佈。

接下來解釋為什麼貝塔分佈適合這個例子。假設運動員一次擊中,那麼現在他本賽季的記錄是“1次打中;1次打擊”。那麼我們更新我們的概率分佈,讓概率曲線做一些移動來反應我們的新資訊。這裡涉及一些數學上的證明(點此查看-https://en.wikipedia.org/wiki/Conjugate_prior#Example),但是結論非常簡單。新的貝塔分佈為:

其中 α0和β0是初始參數,在這裡是81和219。所以,在這個例子裡,增加了1(擊中了一次),沒有增加(沒有失誤)。因此新的貝塔分佈為Beta(81+1,219),如下圖:

curve(dbeta(x, 82, 219))

可以看到這個分佈與原來相比並沒有什麼肉眼可見的變化,這是因為僅一次擊中球並不能太說明什麼問題。

然而,隨著整個賽季運動員逐漸進行比賽,這個曲線也會逐漸移動以匹配最新的資料。由於我們擁有了更多的資料,因此曲線(擊球率範圍)會逐漸變窄。假設賽季過半時,運動員一共打了300次,其中擊中100次。那麼新的貝塔分佈是Beta(81+100,219+200),如下圖:

curve(dbeta(x, 81+100, 219+200))

可以看出,曲線現在更尖而且往右移動了(擊球率更高),由此我們對於運動員的擊球率有了更好的瞭解。

根據新的貝塔分佈,我們得到的期望值通常也是我們的新的估計。貝塔分佈的期望值計算公式

。因此新的貝塔分佈的期望值為

,注意到這個值比直接預估要低

,但是比賽季開始時的預計要高

你可能已經注意到了,這個公式就相當於給運動員的擊中次數添加了“初始值”,相當於在賽季開始前,運動員已經有81次擊中219次不中的記錄。

因此,在我們事先不知道概率是什麼但又有一些合理的猜測時,貝塔分佈能夠很好地表示為一個概率的分佈。

就這樣,靠著一道數學題,就拿到了資料科學家的職位。做機器學習,你的數學準備好嗎?

福利

怎麼樣?讀到這裡,對於火車到達時間、彩票中獎機會、拋硬幣和棒球擊球率所對應的概率分佈,你應該都能回想起來了,除非你在《概率論與數理統計》課上所學的東西真的還給老師了。

不過,就算還給概率論老師也沒關係,你總是可以重新啃書本把它拾起來,或是重新上一門能讓你真正學會概率、統計的課程,比如CSDN學院最近推出的中科院冒老師這門《機器學習之概率與統計推斷》:它不光能讓你真正學會概率、統計,還能弄懂這些概念在機器學習中的具體應用場景。

僅需8小時,你就能拾回早已還給老師的概率論和數理統計,拿到理解機器學習的入門鑰匙。

課程地址:http://edu.csdn.net/huiyiCourse/series_detail/46?ref=9

而如果擊球率達到0.3就會被認為非常優秀了。

假設有一個棒球運動員,現在我們想預測他整個賽季的棒球擊球率如何。你可能就會直接計算他目前的棒球擊球率,用擊中數除以擊球數,但這在賽季開始階段時是很不合理的!假如這個運動員就打了一次,還中了,那麼他的擊球率就是100%,如果他沒中,那麼就是0%。甚至打5、6次的時候,也可能運氣爆棚全中擊球率100%,或者運氣很糟擊球率0%。無論如何,基於這些來做預測是不合理的。

那麼,為什麼用前幾次擊中來預測整個賽季擊球率不合理呢?當運動員首次擊球沒中時,為什麼沒人認為他整個賽季都會一次不中?因為我們有先驗期望。根據歷史資訊,我們知道擊球率一般會在0.215到0.36之間。如果一個運動員一開始打了幾次沒中,那麼我們知道他可能最終成績會比平均稍微差一點,但是一般不可能會偏離上述區間。

對於這個擊球率問題,我們可以用二項分佈(https://en.wikipedia.org/wiki/Binomial_distribution)表示(一系列的成功或失敗事件),一個最好的方法來表示這些先驗期望(統計中稱為先驗(prior))就是貝塔分佈,這表示在運動員打球之前,我們就對他的擊球率有了一個大概範圍的預測。貝塔分佈的定義域為(0, 1),與概率是一樣的。我們下面繼續解釋為什麼貝塔分佈用在這個任務上是合理的。

假設我們預計運動員整個賽季的擊球率大概是0.27左右,範圍大概是在0.21到0.35之間。那麼用貝塔分佈來表示,我們可以取參數 α==81,β==219。

curve(dbeta(x, 81, 219))

之所以取這兩個參數,原因如下:

貝塔分佈的均值

從上圖中可以看出,這個分佈主要落在(0.2, 0.35)之間,這是從經驗得到的合理範圍。

你問在貝塔分佈的密度圖上x軸代表什麼,在這裡,x軸代表運動員的擊球率。注意到在這個例子裡,不僅y軸是代表概率(確切說是概率密度),x軸也是(擊球率是擊中次數的概率分佈)。因此貝塔分佈可以看作一個概率的分佈。

接下來解釋為什麼貝塔分佈適合這個例子。假設運動員一次擊中,那麼現在他本賽季的記錄是“1次打中;1次打擊”。那麼我們更新我們的概率分佈,讓概率曲線做一些移動來反應我們的新資訊。這裡涉及一些數學上的證明(點此查看-https://en.wikipedia.org/wiki/Conjugate_prior#Example),但是結論非常簡單。新的貝塔分佈為:

其中 α0和β0是初始參數,在這裡是81和219。所以,在這個例子裡,增加了1(擊中了一次),沒有增加(沒有失誤)。因此新的貝塔分佈為Beta(81+1,219),如下圖:

curve(dbeta(x, 82, 219))

可以看到這個分佈與原來相比並沒有什麼肉眼可見的變化,這是因為僅一次擊中球並不能太說明什麼問題。

然而,隨著整個賽季運動員逐漸進行比賽,這個曲線也會逐漸移動以匹配最新的資料。由於我們擁有了更多的資料,因此曲線(擊球率範圍)會逐漸變窄。假設賽季過半時,運動員一共打了300次,其中擊中100次。那麼新的貝塔分佈是Beta(81+100,219+200),如下圖:

curve(dbeta(x, 81+100, 219+200))

可以看出,曲線現在更尖而且往右移動了(擊球率更高),由此我們對於運動員的擊球率有了更好的瞭解。

根據新的貝塔分佈,我們得到的期望值通常也是我們的新的估計。貝塔分佈的期望值計算公式

。因此新的貝塔分佈的期望值為

,注意到這個值比直接預估要低

,但是比賽季開始時的預計要高

你可能已經注意到了,這個公式就相當於給運動員的擊中次數添加了“初始值”,相當於在賽季開始前,運動員已經有81次擊中219次不中的記錄。

因此,在我們事先不知道概率是什麼但又有一些合理的猜測時,貝塔分佈能夠很好地表示為一個概率的分佈。

就這樣,靠著一道數學題,就拿到了資料科學家的職位。做機器學習,你的數學準備好嗎?

福利

怎麼樣?讀到這裡,對於火車到達時間、彩票中獎機會、拋硬幣和棒球擊球率所對應的概率分佈,你應該都能回想起來了,除非你在《概率論與數理統計》課上所學的東西真的還給老師了。

不過,就算還給概率論老師也沒關係,你總是可以重新啃書本把它拾起來,或是重新上一門能讓你真正學會概率、統計的課程,比如CSDN學院最近推出的中科院冒老師這門《機器學習之概率與統計推斷》:它不光能讓你真正學會概率、統計,還能弄懂這些概念在機器學習中的具體應用場景。

僅需8小時,你就能拾回早已還給老師的概率論和數理統計,拿到理解機器學習的入門鑰匙。

課程地址:http://edu.csdn.net/huiyiCourse/series_detail/46?ref=9