【筆記】淺談邏輯回歸以及邏輯回歸的損失函數


邏輯回歸算法

邏輯回歸算法的概念不咋敘述

邏輯回歸算法看上去是解決回歸問題的算法,但是其實是解決的分類問題,那么回歸算法是如何解決分類問題呢?邏輯回歸的原理是將樣本的特征和樣本發生的概率聯系起來,即預測這個樣本的發生概率是多少,而這個概率是一個數,因此可稱這個為回歸問題

對於機器算法來說,其本質就是求解一個函數,將樣本代入,經過函數計算以后可以得到一個預測的值,在線性回歸和多項式回歸中,預測的值和問題具有很強的關聯性,但是在邏輯回歸中,預測的值其本質就是概率值,也就是說,將樣本代入函數計算以后,可以得到一個概率值,之后根據這個概率值進行分類,如果有一半的概率發生的話,就等於1,反之等於0(1和0的意義看問題)

從上面的敘述中可以發現,邏輯回歸算法既可以看做是一個回歸算法,又可以看作是一個分類算法,如果沒有最后的分類的話,其就是一個回歸算法,算出來的是根據樣本特征來擬合一個事件發生的概率,不過通常拿來用於作為分類算法,注意的是,其只能解決二分類的問題,對於多分類問題,其本身是不支持的

邏輯回歸的計算方式

一個樣本包含若干特征,經過函數的計算,就得到了對應的y值,對於線性回歸來說,其就是

這樣得到的y值,其值域是正無窮到負無窮的,即通過線性回歸的方式可以得到任意的值,對於概率來講,只能在0和1之間取值,因此直接使用線性回顧的方式得到的結果沒有值域的限制,這就讓最后擬合出來的函數可信程度不高

解決方案很簡單,使用線性回歸的方式得到的結果,將這結果作為特征值送到新的函數中

經過轉換以后就可以得到一個在0到1之間的值,這就得到了xb中發生某一個特定事件的概率是多少了

新的函數一般使用sigmoid函數,其表達式為

具體實現的操作

(在notebook中)

加載好包以后,定義sigmoid函數,設置繪制的x和y的范圍,然后繪制

  import numpy as np
  import matplotlib.pyplot as plt

  def sigmoid(t):
      return 1 / (1 + np.exp(-t))

  x = np.linspace(-10,10,500)
  y = sigmoid(x)

  plt.plot(x,y)

圖像為

對於這根曲線來說,左端和右端都趨向於0和1,也就是說值域是在0和1之間,可以發現,在t>0的時候,p>0.5,t<0時,p<0.5,使用函數,將求出來的結果進行sigmoid函數計算,之后根據得到的值來分類

這就有了問題,對於給定的樣本數據集,我們如何才能找到參數theta,使用這種方式可以最大程度的獲得樣本數據集對應的分類輸出呢?

邏輯回歸的損失函數

邏輯回歸的整體框架如下

那么應該怎么建模來求出theta?

在線性回歸中,在theta乘上xb之后就是估計值,讓估計值減去真值,用這個差來度量估計的好壞,對這個差進行平方和以后再平均(MSE),作為損失函數,然后找到使損失函數最小的theta就行了

對於邏輯回歸,整體方向是一樣的,只不過比較麻煩,由於邏輯回歸解決的是個分類問題,所以得出的數據,要不是1,要不是0,需要根據先前計算出的概率來估計是1還是0,那么損失函數也可以分成兩類,如果真值為1,p越小,cost越大,如果真值等於0,p越大,cost越大(cost為損失)

也就是說首先根據分類的不同制定出了損失的大致趨勢,根據真值的不同,分為兩種情況

根據log函數的圖像的特性,可以使用log函數來設計損失函數

在p取0的時候,此時函數趨近於正無窮,p取1的時候,函數為1,通過前面的分析和圖像的理解,可以很清楚的明白其代表的意義

很顯然,這個函數用起來是不太方便的,那么就在兩個式子前加上一個系數,用來表示y的狀態,這樣就合為了一個函數

如果有m個樣本,則就將這些損失加在一起

其中的預測結果為

那么整體的數學解函數就為(凸函數,只存在全局最優解)

接下來就是找到一組theta,使上式得到最小值,這個函數沒有公式解,只能使用梯度下降法來求解

經過一系列的操作計算,最后可以得到對於邏輯回歸的損失函數來說的相應的梯度為

這樣只用使用公式以及梯度下降法就可以解除邏輯回歸算法的問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM