數學之美2 - 概率篇

概率篇

  • 樸素貝葉斯
  • 文本分類
  • 語言模型
  • 馬爾科夫模型
  • 決策樹
  • A/B 測試

19 | 概率和統計:編程爲什麼需要概率和統計?

概率和統計裏有哪些需要掌握的概念?

  • 隨機變量(Random Variable)來描述事件所有可能出現的狀態
  • 離散型隨機變量(Discrete Random Variable)
  • 連續型隨機變量(Continuous Random Variable)
  • 概率分佈(Probability Distribution)來描述每個狀態出現的可能性
  • 聯合概率(Joint Probability)
  • 邊緣概率(Marginal Probability)
  • 條件概率

說了這麼多,不知道你有沒有一種感覺,其實概率論研究的就是這些概率之間相互轉化的關係,比如聯合概率、條件概率和邊緣概率。通過這些關係,概率論中產生了著名的貝葉斯定理(Bayes’ theorem)。加上變量的獨立性,我們就可以構建**樸素貝葉斯(Naive Bayes)**分類算法。

此外,基於概率發展而來的信息論,提出了很多重要的概率,例如**信息熵(Entropy)、香農熵(Shannon Entropy)、信息增益(Information Gain)、基尼指數(Gini)等。這些概念都被運用到了決策樹(Decision Tree)**的算法中。

通過這些概念之間的相互推導,我們可以得到貝葉斯定理,這是樸素貝葉斯等系列算法的核心。而在概率基礎之上發展而來的信息論,定義了信息熵、信息增益和基尼指數等,構成了決策樹等系列算法的核心。

概率研究的是模型如何產生數據,統計研究的是如何通過數據來推導其背後的模型。所以說,概率和統計其實是互逆的。

概率和統計可以幫我們做什麼?

  • 第一,概率可以幫助我們進行更精準的複雜度分析;
  • 第二,概率統計更多的是用在機器學習和大數據分析中;
  • 第三,概率統計還可以用在各種機器學習的算法中。

20 | 概率基礎(上):一篇文章幫你理解隨機變量、概率分佈和期望值

離散 & 連續

隨機變量根據其取值是否連續,可分爲離散型隨機變量和連續型隨機變量。舉幾個例子,拋硬幣出現正反面的次數以及每週下雨的天數,都是離散的值,所以對應的隨機變量爲離散型。而汽車每小時行駛的速度和銀行排隊的時間,都是連續的值,對應的隨機變量爲連續型。換句話,從計算的角度來說,我們可以直接求和得出的,就是“離散的”,需要用積分計算的,就是“連續的”。

概率分佈

  • 離散

拋硬幣事件來看

離散分佈模型:常用的離散分佈有伯努利分佈、分類分佈、二項分佈、泊松分佈

  • 連續

汽車每小時行駛的公里數

連續分佈模型:比較經典的連續分佈有正態分佈、均勻分佈、指數分佈、拉普拉斯分佈

期望值

期望值,也叫數學期望,是每次隨機結果的出現概率乘以其結果的總和。如果我們把每種結果的概率看作權重,那麼期望值就是所有結果的加權平均值。它在我們的生活中十分常見,例如計算多個數值的平均值,其實就是求期望值,只不過我們假設每個數值出現的概率是相同的。

在我看來,一個問題只要滿足兩個要素,我們就可以考慮使用期望值:

  • 第一個要素,在這個問題中可能出現不同的情況,而且各種情況的出現滿足了一定的概率分佈;
  • 第二個要素,每種情況都對應一個數值,這個數值代表了具體的應用含義。

那麼,對於連續型的隨機變量,這種期望值應該如何計算呢?我們需要使用下面的積分公式:

面積


21 | 概率基礎(下):聯合概率、條件概率和貝葉斯法則,這些概率公式究竟能做什麼?

聯合概率、條件概率和邊緣概率

解釋清楚了條件概率,我就可以列出概率、條件概率和聯合概率之間的“三角”關係了。簡單的說,聯合概率是條件概率和概率的乘積,採用通用的公式來表達就是:

貝葉斯定理

這就是非常經典的貝葉斯法則。爲什麼說經典呢?是因爲它有很多應用的場景,比如樸素貝葉斯,你可以多多熟悉一下這個公式。在這個公式中,還包含了先驗概率(Prior Probability)、似然函數(Likelihood)、邊緣概率(Marginal Probability)和後驗概率(Posterior Probability)的概念。

在這裏面,我們把 P(x) 稱爲先驗概率。之所以稱爲“先驗”,是因爲它是從數據資料統計得到的,不需要經過貝葉斯定理的推算。

P(y | x) 是給定 x 之後 y 出現的條件概率。在統計學中,我們也把 P(y | x) 寫作似然函數 L(x | y)。在數學裏,似然函數和概率是有區別的。概率是指已經知道模型的參數來預測結果,而似然函數是根據觀測到的結果數據,來預估模型的參數。不過,當 y 值給定的時候,兩者在數值上是相等的,在應用中我們可以不用細究。

另外,我們沒有必要事先知道 P(y)。P(y) 可以通過聯合概率 P(x, y) 計算邊緣概率得來,而聯合概率 P(x, y) 可以由 P(y|x) * P(x) 推出。針對離散型和連續型的邊緣概率推導分別如下:


最主要的應用場景:通過先驗概率,推導出後驗概率,這就是貝葉斯定理神奇的地方。

隨機變量之間的獨立性

說到多個隨機變量的聯合和條件概率,你可能會產生一個問題:這些隨機變量是否會相互影響呢?比如,性別和分數之間有怎樣的關係?性別是否會影響分數的概率分佈?

相互獨立會產生一些有趣的現象,剛剛我們提到:


另外,將 p(x | y) = p(x) 帶入貝葉斯公式,就可以得出:


22 | 樸素貝葉斯:如何讓計算機學會自動分類?

例子

在開始正式的內容之前,我想問你一個問題,你是如何區分蘋果、甜橙和西瓜的?

如何將原始信息轉化爲計算機能看懂的數據?

最常用的方式就是提取現實世界中的對象之屬性,並將這些轉化爲數字。

樸素貝葉斯的核心思想

貝葉斯定理的核心思想:用先驗概率和條件概率估計後驗概率

那具體到這裏的分類問題,我們該如何運用這個公式呢?爲了便於理解,我們可以將上述公式改寫成這樣:

其中,c 表示一個分類(class),f 表示屬性對應的數據字段(field)。如此一來,等號左邊的 P(c|f) 就是待分類樣本中,出現屬性值 f 時,樣本屬於類別 c 的概率。而等號右邊的 P(f|c) 是根據訓練數據統計,得到分類 c 中出現屬性 f 的概率。P©是分類 c 在訓練數據中出現的概率,P(f) 是屬性 f 在訓練樣本中出現的概率。

看到這裏,你可能要問了,這裏的貝葉斯公式只描述了單個屬性值屬於某個分類的概率,可是我們要分析的水果每個都有很多屬性啊,這該怎麼辦呢?

別急,樸素貝葉斯在這裏就要發揮作用了。這是基於一個簡單假設建立的一種貝葉斯方法,並假定數據對象的不同屬性對其歸類影響時是相互獨立的。此時若數據對象 o 中同時出現屬性 fi 與 fj,則對象 o 屬於類別 c 的概率就是這樣:

對於出現的 0.00 概率,在做貝葉斯公式中的乘積計算時,會出現結果爲 0 的情況,因此我們通常取一個比這個數據集裏最小統計概率還要小的極小值,來代替“零概率”。比如,我們這裏取 0.01。在填充訓練數據中從來沒有出現過的屬性值的時候,我們就會使用這種技巧,我們給這種技巧起個名字就叫作平滑(Smoothing)。

你可能已經注意到了,這幾個公式裏的概率乘積通常都非常小,在物品的屬性非常多的時候,這個乘積可能就小到計算機無法處理的地步。因此,在實際運用中,我們還會採用一些數學手法進行轉換(比如取 log 將小數轉換爲絕對值大於 1 的負數),原理都是一樣的。

內容比較多,我稍微總結一下。樸素貝葉斯分類主要包括這幾個步驟:

  • 準備數據:針對水果分類這個案例,我們收集了若干水果的實例,並從水果的常見屬性入手,將其轉化爲計算機所能理解的數據。這種數據也被稱爲訓練樣本
  • 建立模型:通過手頭上水果的實例,我們讓計算機統計每種水果、屬性出現的先驗概率,以及在某個水果分類下某種屬性出現的條件概率。這個過程也被稱爲基於樣本的訓練
  • 分類新數據:對於一顆新水果的屬性數據,計算機根據已經建立的模型進行推導計算,得到該水果屬於每個分類的概率,實現了分類的目的。這個過程也被稱爲預測

樸素貝葉斯分類 VS 其他分類算法

  • KNN 最近鄰相比,樸素貝葉斯需要更多的時間進行模型的訓練,但是它在對新的數據進行分類預測的時候,通常效果更好、用時更短。
  • 決策樹相比,樸素貝葉斯並不能提供一套易於人類理解的規則,但是它可以提供決策樹通常無法支持的模糊分類(一個對象可以屬於多個分類)。
  • SVM 支持向量機相比,樸素貝葉斯無法直接支持連續值的輸入。所以,在前面的案例中,我將連續值轉化成了離散值,便於樸素貝葉斯進行處理。

應用場景

如果一個分類的應用場景中,待分類對象的屬性值大部分都是離散的(或者很容易轉化爲離散的)、需要支持模糊分類,並且需要快速可靠的實時分類,那麼這種場景通常就非常適合使用樸素貝葉斯方法。


23 | 文本分類:如何區分特定類型的新聞?

文本分類系統的基本框架

基於自然語言的預處理

和之前的水果案例相比,新聞這種文本數據最大的區別在於,它包含了大量的自然語言。那麼如何讓計算機理解自然語言呢?我們的計算機體系沒有思維,要理解人類的語言在現階段是不現實的。但是,我們仍然可以對自然語言進行適當的處理,將其變爲機器所能處理的數據。

首先,我們要知道,文本的的重要屬性是什麼,這樣我們才能提取出它的特徵。怎麼才能知道哪些屬性是重要的呢?

我舉個例子,假如說,有人給你一篇幾千字的文章,讓你在 10 秒鐘之內說出文章大意,你會怎麼辦?我想大部分人的解決方案是“找關鍵詞”!沒錯,我們也可以交給計算機用同樣的辦法。而計算機處理文本的基本單位就是字和單詞,這就是人們最常用的方法:詞袋(Bag of words)模型

這種模型會忽略文本中的詞語出現的順序以及相應的語法,將整篇文章僅僅看做是一個大量單詞的組合。文本中每個詞的出現都是獨立的,不依賴於其他詞的出現情況。講到這裏,你有沒有發現在詞包模型中,所有單詞相互之間是獨立的,這個假設和樸素貝葉斯模型的獨立假設是不是一致呀?

沒錯!這裏我們就可以很巧妙地將樸素貝葉斯和文本處理結合起來了。不過先不要急,我們還要掌握一些方法,才能將文本中的長篇大論處理成關鍵詞。

  • 分詞

介紹兩種目前比較主流的分詞模型,你只需要瞭解就行。

第一種是基於字符串匹配。其實就是掃描字符串。如果發現字符串的子串和詞相同,就算匹配成功。匹配規則通常是“正向最大匹配”“逆向最大匹配”“長詞優先”。這些算法的優點是隻需使用基於字典的匹配,因此計算複雜度低;缺點是處理歧義詞效果不佳。

第二種是基於統計和機器學習。這類分詞基於人工標註的詞性和統計特徵,對中文進行建模。訓練階段,根據標註好的語料對模型參數進行估計。 在分詞階段再通過模型計算各種分詞出現的概率,將概率最大的分詞作爲最終結果。常見的序列標註模型有隱馬爾科夫模型(HMM,Hidden Markov Model)和條件隨機場(CRF,Conditional Random Field),我們後面章節會講到,這裏我先不展開。

  • 取詞幹和歸一化

我們剛纔說了,相對中文而言,英文完全不需要考慮分詞。不過它也有中文不具有的單複數、各種時態,因此它需要考慮取詞幹(stemming)。取詞幹的目標就是爲了減少詞的變化形式,將派生詞轉化爲基本形式。

最後,我們還要考慮大小寫轉化和多種拼寫(例如 color 和 colour)這樣的統一化,我們把這種做法稱爲歸一化

  • 停用詞

無論何種語言,都會存在一些不影響(或基本不影響)相關性的詞。有的時候乾脆可以指定一個叫停用詞(stop word)的字典,直接將這些詞過濾,不予以考慮。例如英文中的 a、an、the、that、is、good、bad 等。中文“的、個、你、我、他、好、壞”等。

如此一來,我們可以在基本不損失語義的情況下,減少數據文件的大小,提高計算機處理的效率。當然,也要注意停用詞的使用場景,例如用戶觀點分析,good 和 bad 這樣的形容詞反而成爲了關鍵。不僅不能過濾,反而要加大它們的權重。

  • 同義詞和擴展詞

不同的地域或者不同時代,會導致人們對於同樣的物品叫法也不同。例如,在中國北方“番茄“應該叫“西紅柿”,而臺灣地區將“菠蘿”稱爲“鳳梨”。對於計算機而言,需要意識到這兩個詞是等價的。添加同義詞就是一個很好的手段。

有了這樣的詞典,當看到文本中出現“番茄”關鍵詞的時候,計算機系統就會將其等同於“西紅柿”這個詞。有的時候我們還需要擴展詞。如果簡單地將 Dove 分別和多芬、德芙簡單地等價,那麼多芬和德芙這兩個完全不同的品牌也變成了同義詞,這樣做明顯是有問題的。那麼我們可以採用擴展關係,當系統看到文本中的“多芬”時將其等同於“Dove”,看到“德芙”時將其等同於“Dove”。但是看到“Dove”的時候並不將其等同於“多芬”或“德芙”。

通過詞包模型的假設,以及上述這些自然語言處理的方法,我們可以將整篇的文字,切分爲一個個的單詞,這些是表示文章的關鍵屬性。你不難發現,每個單詞可以作爲文章的屬性,而通過這些單詞的詞頻(出現的頻率),我們很容易進行概率的統計。下面我對分類的先驗概率、單詞的先驗概率、某個分類下某個單詞的條件概率分別給出了示例。

如果發現某些單詞從未在某個分類中出現,例如“航母”這個詞從未在“體育”和“娛樂”這兩個分類中出現。對於這種情況,我們可以使用平滑(smoothing)的技術,將其詞頻或條件概率設置爲一個極小的值。這裏,我設置了最小的詞頻,也就是 1。

運用樸素貝葉斯模型

在新聞分類中,o 就表示一篇文章,而c表示新聞的種類(包括政治、軍事、財經等等)。而屬性字段f就是我們從文檔集而建立的各種單詞。公式等號左邊的 P(c|f) 就是待分類新聞中,出現單詞 f 時,該新聞屬於類別 c 的概率。而等號右邊的 P(f|c) 是根據訓練數據統計,得到分類 c 中出現單詞 f 的概率。P( c ) 是分類 c 在新聞訓練數據中出現的概率,P(f) 是單詞 f 在訓練樣本中出現的概率。

這裏需要注意一個很實際的問題:文章的篇幅很長,常常會導致非常多的 P(f|c) 連續乘積。而 P(f|c) 通常是非常小的數值,因此最後的乘積將快速趨近於 0 以至於計算機無法識別。這裏可以使用我們之前提到的一些數學手法進行轉換,比如取 log,將小數轉換爲絕對值大於 1 的負數。這樣的轉換,雖然會改變每篇文章屬於每個分類的概率之絕對值,但是並不會改變這些概率的相對大小。

總結

在這一講中,我講了一個文本分類系統的幾個關鍵步驟,其中最重要的是自然語言的處理和分類模型的訓練和預測。

自然語言的處理是關鍵的預處理步驟,它將文本轉換成計算機所能處理的數據。常見方法包括中文分詞,英文的取詞幹和歸一化,還有適用於各種語言的停用詞、同義詞和擴展詞等。如果不考慮這些詞出現的先後順序,以及表達的深層次語義,那麼我們就可以使用詞包的方法,將大段的文章和語句轉化成單詞所組成的集合。之後,我們就能統計每個單詞屬於每個分類的條件概率,以及分類和單詞的先驗概率。

一旦將文章表示爲單詞的集合,我們就會發現,樸素貝葉斯的模型非常適合文章的分類。因爲所有單詞出現的詞頻都是離散值,非常適合統計概率。此外,許多新聞之類的文章本身也是跨了多個領域,因此有可能屬於多個分類,樸素貝葉斯也能支持這點。我們針對“中國航母”這個短語進行了測試,發現其屬於“政治”和“軍事”分類的可能性最高。不過要注意的是,文章可能包含非常多的單詞,樸素貝葉斯模型中的連續乘積會導致過小的值,甚至計算機都無法處理。爲了避免這種情況,我們可以使用 log 的數學變換。


24 | 語言模型:如何使用鏈式法則和馬爾科夫假設簡化概率模型?

語言模型是什麼?

  • 鏈式法則

鏈式法則是概率論中一個常用法則。它使用一系列條件概念率和邊緣概率,來推導聯合概率,我用一個公式來給你看看它的具體表現形式。

其中,x1 到 xn 表示了 n 個隨機變量。

  • 馬爾科夫假設

理解了鏈式法則,我們再來看看馬爾可夫假設。這個假設的內容是:任何一個詞 wi 出現的概率只和它前面的 1 個或若干個詞有關。基於這個假設,我們可以提出多元文法(Ngram)模型。Ngram 中的“N”很重要,它表示任何一個詞出現的概率,只和它前面的 N-1 個詞有關。

我以二元文法模型爲例,來給你解釋。按照剛纔的說法,二元文法表示,某個單詞出現的概率只和它前面的 1 個單詞有關。也就是說,即使某個單詞出現在一個很長的句子中,我們也只需要看前面那 1 個單詞。用公式來表示出來就是這樣:

如果是三元文法,就說明某個單詞出現的概率只和它前面的 2 個單詞有關。即使某個單詞出現在很長的一個句子中,它也只看相鄰的前 2 個單詞。用公式來表達就是這樣:

你也許會好奇,那麼一元文法呢?按照字面的意思,就是每個單詞出現的概率和前面 0 個單詞有關。這其實說明,每個詞的出現都是相互獨立的。用公式來表達就是這樣的:

弄明白鏈式法則和馬爾科夫假設之後,我們現在來看語言模型。

如何解決 0 概率和高複雜度的問題呢?馬爾科夫假設和多元文法模型能幫上大忙了。如果我們使用三元文法模型,上述公式可以改寫爲:

語言模型的應用

  • 機器翻譯
  • 語音識別
  • 中文分詞
  • 信息檢索

信息檢索

信息檢索很關心的一個問題就是相關性,也就是說,給定一個查詢,哪篇文檔是更相關的呢?爲了解決相關性問題,布爾模型和向量空間檢索模型都是從查詢的角度出發,觀察查詢和文檔之間的相似程度,並以此來決定如何找出相關的文檔。這裏的“相似程度”,你可以理解爲查詢和文檔長得有多像。那麼,語言模型如何來刻畫查詢和文檔之間的相關度呢?

通過我們手頭的文檔集合,並不能直接獲得 P(d|q)。好在我們已經學習過了貝葉斯定理,通過這個定理,我們可以將 P(d|q) 重寫如下:

而語言模型,爲我們解決了如何計算 P(q|d) 的問題,讓 k1,k2,…,kn 表示查詢 q 裏包含的 n 個關鍵詞。那麼根據之前的鏈式法則公式,可以重寫爲這樣:

爲了提升效率,我們也使用馬爾科夫假設和多元文法。假設是三元文法,那麼我們可以寫成這樣:

最終,當用戶輸入一個查詢 q 之後,對於每一篇文檔 d,我們都能獲得 P(d|q) 的值。根據每篇文檔所獲得的 P(d|q) 這個值,由高到低對所有的文檔進行排序。這就是語言模型在信息檢索中的常見用法。

中文分詞

多種分詞

產生歧義

那麼這種情況下,語言模型能爲我們做什麼呢?我們知道,語言模型是基於大量的語料來統計的,所以我們可以使用這個模型來估算,哪種情況更合理。

假設整個文檔集合是 D,要分詞的句子是 s,分詞結果爲 w1, … wn,那麼我們可以求 P(s) 的概率爲:

請注意,在信息檢索中,我們關心的是每篇文章產生一個句子(也就是查詢)的概率,而這裏可以是整個文檔集合 D 產生一個句子的概率。

根據鏈式法則和三元文法模型,那麼上面的式子可以重寫爲:

也就是說,語言模型可以幫我們估計某種分詞結果,在文檔集合中出現的概率。但是由於不同的分詞方法,會導致 w1 到 wn 的不同,因此就會產生不同的 P(s)。接下來,我們只要取最大的 P(s),並假設這種分詞方式是最合理的,就可以在一定程度上解決歧義。我們可以使用這個公式來求解:

其中,Wi 表示第 i 種分詞方法。

小結

  • 第一,使用聯合概率,條件概率和邊緣概率的“三角”關係,進行相互推導。鏈式法則就是很好的體現。
  • 第二,使用馬爾科夫假設,把受較多隨機變量影響的條件概率,簡化爲受較少隨機變量影響的條件概率,甚至是邊緣概率。
  • 第三,使用貝葉斯定理,通過先驗概率推導後驗概率。在信息檢索中,給定查詢的情況下推導文檔的概率,就需要用到這個定理。

25 | 馬爾科夫模型:從PageRank到語音識別,背後是什麼模型在支撐?

馬爾科夫模型

在介紹語言模型的時候,我們提到了馬爾科夫假設,這個假設是說,每個詞出現的概率和之前的一個或若干個詞有關。我們換個角度思考就是,每個詞按照一定的概率轉移到下一個詞。怎麼個轉移呢?我來解釋一下。如果把詞抽象爲一個狀態,那麼我們就可以認爲,狀態到狀態之間是有關聯的。前一個狀態有一定的概率可以轉移到到下一個狀態。如果多個狀態之間的隨機轉移滿足馬爾科夫假設,那麼這類隨機過程就是一個馬爾科夫隨機過程。而刻畫這類隨機過程的統計模型,就是馬爾科夫模型(Markov Model)。

前面講多元文法的時候,我提到了二元文法、三元文法。對於二元文法來說,某個詞出現的概率只和前一個詞有關。對應的,在馬爾科夫模型中,如果一個狀態出現的概率只和前一個狀態有關,那麼我們稱它爲一階馬爾科夫模型或者馬爾科夫鏈。對應於三元、四元甚至更多元的文法,我們也有二階、三階等馬爾科夫模型。

  • 馬爾科夫模型 - 馬爾科夫鏈

  • PageRank 鏈接分析算法

Google 公司最引以爲傲的 PageRank 鏈接分析算法,它的核心思想就是基於馬爾科夫鏈。這個算法假設了一個“隨機衝浪者”模型,衝浪者從某張網頁出發,根據 Web 圖中的鏈接關係隨機訪問。在每個步驟中,衝浪者都會從當前網頁的鏈出網頁中隨機選取一張作爲下一步訪問的目標。在整個 Web 圖中,絕大部分網頁節點都會有鏈入和鏈出。那麼衝浪者就可以永不停歇地衝浪,持續在圖中走下去。

在隨機訪問的過程中,越是被頻繁訪問的鏈接,越是重要。可以看出,每個節點的 PageRank 值取決於 Web 圖的鏈接結構。假如一個頁面節點有很多的鏈入鏈接,或者是鏈入的網頁有較高的被訪問率,那麼它也將會有更高的被訪問概率。

那麼,PageRank 的公式和馬爾科夫鏈有什麼關係呢?我先給你看一張 Web 的拓撲圖。

其中 A、B、C 等結點分別代表了頁面,而結點之間的有向邊代表了頁面之間的超鏈接。看了這張圖中,你是不是覺得 Web 拓撲圖和馬爾科夫鏈的模型圖基本上是一致的?我們可以假設每張網頁就是一個狀態,而網頁之間的鏈接表明了狀態轉移的方向。這樣,我們很自然地就可以使用馬爾科夫鏈來刻畫“隨機衝浪者”。

另外,在最基本的 PageRank 算法中,我們可以假設每張網頁的出度是 n,那麼從這張網頁轉移到任何下一張相連網頁的概率都是 1/n ,因此這個轉移的概率只和當前頁面有關,滿足一階馬爾科夫模型的假設。我在之前的拓撲結構中添加了轉移的概率。

PageRank 在標準的馬爾科夫鏈上,引入了隨機的跳轉操作,也就是假設衝浪者不按照 Web 圖的拓撲結構走下去,只是隨機挑選了一張網頁進行跳轉。這樣的處理是類比人們打開一張新網頁的行爲,也是符合實際情況的,避免了信息孤島的形成。最終,根據馬爾科夫鏈的狀態轉移和隨機跳轉,可以得到如下的 PageRank 公式。

其中,pi 表示第 i 張網頁,Mi 是 pi 的入鏈接集合,pj 是 Mi 集合中的第 j 張網頁。PR(pj) 表示網頁 pj 的 PageRank 得分,L(pj)表示網頁 pj 的出鏈接數量,1/L(pj) 就表示從網頁 pj 跳轉到 pi 的概率。α 是用戶不進行隨機跳轉的概率,N 表示所有網頁的數量。

從最簡單的馬爾科夫鏈,到多階的馬爾科夫模型,它們都可以刻畫基於馬爾科夫假設的隨機過程,例如概率語言模型中的多元文法和 PageRank 這類鏈接分析算法。但是,這些模型都是假設每個狀態對我們都是已知的,比如在概率語言模型中,一個狀態對應了單詞“上學”,另一個狀態對應了單詞“書包”。可是,有沒有可能某些狀態我們是未知的呢?下面我們就來詳細說說這種情況。

隱馬爾科夫模型

在某些現實的應用場景中,我們是無法確定馬爾科夫過程中某個狀態的取值的。這種情況下,最經典的案例就是語音識別。使用概率對語音進行識別的過程,和語言模型類似,因此我們可以把每個等待識別的詞對應爲馬爾科夫過程中的一個狀態。不過,語音識別所面臨的困難更大。爲什麼呢?你先看看下面這個句子。這個句子裏全都是拼音,你能看出它表示什麼意思嗎?

總結

馬爾科夫模型考慮了 n 個狀態之間的轉移及其對應的關係。這個狀態是比較抽象的含義,在不同的應用領域代表不同的含義。在概率語言模型中,狀態表示不同的詞,狀態之間的轉移就代表了詞按照一定的先後順序出現。在 PageRank 這種鏈接分析中,狀態表示不同的網頁,狀態之間的轉移就代表了人們在不同網頁之間的跳轉。

在馬爾科夫模型中,我們知道了每種狀態及其之間轉移的概率,然後求解序列出現的概率。然而,有些現實的場景更爲複雜,比如說我們觀測到的不是狀態本身,而是狀態按照一定概率分佈所產生的輸出。針對這種情況,隱馬爾科夫模型提出了一種兩層的模型,同時考慮了狀態之間轉移的概率和狀態產生輸出的概率,爲語音識別、手寫識別、機器翻譯等提供了可行的解決方案。

隱馬爾科夫模型需要回答的最主要問題是:給定一個模型和某個特定的輸出序列,如何找到最可能產生這個輸出的狀態序列?在本節中,我使用了“項目開發時間”這個例子展示隱馬爾科夫模型是如何工作的。不過這個例子很簡單,我只比較了兩種可能性。但是,實際中可能性是非常多的,如果我們使用窮舉法,那麼複雜度一定很高。

我們可以把兩層的模型看作圖結構。其中,狀態和輸出是結點,轉移和輸出關係是邊,相應的概率是邊的權重,這個時候我們就可以對 Dijkstra 算法稍加修改,來找出權重乘積最大的最優路徑,提升查找的效率。我們還可以利用狀態序列之間存在的先後關係,使用基於動態規劃的維特比(Viterbi)算法來找出最優路徑。

回顧 PageRank 鏈接分析算法

PageRank 是基於馬爾科夫鏈的。它假設了一個“隨機衝浪者”模型,衝浪者從某張網頁出發,根據 Web 圖中的鏈接關係隨機訪問。在每個步驟中,衝浪者都會從當前網頁的鏈出網頁中,隨機選取一張作爲下一步訪問的目標。此外,PageRank 還引入了隨機的跳轉操作,這意味着衝浪者不是按 Web 圖的拓撲結構走下去,只是隨機挑選了一張網頁進行跳轉。

基於之前的假設,PageRank 的公式定義如下:

其中,pi 表示第 i 張網頁,Mi 是 pi 的入鏈接集合,pj 是 Mi 集合中的第 j 張網頁。PR(pj) 表示網頁 pj 的 PageRank 得分,L(pj)表示網頁 pj 的出鏈接數量,1/L(pj) 就表示從網頁 pj 跳轉到 pi 的概率。α 是用戶不進行隨機跳轉的概率,N 表示所有網頁的數量。

PageRank 的計算是採樣迭代法實現的:一開始所有網頁結點的初始 PageRank 值都可以設置爲某個相同的數,例如 1,然後我們通過上面這個公式,得到每個結點新的 PageRank 值。每當一張網頁的 PageRank 發生了改變,它也會影響它的出鏈接所指向的網頁,因此我們可以再次使用這個公式,循環地修正每個網頁結點的值。由於這是一個馬爾科夫過程,所以我們能從理論上證明,所有網頁的 PageRank 最終會達到一個穩定的數值。整個證明過程很複雜,這裏我們只需要知道這個迭代計算的過程就行了。

簡化 PageRank 公式

那麼,這個計算公式和矩陣操作又有什麼聯繫呢?爲了把問題簡化,我們暫時不考慮隨機跳轉的情況,而只考慮用戶按照網頁間鏈接進行隨機衝浪。那麼 PageRank 的公式就簡化爲:

我們再來對比看看矩陣點乘的計算公式。

以上兩個公式在形式上是基本一致的。因此,我們可以把 Σ(PR(pj)/L(pj)) 的計算,分解爲兩個矩陣的點乘。一個矩陣是當前每張網頁的 PageRank 得分,另一個矩陣就是鄰接矩陣。所謂鄰接矩陣,其實就是表示圖結點相鄰關係的矩陣。

考慮隨機跳轉

我們把 Σ(PR(pj)/L(pj)) 部分用 A 表示,那麼完整的 PageRank 公式就可以表示爲:

於是,我們可以把上述公式分解爲如下兩個矩陣的點乘

我們前面提到,PageRank 算法需要迭代式計算。爲了避免計算後的數值越來越大甚至溢出,我們可以進行歸一化處理,保證所有結點的數值之和爲 1。

接下來,我們只需要再重複之前的步驟,直到每個結點的值趨於穩定就可以了。

使用 Python 進行實現

說到這裏,我已經把如何把整個 PageRank 的計算,轉換成多個矩陣的點乘這個過程講完了。這樣一來,我們就可以利用 Python 等科學計算語言提供的庫,來完成基於 PageRank 的鏈接分析。

總結

我們可以把向量看作一維數組,把矩陣看作二維數組。矩陣的點乘,是由若干個向量的點乘組成的,所以我們可以通過矩陣的點乘操作,挖掘多組向量兩兩之間的關係。

今天我們講了矩陣的點乘操作在 PageRank 算法中的應用。通過表示網頁的鄰接二元關係,我們可以使用矩陣來計算 PageRank 的得分。在這個應用場景下,矩陣點乘體現了多個馬爾科夫過程中的狀態轉移。

矩陣點乘和其他運算操作,還可以運用在很多其他的領域。例如,我在上一節介紹 K 均值聚類算法時,就提到了需要計算某個數據點向量、其他數據點向量之間的距離或者相似度,以及使用多個數據點向量的平均值來獲得質心點的向量,這些都可以通過矩陣操作來完成。

另外,在協同過濾的推薦中,我們可以使用矩陣點乘,來實現多個用戶或者物品之間的相似程度,以及聚集後的相似程度所導致的最終推薦結果。


26 | 信息熵:如何通過幾個問題,測出你對應的武俠人物?

例子

問卷調查

  • 測測你是哪個武俠人物
  • 測星座
  • 測運勢

這種心理或者性格測試的題目是怎麼設計的嗎?

什麼是信息熵?

  • 隨機變量

x

  • 概率

P(x) 表示 x 出現的概率

  • 信息量

H(x)=−log(P(x))

信息量是信息論中的一個度量,簡單來說就是,當我們觀察到某個隨機變量的具體值時,接收到了多少信息。

而我們接收到的信息量跟發生事件的概率有關。事情發生的概率越大,產生的信息量越小;事情發生的概率越小,產生的信息量越大。

  • 熵(混亂度)

某個隨機變量的信息量之期望。

從集合和分組的角度來說,如果一個集合裏的元素趨向於落在同一分組裏,那麼告訴你某個元素屬於哪個分組的信息量就越小,整個集合的熵也越小,換句話說,整個集合就越“純淨”。相反,如果一個集合裏的元素趨向於分散在不同分組裏,那麼告訴你某個元素屬於哪個分組的信息量就越大,整個集合的熵也越大,換句話說,整個集合就越“混亂”

一個集合中所包含的分組越多、元素在這些分組裏分佈得越均勻,熵值也越大。而熵值表示了純淨的程度,或者從相反的角度來說,是混亂的程度。

  • 多個小集合的整體的熵

好了,你已經知道單個集合的熵是如何計算的了。那麼,如果將一個集合劃分成多個更小的集合之後,又該如何根據這些小集合,來計算整體的熵呢?之前我們提到了信息量和熵具有加和的性質,所以對於包含多個集合的更大集合,它的信息量期望值是可以通過每個小集合的信息量期望值來推算的。具體來說,我們可以使用如下公式:

其中,T 表示一種劃分,Pv 表示劃分後其中某個小集合,Entropy(Pv)表示某個小集合的熵, 而 |Pv|/|P| 表示某個小集合出現的概率。所以這個公式其實就表示,對於多個小集合而言,其整體的熵等於各個小集合之熵的加權平均。而每個小集合的權重是其在整體中出現的概率。

什麼是信息增益?(區分能力)

如果我們將劃分前後的整體熵做個對比,你會發現劃分後的整體熵要小於劃分之前的整體熵。這是因爲每次劃分,都可能將不同分組的元素區分開來,降低劃分後每個小集合的混亂程度,也就是降低它們的熵。我們將劃分後整體熵的下降,稱爲信息增益(Information Gain)。如果劃分後整體熵下降的越多,信息增益就越大。我列出公式便於你的理解。

其中 T 表示當前選擇的特徵,Entropy§ 表示選擇特徵 T 之前的熵,Entropy(Pv)表示特徵 T 取值爲 v 分組的熵。減號後面的部分表示選擇 T 做決策之後,各種取值加權平均後整體的熵。Gain(P,T) 表示兩個熵值之差,越大表示信息增益越多,應該選擇這維特徵 T。

我們把這個概念放到咱們的小遊戲裏就是,如果一個測試問題能夠將來自不同分組的人物儘量的分開,也就是該劃分對應的信息增益越高,那麼我們就認爲其區分能力越高,提供的信息含量也越多。好,說到這裏,讓我們從遊戲的最開始出發,比較一下有關性別和智商的兩個測試題。

信息增益和信息熵是緊密相關的。如果說信息熵衡量了某個狀態下,每個分組的純淨程度或者說混亂程度,那麼信息增益就是比較了不同狀態下,信息熵的差異程度。

總結

這一講中,我們從一個有趣的人物性格測試開始,探討了如何高效率地進行問卷調查。其中主要包含了兩個要點:信息熵和信息增益。熵的計算是基於集合內各組元素分佈的概率來進行的。而信息增益是集合劃分前後整體熵的差值。對某個集合進行劃分,都會將其中元素細分到更小的集合,而每個細分的集合純淨度就會提高,整體熵就會下降,其中下降的部分就是信息增益。

瞭解信息熵和信息增益的定義之後,我們可以用它們來安排測試問題的先後順序。其核心的思路是,利用信息增益找出區分力最強的測試題。如果一道測試題可以將來自不同分組的元素分隔開來,那麼就說它是有區分力的。如果分隔後,每個細分的集合其熵越趨近於 0,那麼我們說這個測試題的區分力越強。


27 | 決策樹:信息增益、增益比率和基尼指數的運用

如何通過信息熵挑選合適的問題?

爲了實現一個更簡短的問卷,你也許很自然地就想到,每次選擇問題的時候,我們可以選擇信息增益最高的問題,這樣熵值下降得就最快。這的確是個很好的方法。我們來試一試。

從這個圖可以看出來,對於每種人物的判斷,我們至多需要問 3 個問題,沒有必要問全 5 個問題。比如,對於人物 J 和 C,我們只需要問 2 個問題。假設讀者屬於 10 種武俠人物的概率是均等的,那麼我們就可以利用之前介紹的知識,來計算讀者需要回答的問題數量之期望值。每種人物出現的概率是 0.1,8 種人物需要問 3 個問題,2 種人物需要問 2 個問題,那麼回答問題數的期望值是 0.8 * 3 + 0.2 * 2 = 2.8(題)。

好了,現在我們總結一下,如何才能進行高效的問卷調查。最核心的思想是,根據當前的概率分佈,挑選在當前階段區分能力更強的那些問題。具體的步驟有三個。

  • 第一步,根據分組中的人物類型,爲每個集合計算信息熵,並通過全部集合的熵之加權平均,獲得整個數據集的熵。注意,一開始集合只有一個,並且包含了所有的武俠人物。
  • 第二步,根據信息增益,計算每個問卷題的區分能力。挑選區分能力最強的題目,並對每個集合進行更細的劃分。
  • 第三步,有了新的劃分之後,回到第一步,重複第一和第二步,直到沒有更多的問卷題,或者所有的人物類型都已經被區分開來。這一步也體現了遞歸的思想。

其實,上述這個過程就體現了訓練決策樹(Decision Tree)的基本思想。決策樹學習屬於歸納推理算法之一,適用於分類問題。在前面介紹樸素貝葉斯的時候,我說過,分類算法主要包括了建立模型和分類新數據兩個階段。決定問卷題出現順序的這個過程,其實就是建立決策樹模型的過程。

ID3

隨着機器學習的快速發展,人們也提出了不少優化版的決策樹。採用信息增益來構建決策樹的算法被稱爲ID3(Iterative Dichotomiser 3,迭代二叉樹 3 代)。但是這個算法有一個缺點,它一般會優先考慮具有較多取值的特徵,因爲取值多的特徵會有相對較大的信息增益。這是爲什麼呢?

C4.5 算法

你仔細觀察一下信息熵的定義,就能發現背後的原因。更多的取值會把數據樣本劃分爲更多更小的分組,這樣熵就會大幅降低,信息增益就會大幅上升。但是這樣構建出來的樹,很容易導致機器學習中的過擬合現象,不利於決策樹對新數據的預測。爲了克服這個問題,人們又提出了一個改進版,C4.5 算法

這個算法使用信息增益率(Information Gain Ratio)來替代信息增益,作爲選擇特徵的標準,並降低決策樹過擬合的程度。信息增益率通過引入一個被稱作分裂信息(Split Information)的項來懲罰取值較多的特徵,我把相應的公式給你列出來了。

其中,訓練數據集 P 通過屬性 T 的屬性值,劃分爲 n 個子數據集,|Pi| 表示第 i 個子數據集中樣本的數量,|P| 表示劃分之前數據集中樣本總數量。 這個公式看上去和熵很類似,其實並不相同。

熵計算的時候考慮的是,集合內數據是否屬於同一個類,因此即使集合數量很多,但是集合內的數據如果都是來自相同的分類(或分組),那麼熵還是會很低。而這裏的分裂信息是不同的,它只考慮子集的數量。如果某個特徵取值很多,那麼相對應的子集數量就越多,最終分裂信息的值就會越大。正是因爲如此,人們可以使用分裂信息來懲罰取值很多的特徵。具體的計算公式如下:

其中 Gain(P,T)是數據集 P 使用特徵 T 之後的信息增益,GainRatio(P,T) 是數據集 P 使用特徵 T 之後的信息增益率。

CART 算法

另一種常見的決策樹是 CART 算法(Classification and Regression Trees,分類與迴歸樹)。這種算法和 ID3、C4.5 相比,主要有兩處不同:

  • 在分類時,CART 不再採用信息增益或信息增益率,而是採用基尼指數(Gini)來選擇最好的特徵並進行數據的劃分;
  • 在 ID3 和 C4.5 決策樹中,算法根據特徵的屬性值劃分數據,可能會劃分出多個組。而 CART 算法採用了二叉樹,每次把數據切成兩份,分別進入左子樹、右子樹。

當然,CART 算法和 ID3、C4.5 也有類似的地方。首先,CART 中每一次迭代都會降低基尼指數,這類似於 ID3、C4.5 降低信息熵的過程。另外,基尼指數描述的也是純度,與信息熵的含義相似。我們可以用下面這個公式來計算每個集合的純度。

其中,n 爲集合 P 中所包含的不同分組(或分類)數量。如果集合 P 中所包含的不同分組越多,那麼這個集合的基尼指數越高,純度越低。

然後,我們需要計算整個數據集的基尼指數。

其中,m 爲全集使用特徵 T 劃分後,所形成的子集數量。Pj 爲第 j 個集合。

無論是何種決策樹算法,來自信息論的幾個重要概念:信息熵、信息增益、信息增益率、基尼指數都起到了重要的作用。如果你能很好的學習並運用這些概念,那麼決策樹這種類型的算法就不難理解了。

小結

通過這兩節的介紹,我想你對信息熵、信息增益、基尼指數等信息論的概念,以及基於這些概念的決策樹分類算法應該有了一定了解。決策樹算法的優勢在於,容易理解和實現。此外,對於通過樣本訓練所得的樹結構,其每個結點都是基於某個數據特徵的判定,對於我們的閱讀和解釋來說都是很方便的。

當然,決策樹也有不足。之前我已經提到,這類算法受訓練樣本的影響很大,比較容易過擬合。在預測階段,如果新的數據和原來的訓練樣本差異較大,那麼分類效果就會比較差。爲此人們也提出了一些優化方案,比如剪枝和隨機森林。


28 | 熵、信息增益和卡方:如何尋找關鍵特徵?

特徵選擇:

  • 信息熵
  • 卡方檢驗

什麼是特徵選擇?

在編程領域中,機器學習已經有了十分廣泛的應用,它主要包括監督式學習(Supervised Learning)和非監督式的學習(Unsupervised Learning)。監督式學習,是指通過訓練資料學習並建立一個模型,並依此模型推測新的實例,主要包括分類(Classification)和迴歸(Regression)。

“特徵”(Feature),是機器學習非常常用的術語,它其實就是可用於模型擬合的各種數據。前面講樸素貝葉斯分類時,我解釋瞭如何把現實世界中水果的各類特徵轉化爲計算機所能理解的數據,這個過程其實就是最初級的特徵工程。當然,特徵工程遠不止原始特徵到計算機數據的轉化,還包括特徵選擇、缺失值的填補和異常值的去除等等。這其中非常重要的一步就是特徵選擇。

利用信息熵進行特徵選擇

那麼,我們怎麼能知道哪些特徵是更重要的呢?對於分類問題,我們更關心的是如何正確地把一篇文章劃分到正確的分類中。一個好的特徵選擇,應該可以把那些對分類有價值的信息提取出來,而過濾掉那些對分類沒有什麼價值的信息。既然如此,我們能不能充分利用分類標籤來進行挑選呢?答案是肯定的。前兩節,我描述了信息熵信息增益的工作原理。這裏,我就可以使用它們來進行特徵選擇。

如果一個特徵,經常只在某個或少數幾個分類中出現,而很少在其他分類中出現,那麼說明這個特徵具有較強的區分力,它的出現很可能預示着整個數據屬於某個分類的概率很高或很低。

這個時候,對於一個特徵,我們可以看看包含這個特徵的數據,是不是隻屬於少數幾個類。舉個例子,出現“電影”這個詞的文章,經常出現在“娛樂”這個分類中,而很少出現在“軍事”“政治”等其他分類中。

如果熵值很低,說明包含這個特徵的數據只出現在少數分類中,對於分類的判斷有價值。計算出每個特徵所對應的數據集之熵,我們就可以按照熵值由低到高對特徵進行排序,挑選出排列靠前的特徵。

當然,這個做法只考慮了單個特徵出現時,對應數據的分類情況,而並沒有考慮整個數據集的分類情況。比如,雖然出現“電影”這個詞的文章,經常出現在“娛樂”這個分類中,很少出現在其他分類中,但是可能整個樣本數據中,“娛樂”這個分類本來就已經佔絕大多數,所以“電影”可能並非一個很有信息含量的特徵。

爲了改進這一點,我們可以借用決策樹中信息增益的概念。如果基於某個特徵的劃分,所產生的信息增益越大,說明這個特徵對於分類的判斷越有價值。所以,我們可以爲計算基於每個特徵的劃分,所產生的信息增益,然後按照增益值由高到低對特徵進行排序,挑選出排列靠前的特徵

利用卡方檢驗進行特徵選擇

在統計學中,我們使用卡方檢驗來檢驗兩個變量是否相互獨立。把它運用到特徵選擇,我們就可以檢驗特徵與分類這兩個變量是否獨立。如果兩者獨立,證明特徵和分類沒有明顯的相關性,特徵對於分類來說沒有提供足夠的信息量。反之,如果兩者有較強的相關性,那麼特徵對於分類來說就是有信息量的,是個好的特徵。爲了檢驗獨立性,卡方檢驗考慮了四種情況的概率:P(fi,cj)、P(fi¯,cj¯)、P(fi,cj¯)、P(fi¯,cj)。

其中,N 表示數據的總個數。通過這個公式,你可以看到,如果一個特徵和分類的相關性很高,無論是正向相關還是負向相關,那麼正向相關和負向相關的差值就很大,最終計算的值就很高。最後,我們就可以按照卡方檢驗的值由高到低對特徵進行排序,挑選出排列靠前的特徵。


29 | 歸一化和標準化:各種特徵如何綜合纔是最合理的?

特徵變換:

  • 歸一化
  • 標準化

在機器學習領域裏,如何使用統計裏的數據分佈來進行特徵值的轉換。

  • 第一點,爲什麼有時候需要轉換特徵值?因爲不同類型的特徵取值範圍不同,分佈也不同,相互之間沒有可比性。因此在線性迴歸中,通過這些原始值分析得到的權重,並不能代表每個特徵實際的重要性。
  • 第二點,如何使用歸一化進行特徵值轉換?這裏的歸一化是指使用特徵取值範圍中的最大值和最小值,把原始值轉換爲 0 到 1 之間的值。這樣處理的好處在於簡單易行,便於理解。不過,它的缺點也很明顯,由於只考慮了最大最小值,因此很容易受到異常數據點的干擾。
  • 第三點,如何使用標準化進行轉換?經過標準化處理之後,每種特徵的取值都會變成一個標準正態分佈,以 0 爲均值,1 爲標準差。和歸一化相比,標準化使用了數據是正態分佈的假設,不容易受到過大或過小值的干擾。

30 | 統計意義(上):如何通過顯著性檢驗,判斷你的A/B測試結果是不是巧合?

A/B 測試

A/B 測試,簡單來說,就是爲同一個目標制定兩個或多個方案,讓一部分用戶使用 A 方案,另一部分用戶使用 B 方案,記錄下每個部分用戶的使用情況,看哪個方案產生的結果更好。這也意味着,通過 A/B 測試的方式,我們可以拿到使用多個不同方法之後所產生的多組結果,用於對比。

顯著性差異

第一,兩個分佈之間的差異。假設 A 分佈的均值小於 B 分佈,而兩者的方差一致,那麼 A 分佈隨機產生的數據有更高的概率小於 B 分佈隨機產生的數據。第二,採樣引起的差異,也就是說採樣數據不能完全體現整體的數據分佈。我在之前的圖中,用來自 A、B 兩組的 10 個數據展示了採樣所導致的誤差。

如果差異是第一個原因導致的,在統計學中我們就認爲這兩組“有顯著性差異”。如果差異是第二種原因導致的,我們就認爲這兩組“無顯著性差異”。可以看出來,顯著性差異(Significant Difference),其實就是研究多組數據之間的差異,是由於不同的數據分佈導致的,還是由於採樣的誤差導致的。通常,我們也把“具有顯著性差異”,稱爲“差異具有統計意義”或者“差異具有顯著性”。

這裏你還需要注意“差異具有顯著性”和“具有顯著差異”的區別。如前所說,“差異具有顯著性“表示不同的組很可能來自不同的數據分佈,也就是說多個組的數據來自同一分佈的可能性非常小。而“具有顯著差異”,是指差異的幅度很大,比如相差 100 倍。

不過,差異的顯著性和顯著差異沒有必然聯繫。舉兩個例子,比如說,兩個不同的數據分佈,它們的均值分別是 1 和 1.2,這兩個均值相差的絕對值很小,也就是沒有顯著差異,但是由於它們源自不同的數據分佈,所以差異是具有顯著性的。再比如說,來自同一個數據分佈的兩個採樣,它們的均值分別是 1 和 100,具有顯著的差異,但是差異沒有顯著性。

統計假設檢驗和顯著性檢驗

統計假設檢驗是指事先對隨機變量的參數或總體分佈做出一個假設,然後利用樣本信息來判斷這個假設是否合理。在統計學上,我們稱這種假設爲虛無假設(Null Hypothesis),也叫原假設或零假設,通常記作H0。而和虛無假設對立的假設,我們稱爲對立假設(Alternative Hypothesis),通常記作H1。也就是說,如果證明虛無假設不成立,那麼就可以推出對立假設成立。

統計假設檢驗的具體步驟是,先認爲原假設成立,計算其會導致什麼結果。若在單次實驗中產生了小概率的事件,則拒絕原假設 H0,並接受對立假設 H1。若不會產生小概率的事件,則不能拒絕原假設 H0,從而接受它。因此,統計學中的假設是否成立,並不像邏輯數學中的絕對“真”或“假”,而是需要從概率的角度出發來看。

那麼,問題來了,多少纔算是“小概率”呢?按照業界的約定俗成,通常我們把概率不超過 0.05 的事件稱爲“小概率事件”。當然,根據具體的應用,偶爾也會取 0.1 或 0.01 等。在假設檢驗中,我們把這個概率記爲α,並稱它爲顯著性水平。

顯著性檢驗是統計假設檢驗的一種,顧名思義,它可以幫助我們判斷多組數據之間的差異,是採樣導致的“偶然”,還是由於不同的數據分佈導致的“必然“。當然,這裏的“偶然”和“必然”都是相對的,和顯著性水平α有關。顯著性檢驗的假設是,多個數據分佈之間沒有差異。如果樣本發生的概率小於顯著性水平α,證明小概率事件發生了,所以拒絕原假設,也就是說認爲多個分佈之間有差異。否則呢,接受原假設,認爲多個分佈之間沒有差異。換句話說,顯著性水平α即爲拒絕原假設的標準。

P 值

既然已經定義了顯著性檢驗和顯著性水平,那麼我們如何爲多組數據計算它們之間差異的顯著性呢?我們可以使用 P 值(P-value)。P 值中的 P 代表 Probability,就是當 H0 假設爲真時,樣本出現的概率,或者換句話說,其實就是我們所觀測到的樣本數據符合原假設 H0 的可能性有多大。

如果 P 值很小,說明觀測值與假設 H0 的期望值有很大的偏離,H0 發生的概率很小,我們有理由拒絕原假設,並接受對立假設。P 值越小,表明結果越顯著,我們越有信心拒絕原假設。反之,說明觀測值與假設 H0 的期望值很接近,我們沒有理由拒絕 H0。

在顯著性檢驗中,原假設認爲多個分組內的數據來自同一個數據分佈,如果 P 值足夠小,我們就可以拒絕原假設,認爲多個分組內的數據來自不同的數據分佈,它們之間存在顯著性的差異。所以說,只要能計算出 P 值,我們就能把 P 值和顯著性水平α進行比較,從而決定是否接受原假設。


31 | 統計意義(下):如何通過顯著性檢驗,判斷你的A/B測試結果是不是巧合?

方差分析

方差分析(Analysis of Variance, ANOVA),也叫F 檢驗。這種方法可以檢驗兩組或者多組樣本的均值是否具備顯著性差異。它有四個前提假設,分別是:

  • 隨機性:樣本是隨機採樣的;
  • 獨立性:來自不同組的樣本是相互獨立的;
  • 正態分佈性:組內樣本都來自一個正態分佈;
  • 方差齊性:不同組的方差相等或相近。

SST、SSM 和 SSE

之前我們提到,差異是不是顯著性,關鍵要看這個差異是採樣的偶然性引起的,還是分佈本身引起的。方差分析的核心思想也是圍繞這個展開的,因此它計算了三個數值:SST、SSM 和 SSE。SST 表示所有采樣數據的因變量方差(Total Sum of Squares),我把它的計算公式列在這裏。

SSM 表示數據分佈所引起的方差,我們稱它爲模型平方和(Sum Of Squares for Model),它的計算公式如下:

SSE 表示採樣引起的方差,我們稱它爲誤差平方和(Sum of Squaress for Error)。它的計算公式如下:

SST、SSM 和 SSE 這三者的關係其實是這樣的:

你可以把這三者的公式代入,自己證明一下等式是否成立。由此可以看出,SST 是由 SSM 和 SSE 構成的。如果在 SST 中,SSM 的佔比更大,那麼說明因素對因變量的差異具有顯著的影響;如果 SSE 的佔比更大,那麼說明採樣誤差對因變量的差異具有更顯著的影響。我們使用這兩部分的比例來衡量顯著性,並把這個比例稱爲 F 值。具體公式如下:

在這個公式中,s 是水平的個數,n 爲所有樣本的總數量,s-1 爲分佈的自由度,n-s 爲誤差的自由度。你可能對自由度這個概念比較陌生,這裏我稍微解釋一下。

自由度

自由度(degree of freedom),英文縮寫是 df,它是指採樣中能夠自由變化的數據個數。對於一組包含 n 個數據的採樣來說,如果方差是一個固定值,那麼只有 n-1 個數據可以自由變化,最後一個數的取值是給定的方差和其他 n-1 個數據決定的,而不由它自己隨意變化,所以自由度就是 n-1。這也是爲什麼在計算一組數的方差時,我們在下面這個公式中使用的除數是 n-1,而不是 n。

使用 Python 代碼進行驗證

安裝 Python 的擴展包 statsmodels。

pip install -U statsmodels

32 | 概率統計篇答疑和總結:爲什麼會有欠擬合和過擬合?

擬合、欠擬合和過擬合

  • 適度擬合(right fitting)
  • 欠擬合(Under Fitting)
  • 過擬合(Over Fitting)

如何處理欠擬合和過擬合?

欠擬合問題,產生的主要原因是特徵維度過少,擬合的模型不夠複雜,無法滿足訓練樣本,最終導致誤差較大。因此,我們就可以增加特徵維度,讓輸入的訓練樣本具有更強的表達能力。

過擬合問題產生的主要原因則是特徵維度過多,導致擬合的模型過於完美地符合訓練樣本,但是無法適應測試樣本或者說新的數據。所以我們可以減少特徵的維度。之前在介紹決策樹的時候,我提到了這類算法比較容易過擬合,可以使用剪枝和隨機森林來緩解這個問題。

剪枝,顧名思義,就是刪掉決策樹中一些不是很重要的結點及對應的邊,這其實就是在減少特徵對模型的影響。雖然去掉一些結點和邊之後,決策樹對訓練樣本的區分能力變弱,但是可以更好地應對新數據的變化,具有更好的泛化能力。至於去掉哪些結點和邊,我們可以使用前面介紹的特徵選擇方法來進行。

隨機森林的構建過程更爲複雜一些。“森林”表示有很多決策樹,可是訓練樣本就一套,那這些樹都是怎麼來的呢?隨機森林算法採用了統計裏常用的可重複採樣法,每次從全部 n 個樣本中取出 m 個(m<n),然後構建一個決策樹。重複這種採樣並構建決策樹的過程若干次,我們就能獲得多個決策樹。對於新的數據,每個決策樹都會有自己的判斷結果,我們取大多數決策樹的意見作爲最終結果。由於每次採樣都是不完整的訓練集合,而且有一定的隨機性,所以每個決策樹的過擬合程度都會降低。

從另一個角度來看,過擬合表示模型太複雜,而相對的訓練數據量太少。因此我們也可以增加訓練樣本的數據量,並儘量保持訓練數據和測試數據分佈的一致性。如果我們手頭上有大量的訓練數據,則可以使用交叉驗證(Cross Validation)的劃分方式來保持訓練數據和測試數據的一致性。其核心思想是在每一輪中,拿出大部分數據實例進行建模,然後用建立的模型對留下的小部分實例進行預測,最終對本次預測結果進行評估。這個過程反覆進行若干輪,直到所有的標註樣本都被預測了一次而且僅一次。如果模型所接受的數據總是在變化,那麼我們就需要定期更新訓練樣本,重新擬合模型。

總結

第二模塊中,我介紹了很多概率統計中常用的概念。隨機變量和它的概率分佈體現了事物發生的不確定性。而條件概率、聯合概率和邊緣概率體現了多個隨機變量之間的關係以及是不是相互獨立,通過這三者的關係,我們可以推導出貝葉斯定理。在貝葉斯定理和變量獨立性假設的基礎之上,我講了樸素貝葉斯算法中的公式推導,以及如何使用先驗概率來預測後驗概率。由於樸素貝葉斯假定多個變量之間相互獨立,因此特別適合特徵維度很多、特徵向量和矩陣很稀疏的場景。基於詞包方法的文本分類就是個非常典型的例子。

文本分類涉及了詞與詞之間相互獨立的假設,然後延伸出多元文法,而多元文法也廣泛應用在概率語言模型中。語言模型是馬爾科夫模型的一種,而隱馬爾科夫模型在馬爾科夫模型的基礎之上,提出了兩層的結構,解決了我們無法直接觀測到轉移狀態的問題。

由概率知識派生而來的信息論,也能幫助我們設計機器學習的算法,比如決策樹和特徵選擇。統計中的數據分佈可以讓特徵值轉換更合理,而假設檢驗可以告訴我們哪些結論是更可靠的。

由於很多監督式學習都是基於概率統計的,所以我使用了一些學習算法來進行講解。你會發現,概率和統計可以幫助這些算法學習訓練樣本中的特徵,並可以對新的數據進行預測,這就是模型擬合的過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章