一文秒懂機器學習:數據+任務+性能度量

1.前言

所以什麼是機器學習?一言以蔽之就是利用機器來學習,我知道讀到這裡大家可能要取消關注我了,心想這 TM 還用你來說?耐心點下面就給大家嚴肅的東西。談到機器學習就一定要提起一個人就是湯姆米切爾 (Tom M.Mitchell),就像談音樂就會提起貝多芬,談籃球就會提起喬丹,談電影就會提起萊昂納多迪卡普里奧。Mitchell 對機器學習定義的原話是:

A computer program is said to learn from experience E with respect to

some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E

有點抽象難懂對嗎?但首先注意黑色粗字 computer program learn 不就是機器(計算機程序)和學習的意思嗎?之後我把這段話翻譯成中文就可以發掘該定義裡更多深層的內容了,中文定義為:

假設用性能度量 P 來評估計算機程序在某類任務的性能,若一個程序通利用經驗 E 在任務 T 中改善其性能,我們就說關於性能度量 P 和任務 T

程序對經驗 E 進行了學習

在該定義中,除了核心詞機器學習, 還有關鍵詞經驗 E,性能度量 P 和任務 T。在計算機系統中,通常“經驗”是以“數據”形式存在,而機器學習就是給定不同的任務從數據中產生模型的算法,即“學習算法” (leanring algorithm)。於是兩個問題應運而生:

  1. 模型的性能到底怎麼評估?這就需要根據不同類型任務 T 定義不同的性能度量 P
  2. 模型的性能的好壞通常要從沒有見過的數據 (unseen data) 上體現,但是這就很矛盾了,因為在學習算法就是基於看到的數據,你根本不知道你沒看到的數據(未來發生的)是什麼樣的。難道這意味著我們在現在這個時點就沒能力評估模型性能?

好奇不?想學不?接下來三節我會從數據,任務和性能度量三個方面高層的介紹機器學習。你不需要了解任何算法就可以理解它們,它們非常簡單但又非常重要。

2. 數據

2.1 乾淨數據

對於任何模型,“垃圾進垃圾出” (GIGO, garbage in garbage out) 這個公理永遠成立。如果用於建模的算法基於的數據是沒有代表性,低質量,不乾淨的等等,那就千萬不要浪費時間建模而首要事情是處理數據 (tidy data)。處理數據是一門很深的學問,今後在《數據科學》那個課題下我在會詳細描述。在《機器學習》這個課題下,我們主要還是關注算法,因此假設數據是有代表性高質量的。對於一個大問題,這樣假設其他環節沒問題,一次集中解決一個環節到最後再總結整合會更高效些。

假設我們收集了勒布朗詹姆斯 (Lebron James) 在最近四場的數據,如下圖。

一文秒懂機器學習:數據+任務+性能度量

根據大神 Hadley Wickhan 在他 2014 年在 Tide Data 文中對乾淨數據的定義:

  • 每一列代表一個變量 (each variable forms a column),例如“得分”,“籃板”和“助攻”。
  • 每一行代表一個記錄 (each observation forms a row),例如 [得分 = 27, 籃板 = 10, 助攻 = 12]。

上面表格中的數據是乾淨的。

2.2 術語

下面術語大家在深入瞭解機器學習前一定要弄清楚:

  • 這組記錄的集合稱為一個“數據集” (data set)。
  • 其中每條記錄是關於一個對象 (這裡是一場比賽詹姆斯的個人統計)的描述,稱為一個“示例” (instance) 或“樣本” (sample)。
  • 反映對象在某方面的表現或性質,例如“得分”,“籃板”,“助攻”,成為“屬性” (attribute) 或“特徵” (feature) 或“輸入變量” (input variable)。
  • 屬性上的取值,例如 27, 10, 12 (第一行的值) 成為“屬性值” (attribute value)。

假設我們想學習的問題是詹姆斯的得分籃板助攻到達什麼水平可以幫助騎士贏球?我們可以在上表加多一列數據標記“輸贏”,見下圖。

一文秒懂機器學習:數據+任務+性能度量

咋一看可以發現先好像詹姆斯助攻上10就可贏球,反之得分再多也不行。這也合理,因為助攻多就讓隊友全部參與整個隊配合就流暢,贏球也不奇怪了。但是這個只是第一眼直覺 (hunch),不是模型。如果希望學到一個根據詹姆斯個人統計來判斷騎士輸贏的模型,我們須獲得一個結果信息 (輸贏),如 [[得分 = 27, 籃板 = 10, 助攻 = 12], 贏]。

更多術語:

  • 關於示例結果的信息,例如“贏”,成為“標記” (label) 或 “輸出變量” (output variable)。
  • 擁有標記信息的示例,則稱為“樣例” (example)。
  • 從數據中學得模型的過程成為“學習” (learning) 或 “訓練” (
    training)。
  • 在訓練數據中,每個樣例成為一個“訓練樣例” (training example),它們的集合稱為“訓練集” (training set)。

所有東西濃縮為一張圖如下:

一文秒懂機器學習:數據+任務+性能度量

2.3 數學符號

接下來是數學符號 (mathematical notation),我個人喜歡用一致性的符號,在接下來算法研究的帖子裡,我都會用本貼定義的符號。如果你現在不想看可以跳過不影響整篇的閱讀,以後隨時需要可以查閱本貼。

通常令

一文秒懂機器學習:數據+任務+性能度量

表示包含 m 個樣例的輸入變量和輸出變量。每個示例由 d 個屬性描述 (例如詹姆斯個人統計使用了 3 個屬性),則每個示例

一文秒懂機器學習:數據+任務+性能度量

是 d 維的一個向量,其中 x(i)j 是 x(i) 在第 j 個屬性上的取值 (例如詹姆斯第 3 場在第 2 個屬性上的值是 10),而 y(i) 是示例 x(i) 的標記。一般的,用 (x(i), y(i)) 表示第 i 個樣例,而 {(x(i), y(i)); i = 1,2, ..., m} 表示訓練集。

所有東西濃縮為一張圖如下:

一文秒懂機器學習:數據+任務+性能度量

3. 任務

根據訓練數據是否擁有標記,學習任務可大致分兩類:監督學習 (有標記) 和無監督學習 (無標記)。還有一種叫強化學習 (有一些評級標記)。我們先把注意力放在前兩個。

3.1 監督學習 (supervised learning)

在監督學習中,數據不包含輸出變量或標記,而其主要任務是預測和分類。以上述詹姆斯為例:

  • 如果我們預測的是離散值 (discrete value),例如“贏”,“輸”,此類學習任務稱為 “分類” (classification)
  • 如果我們預測的是連續值 (continuous value),例如詹姆斯效率 65.1, 70.3 等等,此類學習任務稱為 “迴歸” (regression)
一文秒懂機器學習:數據+任務+性能度量

在分類任務中:

  • 對只涉及兩個類別的,稱其為“二分類” (binary classification) 任務,通常一個類為“正類” (positive class),比如贏球;另一個類為“反類” (negative class),比如輸球。
  • 對只涉及兩個以上類別的,稱其為“多分類” (multi-class classification) 任務。一個例子就是加入詹姆斯去踢足球,這樣標記會有三類,贏輸平。

3.2 無監督學習 (unspuervised learning)

在無監督學習中,數據包含輸出變量或標記,而其主要任務是發掘模式。除了根據詹姆斯個人統計來預測騎士隊輸贏或者他個人效率值,我們還可以對他做“聚類” (clustering), 即將訓練集中的數據分成若干組,每組成為一個“” (cluster)。比如生成了下面四個簇:

  1. 最佳防守陣容,不是得分王,最有價值球員 (MVP)
  2. 不是最佳防守陣容,不是得分王,不是最有價值球員
  3. 不是最佳防守陣容,得分王,不是最有價值球員
  4. 最佳防守陣容,得分王,最有價值球員

聚類一個用處就是可以找到一個潛在的原因來解釋為什麼詹姆士在第 2, 3 種情況不是最有價值球員。難道真的是 defense wins MVP? Just saying ...

4. 性能度量 (performance measure)

對模型進行評估,不僅需要有效可行的實驗估計方法,還需要衡量模型泛化能力的評價標準,稱之為性能度量。性能度量是個任務相關的,接下來我們就拿監督學習裡的迴歸和分類任務和無監督學習裡的聚類任務為例,來給出它們相對應的性能度量。

4.1 迴歸任務 (regression)

在迴歸任務中,給定訓練數據集

一文秒懂機器學習:數據+任務+性能度量

要評估模型 h 的性能,就要把模型預測結果 h(x) 與真實標記 y 進行比較。迴歸任務最常用的性能度量是“均方誤差” (MSE, mean square error)

一文秒懂機器學習:數據+任務+性能度量

4.2 分類任務 (classification)

精度和錯誤率 (accuracy & error)

通常我們把分類錯誤的樣本數佔樣本總數的比例稱為“

錯誤率” (error),相應的分類正確的樣本數佔樣本總數的比例稱為“精度” (accuracy)。假設在 m 個樣本中有 a 個樣本分類錯誤,則錯誤率為 a/m,而精度為 1 - a/m。

查準率和查全率 (precision & recall)

錯誤率和精度雖然常用,但是不能滿足所有任務需求。以詹姆斯問題為例,假定我們用訓練好的模型預測騎士贏球,顯然,錯誤率衡量了多少比率的比賽實際是贏了但判斷成輸了。但是若我們關心的是“預測出的比賽中有多少比例是贏球”,或者“贏球的比賽中有多少被預測出來了”,那麼錯誤率顯然就不夠用了,這是需要使用其他的性能度量,也就是“查準率” (precision) 和“查全率” (recall)。有人也稱它們為準確率和召回率,但我覺得前者定義更直觀,因為查準率就是查準的 (查出東西多少是有用的

不就是嗎?),而查全率就是查全的 (有用的東西有多少被查出不就是嗎?)。

對於二分類問題,可將樣例根據其真實類別與模型預測類別的組合劃分為真正例 (true positive, TP),真反例 (true negative, TN), 假正例 (false positive, FP) 和假反例 (false negative, FN)。其中

  1. 預測類別的真假來描述“正例反例”,如果“預測為真”就是“正例”,如果“預測為假”就是“反例”。
  2. 真實類別和預測類別的同異來描述“真假”,如果“相同”就是“”,如果“
    不同”就是“”。
  3. 真正例就是預測類別為真且和真實類別相同,真反例就是預測類別為假且和真實類別相同,假正例就是預測類別為真但和真實類別不同,假反例就是預測類別為假但和真實類別不同。
  4. 如果我們目標是挑選真實類別為真的例子,那麼真正例和假正例是實際挑出的集合 (因為你挑出的真實類別總會有真假,但是目標是正例,正負得負,負正得負)。而真正例和假反例是夢想挑出的集合 (因為夢想挑出的是真實類別為真的例子,只不過一部分挑對了劃分為真正例,一部分挑錯了劃分為假反例,正正得正,負負得正)。
  5. TP + TN + FP + FN = 樣本總數

一旦你捋順上訴繞口 (mouthful) 的劃分,下圖的意義不言而喻;如果沒有捋順,希望下圖能直觀的幫助你。

一文秒懂機器學習:數據+任務+性能度量

著名的“混淆矩陣” (confusion matrix) 如下表:(這名字起得真TM好,混淆死我了)

一文秒懂機器學習:數據+任務+性能度量

查準率 P 和查全率 R 定義如下:

P = TP / (TP + FP)

R = TP / (TP +FN)

查準率和查全率是一對矛盾的度量。一般來說:

  • 查準率高時,查全率往往低
  • 查全率高時,查準率往往低

比如,打三國殺時,你是主公,你想殺反賊而不錯殺忠臣,你可以只選最有把握的殺,就是不殺任何人,因此查準率 100% 而查全率 0%; 或者你想殺掉所有反賊,你可以通過增加殺人的數量把所有人殺了,這樣你的確殺掉所有反賊了,因此查全率 100% 而查準率 60% (假設6人場1主公1忠1內3反)。通常在一些非常簡單的任務或者你作弊時,查準率和查全率都很高。比如你知道每個人的身份牌,那你當然一殺一個準直到清場,查準率和查全率都是 100%。

F1 度量

F1 度量是基於查準率和查全率的調和平均 (harmonic mean) 定義的:

一文秒懂機器學習:數據+任務+性能度量


跟算術平均 (arithmetic mean, P+R) 和幾何平均 (geometric mean, sqrt(PR)) 相比,調和平均更重視較小值。可從上式左邊部分看出,P 和 R 都在分母位置,較小那個的變動比較大那個的變動對 F1 值影響更大些。F1 度量的一個弊端是對查準率和查全率重視程度相同,但是在實際的機器學習問題中,我們通常會對查準率和查全率有不同的重視程度。比如:

  • 例子 1:在亞馬遜推薦商品時,為了儘可能打擾用戶,更希望推薦內容是用戶感興趣的,此時查準率更重要。
  • 例子 2:在 FBI 追逃犯時,更希望的是少漏掉逃犯,寧可錯殺一千也不放走一個,此時準率更重要。
  • 例子 3:在癌症診斷時,如果你跟一個沒有癌症的病人說得了癌症 (追求查全率), 病人會壓力很大而且花費很多在測試上;如果你跟得了癌症的病人說沒得癌症 (追求查準率),這可能是個生死攸關的做法。此時似乎查準率和查全率都重要 (個人認為查準率更重要,畢竟生死大過金錢),我們只能不斷改進模型咯。
  • 例子 4:目前作者還沒有找到查準率和查全率都不重要的例子,如果你二者都不重視,你還玩毛機器學習?

為了區分不同重視程度,我們介紹一個 F1 度量一個一般形式 Fβ

一文秒懂機器學習:數據+任務+性能度量

其中 β 度量了查準率和查全率的相對重要性,根據公式有

  1. 當 β = 1, Fβ 公式退化成 F1, 適用於癌症診斷的例子。
  2. 當 β > 1, 查全率有更大影響,更希望查全,適用於 FBI 抓逃犯例子。
  3. 當 0 < β < 1, 查準率有更大影響,更希望查準,適用於亞馬遜推薦商品例子。

4.3 聚類任務 (clustering)

聚類任務是將全部數據集劃分為若干互不相交的子集,即蔟。那麼什麼樣的聚類結果比較好呢?直觀來講,我們希望物以類聚,即同一簇的樣本儘可能彼此相似,而不同簇的樣本儘可能不同。換言之,聚類結果的“簇內相似度” (intra-cluster similarity) 要高而“簇外相似度” (inter-cluster similarity) 要低。

聚類的性能度量有兩類。一類是將聚類結果與某個參考模型比較,稱為“外部指標” (external index) 比如 Jaccard 係數,FM 指數和 Rand 指數; 另一類是直接考察聚類結果而不利用任何模型,稱為“

內部指標(internal index) 比如 DB 指數和 Dunn 指數。作者會在專門講聚類任務時細講這些度量指標。

對於相似度計算,通常我們會用兩種“距離度量” (distance measure),歐式距離 (Euclidean distance) 和餘旋相似 (cosine similarity):

一文秒懂機器學習:數據+任務+性能度量

一文秒懂機器學習:數據+任務+性能度量

前者計算的距離是沒有單位化的,後者計算的相似度是有單位化的。單位化 (normalization) 有好處也有壞處:

  • 用歐式距離很可能沒把一篇文章和一篇內容複製兩遍的文章歸為一類。
  • 用餘旋相似很可能一篇很長的文章和一句很短的微博歸為一類。


分享到:


相關文章: