南京大學周志華教授所著的入門教材《機器學習》,俗稱“西瓜書”,已經成為人工智能領域的入門必讀物。該書內容上基本涵蓋了機器學習基礎知識的各個方面,對我瞭解人工智能的基礎知識提供了很大的幫助,學習的過程中也有一些心得和體會,之前就書中的緒論部分分享了一些經驗(淺談人工智能入門必讀物《機器學習》),現就文中的的第三章(線性模型)提出自己的看法和理解,後續還會繼續推送其他章節的總結帖。
1、章節主要內容
線性模型形式簡單、易於建模,許多功能更為強大的非線性模型可在線性模型的基礎上通過引入層級結構或高維映射而得(神經網絡就是一個例子,大夥在後邊學習神經網絡時會發現其實神經網絡的每個神經元就是一個廣義的線性模型)
本章內容對幾種經典的線性模型進行了介紹,並討論其在二分類和多分類任務上的應用以及需考慮的問題。
1)線性模型的背後邏輯以及變型思路
線性模型的本質是通過訓練數據學習出一個通過樣本數據的屬性的線性組合來進行預測的函數,其基本格式可表現如下:
f(x) = w1x1 + w2x2 + ... + wnxn + b (公式1)
其中xi是樣本的第i個屬性的屬性值,wi是線性模型對第i個屬性的權重,b是模型的線性偏移量。因為w直觀表達了各屬性在預測中的重要性,因此線性模型有很好的可解釋性。
[1]線性模型最基礎的算法:線性迴歸
線性迴歸就是使用訓練樣本(x,y)去訓練上邊的(公式1),使得生成的函數f(x)能儘量貼近樣本標籤y。
因為是函數訓練,所以我們在訓練之前需要將離散值屬性轉換為連續值屬性。並且該屬性的屬性值之間是否存在“序”關係,會有不同的轉換方式。如果是有序屬性,我們會根據屬性序數高低給予一個數字序列,比如身高,具有“高、中等、矮”三個有序屬性值,那麼我們就能將其轉換為{1,0.5,0};如果屬性值之間沒有序列,我們要將這k個屬性值轉為k維向量,比如天氣,“下雨、晴天、多雲”三個屬性值之間並沒有序列關係,那麼就應該將其轉換為3維向量,(1,0,0),(0,1,0),(0,0,1)
(上邊的屬性轉換過程雖然簡單,但是要獲得好的學習效果,不能不注重)
在對數據進行轉換之後,為了能生成線性迴歸模型,我們需要計算出正確的w和b。回顧我們線性迴歸的函數目的,我們發現線性迴歸是為了能使得生成的迴歸函數能更貼近樣本標籤,也就是說當訓練出來的模型f(x)和真正的值y之間的誤差最小時,該線性迴歸模型就是我們要的。
這就轉換為了求最小值的問題了,線性迴歸函數是使用均方誤差和最小二乘法來進行計算的。其背後的邏輯是通過計算訓練樣本在向量空間上距離模型線的歐式距離之和的最小值來確定參數w和b。而這個最小值可以通過對距離之和求導獲得,當導數為0時,說明原函數達到了一個極值(因為是凸函數,所以該極值是最小值)。
[2]線性迴歸函數的變型
線性迴歸函數可以簡寫為:y = wx + b,這是用模型的預測值去逼近真實標記y。那麼我們能不能令預測值去逼近y的衍生物呢?基於這樣的考慮,我們就得到了線性迴歸的各種變型函數。
比如,假設我們認為示例所對應的輸出標記是在指數尺度上變化的,那麼就可將輸出標記的對數作為線性模型逼近的目標,即可得到“對數線性迴歸”(log-linear regression):
ln(y) = wx + b
更一般地,考慮單調可微函數g,令:
g(y) = wx + b
這樣得到的模型稱為“廣義線性模型”(generalized linear model),其中函數g稱為“聯繫函數”(link function)。不同的聯繫函數會構成不同的線性迴歸模型。
其中,當 g(y) = ln( y / (1-y) ) 時,我們得到了“對數機率迴歸”(logit regression),也稱“邏輯迴歸函數”。通過聯繫函數,我們可以看出該模型實際上是在用線性迴歸模型的預測結果去逼近真實標記的對數機率。
2)線性模型在多分類場景下的應用
在現實中常遇到多分類學習任務,我們在多數情況下,將基於一些基本策略,利用二分類學習器來解決多分類問題。
多分類學習的基本思路是“拆解法”,即將多分類任務拆為若干個二分類任務求解。
最經典的拆分策略有以下三種:
[1]“一對一”(One vs One,簡稱OvO)
將N個類別兩兩配對,對每一種組合訓練一個分類器,從而產生N(N-1)/2個二分類任務。當輸入新樣本時,用N(N-1)/2個學習器分別進行分類,並對分類結果進行計數,被預測最多的類為最終分類結果。
[2]“一對其餘”(One vs Rest,簡稱OvR)
每次將一個類作為正例,其餘N-1個類作為反例來訓練N個分類器。最終根據N個分類器的結果綜合考慮之後(唯一被標為正例的那個分類器的結果為結果,如果有多個分類器都預測為正時,根據預測置信度來比較),選出最終分類結果。
我們看到OvO和OvR相比,前者要訓練的分類器要多得多,因此存儲和測試開銷要相對多些。但是在訓練時,因為前者每個分類器只使用部分數據,而後者要用全量數據,所以類別多時,OvO的訓練開銷要更小一些。
至於預測性能,則取決於數據分佈,在多數情況下兩者差不多。
[3]“多對多”(Many vs Many,簡稱MvM)
每次將若干個類別作為正類,若干個其它類作為反類。顯然,OvO和OvR是MvM的特例。正反類的劃分必須有特殊的設計,不能隨意選取。一種最常用的MvM技術是:“糾錯輸出碼”(Error Correcting Output Codes,簡稱ECOC)
ECOC會對每種不同的正反類劃分訓練一個學習器,並用這些學習器去對新樣本進行預測,並根據預測結果以及所有學習器類別劃分組成的編碼矩陣來決定最終的預測結果。比如從圖3.5(a),我們可以看到五個分類器劃分的編碼矩陣為:
-1, +1, -1, +1, +1
+1, -1, -1, +1, -1
-1, +1, +1, -1, +1
-1, -1, +1, +1, -1
新樣本在這五個學習器中的訓練結果為向量y:(-1, -1, +1, -1, +1)。用y與矩陣的每一行進行比較就可以得到針對每一個類別的海明距離和歐式距離。距離最小的類別就是最終的分類結果。以C1類為例,向量y與C1類的海明距離和歐式距離的值如下:
海明距離:每個分類器對樣本的分類結果如果和C1類不一致,則計數加1,否則不加,結果為:0+1+1+1+0 = 3
歐式距離:每個分類器對樣本的分類結果減去C1類的分類劃分,差值的平方和的開方,結果為:根號下( 0+4+4+4+0) = 根號下12 = 2又根號3
3)類別不平衡時的調優方案
類別不平衡(class-imbalance),就是指分類任務中不同類別的訓練樣例數目差別很大的情況。目前類別不平衡性學習的一個基本策略是“再縮放”(rescaling),現有技術大體上有以下三種做法:
[1]欠採樣(undersampling)
去除樣例過多的類別中的一部分樣例,使得正、反例數目接近。代表性算法EasyEnsemble,將反例劃分為若干個集合供不同學習器使用,這樣對每個學習器來看都進行了欠採樣,但在全局來看卻不會丟失重要信息。
[2]過採樣(oversampling)
對樣例少的類別增加數據,使得正、反例數目接近。過採樣法不能簡單地對初始正例樣本進行重複採樣,否則會招致嚴重的過擬合。代表性算法SMOTE是通過對訓練集裡的正例進行插值來產生額外的正例。
[3]閾值移動(threshold-moving)
一般我們對二分類法的正負值的判定閾值是基於中間值0.5來判斷的,這是基於分類器認為真實正、反例可能性相同的認知下的判斷,即分類器決策規則為:
若 y / ( 1 - y ) > 1,則預測為正例 (公式2)
然而,當訓練集中正、反例不同時,令m+表示正例數,m-表示反例數,則觀察機率為:m+/m-,這時我們應該改變分類器決策規則為:
若 y / ( 1 - y ) > m+/m-,則預測為正例 (公式3)
將(公式3)代入(公式2)中,我們可以得到新的決策規則:
若 y' / (1 - y') = [y / (1 - y)] * [m-/m+] > 1,則預測為正例
這種在用訓練好的分類器進行預測時,將決策規則根據數據分佈來進行移動的方法就是閾值移動。
2、基本知識
1)最小二乘法(略)
2)極大似然法(略)
3、總結
[1]線性模型是一個形式簡單、易於建模的機器學習模型,因為w直觀表達了各屬性在預測中的重要性,因此線性模型有很好的可解釋性
[2]線性迴歸背後的邏輯是用模型的預測值去逼近真實標記y,並通過計算訓練樣本在向量空間上距離模型線的歐式距離之和的最小值來確定參數w和b
[3]線性迴歸可寫成廣義線性模型形式:g(y) = wx + b,通過選擇不同的聯繫函數g(.)會構成不同的線性迴歸模型
[4]在遇到多分類學習任務時,基本的解決思路是“拆解法”,即將多分類任務拆為若干個二分類任務求解
[5]當不同類別的樣例數不同時,會造成類別不平衡問題,解決該問題的基本策略是對數據進行“再縮放”