假設有這樣的一個需求:判斷某一朵花是否是鳶尾花。咱們知道不一樣品種的花,其長得是不同,因此咱們能夠經過花的若干外觀特徵(花萼長度、花萼寬度、花瓣長度、花瓣寬度等)來表示這一朵花。
基於這個思路,咱們採集N朵花並對其標註,獲得如下的數據集。框架
考慮最簡單的一種情形,Y(是否爲鳶尾花),與特徵X線性相關,W定義爲相關係數,即模型F能夠用下面公式表述:機器學習
化簡寫成向量化形式:,也就是線性迴歸,
函數
如今問題來了,是和否是兩種狀態,在計算機科學上咱們經常使用1/0開關量來表述,可是從表示式的值域上看數學公式: 能取任意值,這是沒辦法直接成表述0/1開關量。那如何解決這個問題呢?經過一個轉換函數(又稱爲激活函數),將線性迴歸轉換邏輯迴歸。
工具
並非任意函數均可以做激活函數使用的,激活函數具備如下幾種良好的性質:
<font color='red'>非線性</font>,線性函數的複合線性函數還是線性函數,故線性激活函數不能帶來非線性的變換,使用這樣激活函數不能加強模型的表達能力,如此一來就沒辦法擬合複雜的實現問題了,因此激活函數必須非線性的。
<font color='red'>連續可微</font>,若是函數不可微分,就沒辦法經過梯度降低法來迭代優化,以獲得近似的最優解了。若是激活函數不可微,可能須要其餘各複雜的數學工具來求解,一是未必會有解,二是計算成本過高,難以實現和落地。
<font color='red'>單調性</font>,線性函數自己是單調,這個自己是必定的物理意義的,因此通過激活函數轉換後也保持這個性質,不能改變其單調性。 知足學習
經過一個分段函數,把f(x)直接映射成0或1,如公式所示:
可是,這個分段函數不連續不可微不單調,還帶一個額外的參數k,因此這種分段函數並不適合做激活函數使用。優化
不直接映射成0或1,而是將f(x)的值域壓縮到(0,1)之間,如公式所示:
這就是sigmoid函數了,下圖爲sigmoid函數的圖像。
顯然是這個函數是具備上面提到的激活函數的三種優良性質。同時將輸出壓縮到(0,1)區間上,有一個很直觀感覺是,咱們能夠把這個輸出值理解爲一種機率,在這個問題上指的是鳶尾花的機率,當這個機率值大於0.5,說明鳶尾花機率大即1,反之則不是鳶尾花即0,這就能實現分類的判別了。spa
那既然如今有了sigmoid激活函數,咱們該如何利用它訓練模型呢?<font color='red'>模型之因此能訓練是依賴於兩個神器:損失函數和梯度降低,前者能量化咱們模型預測與真實結果的偏差、肯定優化的目標函數,後者能知道如何去減小偏差、具體地優化目標函數</font>。事件
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)了,咱們找到損失函數了。
接下來,咱們得看看如何轉換這個損失函數:<font color='red'>加負號(最大值問題轉化最小值問題,梯度降低能找最小值),取對數(不改單調性,把複雜的連乘變成簡單的連加)</font> 圖片
肯定了目標函數以後,接下來就能夠利用梯度降低,用迭代更新參數W,使其不斷逼近目標函數的極值點。
梯度推導:
聯立式②③可見
因而可知,t+1時刻模型預測偏差總會比在t時刻更小,經過這樣迭代,模型就能不斷學習和調整,一直到偏導數爲0的(局部)最優極值點,這時候參數便沒法再繼續調整了,模型也就中止再訓練了。get
邏輯迴歸(Logistic Regression)是機器學習上面一個最簡單、最基礎的模型框架和基本範式,不誇張地說它是機器學習奠定石之一,後續的機器學習模型,不少都是立足於這個基礎的模型框架上,提出各類形式拓展與改進。
深入地理解邏輯迴歸模型,梳理邏輯迴歸模型背後建模思路、因果原因、實現邏輯,能讓咱們對機器學習的方法論有一個更全面更清晰的認知。
歡迎關注凹凸實驗室博客:aotu.io
或者關注凹凸實驗室公衆號(AOTULabs),不定時推送文章。