常見面試演算法:Logistic回歸、樹回歸

  • 2019 年 10 月 28 日
  • 筆記

Logistic 回歸 概述

Logistic 回歸 或者叫邏輯回歸 雖然名字有回歸,但是它是用來做分類的。其主要思想是: 根據現有數據對分類邊界線(Decision Boundary)建立回歸公式,以此進行分類。

須知概念

Sigmoid 函數

回歸 概念

假設現在有一些數據點,我們用一條直線對這些點進行擬合(這條直線稱為最佳擬合直線),這個擬合的過程就叫做回歸。進而可以得到對這些點的擬合直線方程,那麼我們根據這個回歸方程,怎麼進行分類呢?請看下面。

二值型輸出分類函數

我們想要的函數應該是: 能接受所有的輸入然後預測出類別。例如,在兩個類的情況下,上述函數輸出 0 或 1.或許你之前接觸過具有這種性質的函數,該函數稱為 海維塞得階躍函數(Heaviside step function),或者直接稱為 單位階躍函數。然而,海維塞得階躍函數的問題在於: 該函數在跳躍點上從 0 瞬間跳躍到 1,這個瞬間跳躍過程有時很難處理。幸好,另一個函數也有類似的性質(可以輸出 0 或者 1 的性質),且數學上更易處理,這就是 Sigmoid 函數。 Sigmoid 函數具體的計算公式如下:

上圖表示參數 θ 與誤差函數 J(θ) 的關係圖 (這裡的誤差函數是損失函數,所以我們要最小化損失函數),紅色的部分是表示 J(θ) 有著比較高的取值,我們需要的是,能夠讓 J(θ) 的值盡量的低。也就是深藍色的部分。θ0,θ1 表示 θ 向量的兩個維度(此處的θ0,θ1是x0和x1的係數,也對應的是上文w0和w1)。

可能梯度下降的最終點並非是全局最小點,可能是一個局部最小點,如我們上圖中的右邊的梯度下降曲線,描述的是最終到達一個局部最小點,這是我們重新選擇了一個初始點得到的。

看來我們這個演算法將會在很大的程度上被初始點的選擇影響而陷入局部最小點。

Logistic 回歸 原理

Logistic 回歸 工作原理

每個回歸係數初始化為 1  重複 R 次:     計算整個數據集的梯度     使用 步長 x 梯度 更新回歸係數的向量  返回回歸係數

Logistic 回歸 開發流程

收集數據: 採用任意方法收集數據  準備數據: 由於需要進行距離計算,因此要求數據類型為數值型。另外,  結構化數據格式則最佳。  分析數據: 採用任意方法對數據進行分析。  訓練演算法: 大部分時間將用於訓練,訓練的目的是為了找到最佳的分類回歸係數。  測試演算法: 一旦訓練步驟完成,分類將會很快。  使用演算法: 首先,我們需要輸入一些數據,並將其轉換成對應的結構化數值;接著,  基於訓練好的回歸係數就可以對這些數值進行簡單的回歸計算,判定它們屬於哪個類別;在這之後,我們就可以在輸出的類別上做一些其他分析工作。

Logistic 回歸 演算法特點

優點: 計算代價不高,易於理解和實現。  缺點: 容易欠擬合,分類精度可能不高。  適用數據類型: 數值型和標稱型數據。

附加 方嚮導數與梯度

Logistic 回歸 項目案例

項目案例1: 使用 Logistic 回歸在簡單數據集上的分類

完整程式碼地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/5.Logistic/logistic.py

項目概述

在一個簡單的數據集上,採用梯度上升法找到 Logistic 回歸分類器在此數據集上的最佳回歸係數

開發流程

收集數據: 可以使用任何方法  準備數據: 由於需要進行距離計算,因此要求數據類型為數值型。另外,  結構化數據格式則最佳  分析數據: 畫出決策邊界  訓練演算法: 使用梯度上升找到最佳參數  測試演算法: 使用 Logistic 回歸進行分類  使用演算法: 對簡單數據集中數據進行分類

收集數據: 可以使用任何方法

我們採用存儲在 TestSet.txt 文本文件中的數據,存儲格式如下:

可參考http://blog.csdn.net/achuo/article/details/51160101

項目案例2: 從疝氣病症預測病馬的死亡率

完整程式碼地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/5.Logistic/logistic.py

項目概述

使用 Logistic 回歸來預測患有疝病的馬的存活問題。疝病是描述馬胃腸痛的術語。然而,這種病不一定源自馬的胃腸問題,其他問題也可能引發馬疝病。這個數據集中包含了醫院檢測馬疝病的一些指標,有的指標比較主觀,有的指標難以測量,例如馬的疼痛級別。

開發流程

收集數據: 給定數據文件  準備數據: 用 Python 解析文本文件並填充缺失值  分析數據: 可視化並觀察數據  訓練演算法: 使用優化演算法,找到最佳的係數  測試演算法: 為了量化回歸的效果,需要觀察錯誤率。根據錯誤率決定是否回退到訓練階段,          通過改變迭代的次數和步長的參數來得到更好的回歸係數  使用演算法: 實現一個簡單的命令行程式來收集馬的癥狀並輸出預測結果並非難事,          這可以作為留給大家的一道習題

收集數據: 給定數據文件

病馬的訓練數據已經給出來了,如下形式存儲在文本文件中:

額外內容(可選讀)

在上文中,當Sigmoid函數大於 0.5 的數據被分入 1 類,小於 0.5 即被歸入 0 類。其實0.5也是可以改動的。 比如大於 0.9 的數據被分入 1 類,小於 0.9 即被歸入 0 類。

Logistic回歸 和 最大熵模型

Logistic回歸和最大熵模型 都屬於對數線性模型 (log linear model)。 當類標籤(class label)只有兩個的時候,最大熵模型就是 logistic 回歸模型。 學習它們的模型一般採用極大似然估計或者正則化的極大似然估計。Logistic 回歸和最大熵模型學習可以形式化為無約束最優化問題。(關於最大熵模型,可以閱讀《統計學習方法》 第六章。)

其他演算法

除了梯度下降,隨機梯度下降,還有Conjugate Gradient,BFGS,L-BFGS,他們不需要指定alpha值(步長),而且比梯度下降更快,在現實中應用的也比較多。 當然這些演算法相比隨機梯度要複雜。

綜上這些演算法都有一個共通的缺點就是他們都是不斷去逼近真實值,永遠只是一個真實值的近似值而已。

多標籤分類

邏輯回歸也可以用作於多標籤分類。 思路如下:

假設我們標籤A中有a0,a1,a2….an個標籤,對於每個標籤 ai (ai 是標籤A之一),我們訓練一個邏輯回歸分類器。

即,訓練該標籤的邏輯回歸分類器的時候,將ai看作一類標籤,非ai的所有標籤看作一類標籤。那麼相當於整個數據集裡面只有兩類標籤:ai 和其他。

剩下步驟就跟我們訓練正常的邏輯回歸分類器一樣了。

測試數據的時候,將查詢點套用在每個邏輯回歸分類器中的Sigmoid 函數,取值最高的對應標籤為查詢點的標籤。

https://github.com/apachecn/AiLearning/blob/dev/blog/ml/5.Logistic%E5%9B%9E%E5%BD%92.md