機器學習進階之深入思考邏輯回歸
問題背景
假設有這樣的一個需求:判斷某一朵花是不是鳶尾花。我們知道不同品種的花,其長得是不一樣,所以我們可以通過花的若干外觀特征(花萼長度、花萼寬度、花瓣長度、花瓣寬度等)來表示這一朵花?;谶@個思路,我們采集N朵花并對其標注,得到以下的數據集。圖片
考慮最簡單的一種情形,Y(是否為鳶尾花),與特征X線性相關,W定義為相關系數,即模型F可以用下面公式表述:
化簡寫成向量化形式:
圖片也就是線性回歸:
現在問題來了,是和否是兩種狀態,在計算機科學上我們常用1/0開關量來表述,但是從表示式的值域上看數學公式:
能取任意值,這是沒辦法直接成表述0/1開關量。那如何解決這個問題呢?通過一個轉換函數(又稱為激活函數),將線性回歸轉換邏輯回歸。
建模思路
并不是任意函數都可以作激活函數使用的,激活函數具有以下幾種良好的性質:
非線性,線性函數的復合線性函數仍是線性函數,故線性激活函數不能帶來非線性的變換,使用這樣激活函數不能增強模型的表達能力,如此一來就沒辦法擬合復雜的實現問題了,所以激活函數必須非線性的。
連續可微,如果函數不可微分,就沒辦法通過梯度下降法來迭代優化,以得到近似的最優解了。如果激活函數不可微,可能需要其他各復雜的數學工具來求解,一是未必會有解,二是計算成本太高,難以實現和落地。
單調性,線性函數本身是單調,這個本身是一定的物理意義的,所以經過激活函數轉換后也保持這個性質,不能改變其單調性。滿足
直接轉換
通過一個分段函數,把f(x)直接映射成0或1,如公式所示:
但是,這個分段函數不連續不可微不單調,還帶一個額外的參數k,所以這種分段函數并不適合作激活函數使用。
間接映射
不直接映射成0或1,而是將f(x)的值域壓縮到(0,1)之間,如公式所示:
這就是sigmoid函數了,下圖為sigmoid函數的圖像。
顯然是這個函數是具有上面提到的激活函數的三種優良性質。同時將輸出壓縮到(0,1)區間上,有一個很直觀感受是,我們可以把這個輸出值理解為一種概率,在這個問題上指的是鳶尾花的概率,當這個概率值大于0.5,說明鳶尾花概率大即1,反之則不是鳶尾花即0,這就能實現分類的判別了。
實現邏輯
那既然現在有了sigmoid激活函數,我們該如何利用它訓練模型呢?模型之所以能訓練是依賴于兩個神器:損失函數和梯度下降,前者能量化我們模型預測與真實結果的誤差、確定優化的目標函數,后者能知道如何去減少誤差、具體地優化目標函數。
損失函數
sigmoid激活函數輸出值可以看作是概率,具體地我們可以把這個概率,看成是預測結果為是的概率。
我們需要預測的分類結果要么為是要么為否,只有兩種情況,顯然樣本X是服從伯努利(0-1)分布。假定樣本X,當分類標簽真值y為1時,我們就看y_pred也是sigmoid的輸出值(模型預測為是的概率),0是1的互斥事件,當分類標簽真值為0時,我們就看1-y_pred(模型預測為否的概率),所以條件概率P(Y|X)可以量化出模型預測的準確程度了。
合并化簡,整合成統一形式
P(Y|X)就是模型預測結果,顯然P(Y|X)的值越接近于1,說明模型預測結果越準。一個數據集有N個樣本,每個樣本之間獨立的,所以在模型在整個數據上好壞,可以這樣定義:
顯然,要使得模型的效果最佳,則得找到一個最佳參數
使得
能取到最大值,這個就是最優化方法里面的極大使然估計(MLE)了,我們找到損失函數了。
接下來,我們得看看如何轉換這個損失函數:加負號(最大值問題轉化最小值問題,梯度下降能找最小值),取對數(不改單調性,把復雜的連乘變成簡單的連加)
梯度下降
確定了目標函數之后,接下來就可以利用梯度下降,用迭代更新參數W,使其不斷逼近目標函數的極值點。
梯度推導:
聯立式②③可見
由此可見,t+1時刻模型預測誤差總會比在t時刻更小,通過這樣迭代,模型就能不斷學習和調整,一直到偏導數為0的(局部)最優極值點,這時候參數便無法再繼續調整了,模型也就停止再訓練了。
結語
邏輯回歸(Logistic Regression)是機器學習上面一個最簡單、最基礎的模型框架和基本范式,不夸張地說它是機器學習奠基石之一,后續的機器學習模型,很多都是立足于這個基礎的模型框架上,提出各種形式拓展與改進。
深刻地理解邏輯回歸模型,梳理邏輯回歸模型背后建模思路、因果緣由、實現邏輯,能讓我們對機器學習的方法論有一個更全面更清晰的認知。