Page 1

2019/1/30

Logistic regression 邏輯迴歸 – CH.Tseng

CH.Tseng IT & Photography

Logistic regression 邏輯迴歸 chtseng / 2017 年 01 月 26 日 / 心得-機器學習

Logistic Regression適合用一般二元分類的問題,亦即判斷某個問題是true還是false,比起K-NN其原理可能稍複雜一些,不過由於我對數理不甚 拿手且非本科系,因此本文僅能以概觀的方式去瞭解與說明,如果下面的說明與你的專業認知有誤,請多多包涵並私下指導。

什麼是Logistic Regression 我們熟知的Regression迴歸是一種統計學上分析數據的方法,可用於了解兩個或多個變數間是否相關、相關方向與強度關係,也就是,它的目的 在於找出一條最能夠代表所有觀測資料的函數,然而,資料分佈的形態千變萬化何止一種,因此,迴歸分析又可細分成不同方法以因應各種模式,例 如,僅針對兩個不同變數的簡單線性迴歸(simple linear regression)、針對簡單線性迴歸所延伸出的複迴歸分析(multiple regression analysis)可 用以分析兩組以上的自變數、還有針對非線性關係的非線性迴歸(Nonlinear Regression)…等,其中,屬於線性的邏輯迴歸Logistic Regression,它 的特性是其回傳的應變數值永遠介於0與1之間,其圖形長得像這樣:它的函式及圖形是:

Logistic Regression

原理

https://chtseng.wordpress.com/2017/01/26/logistic-regression-%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8/

1/8


2019/1/30

Logistic regression 邏輯迴歸 – CH.Tseng

能繪出如上曲線的我們稱為logistic function或sigmoid function(或稱S函數),最大不會超過1,最小不會小於0,這很適合我們應用在判斷是與 否的場合,例如判斷性別為男或女、是貓還是狗、有沒有人、考試有沒有通過…等。因此,在機器學習中,我們就需要能在這些散佈的資料點中,找 出一點最擬合的logistic function,用來預測未來會加入的資料其所代表的意義(1或0)。

如下兩圖,logistic function可以很陡斜也可以很平緩,這特性可由參數來決定,當X增加其機率愈大,反之則愈趨近於0。

假設我們要判斷一張圖片中的動物是狗(Label=1)還是貓(Label=0),首先,我們會從圖像中取得其特徵值,該特徵值可使用我們之前提過的 HOG、Color Histogram…等等。假設其特徵值如下: V = [V0, V1, V2, V3, V4…, Vn] 接下來,我們針對各個特徵值Vi給予不同的權重Wi,並計算其總合X。 X = ∑i WiVi 將該X值代入我們的預測函式s(x).會得到一個介於0與1之間的數值,如果該值>0.5,我們可將其分類到狗(Label=1),如果<0.5,就分類到貓 (Label=0)。

與ascent

Gradient descent

上面的動作看起來很單純,不過最大的問題在於,我們要如何指定每個特徵的權重值Wi?我們怎麼知道這個值要設多少,而且怎麼得來的?這要透過 Gradient descent ascent

回到剛剛計算總合的這個步驟 X = ∑i WiVi,它展開如下: X = W0 x V0 + W1 x V1 + W2 x V2 + … + Wn x Vn 它可以用矩陣的方式寫成:X = WT x V V是輸入的特徵值,WT是與其相關的權重值,我們的目的是要找出WT值,這就要應用到所謂的Gradient ascent/descent(梯度上升/下降 法),來找出這些特徵值中最佳的WT值。 Wiki針對Gradient ascent/descent的解釋很清楚,這段話可以參考看看:Gradient descent(梯度下降法)是一個一階最佳化算法,通常也稱 為最速下降法。要使用梯度下降法找到一個函數的局部極小值,必須向函數上當前點對應梯度(或者是近似梯度)的反方向的規定步長距離點進行疊 代搜索。如果相反地向梯度正方向疊代進行搜索,則會接近函數的局部極大值點;這個過程則被稱為梯度上升法。所以我們可透過gradient ascent方 式找出其最大的WT值,其過程就好似如下的圖形,所以此法又稱為Hill Climbing(登山法)。

https://chtseng.wordpress.com/2017/01/26/logistic-regression-%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8/

2/8


2019/1/30

Logistic regression 邏輯迴歸 – CH.Tseng

計算Logistic Regression 我們試看看用Python繪出logistic function圖形並計算某點的Logistic regression值。記得第一段中提到logistic function是 可用python寫成1 / (1 + (np.e ** (-x)))的計算式。

,這

import matplotlib.pyplot as plt import numpy as np x = np.arange(-50, 50, 0.1) #–> 從-50到49之間相間隔0.1,取出1000個數字 y = 1 / (1 + (np.e ** (-x))) #–> 代入計算每個x的logistic function值 plt.style.use(“ggplot") plt.figure() plt.plot(x, y) plt.title(“Sigmoid (Zoomed Out)") plt.xlim([-50, 50]) #–>X軸座標限定在-50與50之間 plt.show() #上面的程式可畫出如下的圖形:

#接下來,我們看看怎麼取得logistic function值。 a=np.array([0.62, 0.97, 0.05, 0.33]) #→假設這些是我們某張圖片的所有特徵值 b=np.array([0.26, 0.18 ,0.22 ,0.1]) #→假設這些是我們設定的加權值 v=np.sum(a*b) #→兩者相乘的總和即為加權後特徵值V print 1 / (1 + (np.e ** (-v))) #代入S函數公式求其logistic function值 計算結果會得到0.593824864461,這是一張圖片的例子,此值即可用以判斷該圖片為1或0機率,或可視為這張圖片有六成機率是1。 https://chtseng.wordpress.com/2017/01/26/logistic-regression-%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8/

3/8


2019/1/30

Logistic regression 邏輯迴歸 – CH.Tseng

開始使用Logistic Regression Labeled Faces in the Wild(LFW)是一個相當有名且經常被Google、Facebook、騰訊、Face++…等大廠引用作為測試標準的人臉識別資料庫,該資料庫 最早由馬薩諸塞大學(University of Massachuse s)的計算機視覺實驗室維護並於2007年開放使用,其圖片大部份取材於新聞圖片中的真實人臉,每個 人物的臉部角度、神情、時間、地點、光線、衣著皆不固定,目前LFW共有13,233圖片,包含了5,749位不同的人物,其中1,680人有超2張以上的圖 像。相較於實驗室中所收集的有條件限制的人臉,LFW屬於非受限的人臉識別,難度更高。

Scikit-learn的子模組datasets內建支援LFW資料庫,使用fetch_lfw_people命令即可匯入整個LFW dataset ,因此第一次執行fetch_lfw_people命令會 花費較久的時間。 #!/usr/bin/env python # -*- coding: utf-8 -*#匯入必要的模組 from __future__ import print_function from sklearn.cross_validation import train_test_split from sklearn.metrics import classification_report from sklearn.linear_model import LogisticRegression from sklearn import datasets import numpy as np import imutils import cv2 #參數min_faces_per_person=70表示每個人物最少需要70個樣本 #參數funneled=True表示人臉需是funneled且aligned(此部份未來針對人臉識別再說明) #參數resize=0.5表示圖片尺寸要縮小為一半 print(“[INFO] importing LFW dataset…") dataset = datasets.fetch_lfw_people(min_faces_per_person=70, funneled=True, resize=0.5) #參數test_size=0.25指25%作為Test dataset,其餘75%為Training dataset. #我們會得到兩組datasets及labels for Training及Test (trainData, testData, trainLabels, testLabels) = train_test_split(dataset.data, dataset.target,

test_size=0.25, random_state=42)

#開始訓練 print(“[INFO] start training model…") model = LogisticRegression() model.fit(trainData, trainLabels) #訓練成果報告 print(“[INFO] Reporting …") print(classification_report(testLabels, model.predict(testData), target_names=dataset.target_names)) https://chtseng.wordpress.com/2017/01/26/logistic-regression-%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8/

4/8


2019/1/30

Logistic regression 邏輯迴歸 – CH.Tseng

執行結果

平均的正確率達86%,看來使用Logistic Regression來識別臉孔的效果還不錯。 不過,如果細看的話,會發現這個高平均值其實是受到其中幾筆資料的影響:Colin Powell、George W Bush及Hugo Chavez,這三人的識別率都超 過九成,而Gerhard Schroeder僅有六成多,其餘多在七成,原因在於除了每個人的樣本數不同所造成的訓練差異外,一般在進行臉孔識別時,我們其 實不會直接將圖片丟入Logistic Regression進行分析(如同上方的範例),而會先取出圖片中特定區域的向量特徵,再量化這些內容放入模型中進行 訓練及評估,這部份我打算未來在學習人臉分析中再詳細說明。

與KNN模型比較 還記得上一次我們使用HOG + KNN模型來分類判斷目前MIS辦公區的狀況嗎?忘了話請參考此篇:USE HOG + KNN FOR MACHINE LEARNING_2,下表是那次的結果: precision

recall

f1-score

support

Akai_CHTseng

1.00

0.59

0.74

22

Akai_Vincent

0.64

0.50

0.56

18

Akai_iVersion

1.00

0.18

0.31

11

Akai_not_here

0.85

0.94

0.90

109

All_together

0.62

0.84

0.71

194

CHTseng_Vincent

0.83

0.73

0.77

33

CHTseng_iVersion

0.41

0.86

0.55

36

CHTseng_not_here

0.11

1.00

0.20

2

No_people

0.89

0.63

0.74

54

Only_CHTseng_here

0.72

0.74

0.73

124

Only_Vincent_here

0.72

0.50

0.59

26

Only_iVersion_here

0.75

0.56

0.64

32

Vincent_iVersion

0.10

1.00

0.18

2

Vincent_not_here

0.88

0.77

0.82

73

iVersion_not_here

0.91

0.61

0.73

276

avg / total

0.79

0.72

0.73

1012

KNN平均的準確率約在7成,而且各場景的辨識分數有高有低並不一致。現在,我們使用相同的Training與Testing圖檔,但改用Logistic Regression模 型搭配來試看看。(程式碼放在h ps://github.com/ch-tseng/LinearRegression_Office.git (h ps://github.com/ch-tseng/LinearRegression_Office.git)) 執行指令: $ python svm_mask_report.py -d office/train -t office/knndata 執行結果: precision

recall

f1-score

support

https://chtseng.wordpress.com/2017/01/26/logistic-regression-%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8/

5/8


2019/1/30

Logistic regression 邏輯迴歸 – CH.Tseng

Akai_CHTseng

0.98

0.98

0.98

54

Akai_Vincent

0.95

0.94

0.94

64

Akai_iVersion

0.94

1.00

0.97

34

Akai_not_here

0.97

1.00

0.99

106

All_together

0.96

0.96

0.96

134

CHTseng_Vincent

1.00

0.97

0.99

102

CHTseng_iVersion

1.00

0.95

0.98

62

CHTseng_not_here

0.90

0.98

0.94

58

No_people

1.00

0.98

0.99

55

Only_Akai_here

0.92

0.97

0.95

36

Only_CHTseng_here

0.99

0.99

0.99

70

Only_Vincent_here

0.98

1.00

0.99

47

Only_iVersion_here

1.00

1.00

1.00

55

Vincent_iVersion

1.00

1.00

1.00

71

Vincent_not_here

0.97

0.97

0.97

59

iVersion_not_here

0.98

0.93

0.95

109

avg / total

0.97

0.97

0.97

1116

結果相當令我們滿意,準確率平均高達97%,且各場景的辨識結果也很平均,沒有差距過大的情況,看來這些針對MIS block區域的相片 dataset(無燈光變化及人員走動等例外情境的相片)較屬於Linear而非non-Linear separable,所以使用Logistic Regression會比起K-NN更適合,但 是嚴格來說,不同的模型有其適合條件,最終的選擇應該要透過Cross Validation甚至是Nested Cross Validation的操作後才能評選出來,這部份可到 未來我們學習到更多的模型後再來進行。

實際測試 最後我們用2017/1/17當日全天的所有圖片,扣除下列場景的相片(因為這類的場景當初並沒有放入訓練圖庫中學習)共571張,看看準確率有多 少(程式碼放在h ps://github.com/ch-tseng/LinearRegression_Office.git (h ps://github.com/ch-tseng/LinearRegression_Office.git))。 以下為事先扣除的相片:

https://chtseng.wordpress.com/2017/01/26/logistic-regression-%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8/

6/8


2019/1/30

Logistic regression 邏輯迴歸 – CH.Tseng

將1/17當日的相片放置於office-0117資料夾中,然後執行如下指令: python lr_mask_report.py -d office/train -t office/office-0117 執行結果如下: precision

recall

f1-score

support

Akai_CHTseng

1.00

0.80

0.89

5

Akai_Vincent

0.00

0.00

0.00

0

Akai_iVersion

1.00

0.50

0.67

10

Akai_not_here

0.97

0.91

0.94

122

All_together

1.00

0.89

0.94

115

CHTseng_Vincent

0.85

1.00

0.92

35

CHTseng_iVersion

0.98

0.97

0.98

63

CHTseng_not_here

0.67

1.00

0.80

2

No_people

0.97

1.00

0.99

39

Only_CHTseng_here

0.98

0.98

0.98

41

Only_iVersion_here

1.00

1.00

1.00

31

Vincent_iVersion

1.00

1.00

1.00

12

Vincent_not_here

0.89

0.98

0.93

43

iVersion_not_here

0.94

0.94

0.94

53

avg / total

0.95

0.95

0.95

571

結果相當令人滿意,在每種場景僅有37張相片的訓練下,查準率(Precision)和查全率(Recall)皆到達95%的水準。 ADVERTISEMENT

https://chtseng.wordpress.com/2017/01/26/logistic-regression-%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8/

7/8


2019/1/30

Logistic regression 邏輯迴歸 – CH.Tseng

廣告 廣告

REPORT THIS AD 廣告

REPORT THIS AD

發表者:chtseng 檢視 chtseng 的所有文章

在WordPress.com寫網誌.

REPORT THIS AD

https://chtseng.wordpress.com/2017/01/26/logistic-regression-%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8/

8/8

Profile for Patrick Ho

Logistic regression 邏輯迴歸 – CH.Tseng  

Logistic regression 邏輯迴歸 – CH.Tseng

Logistic regression 邏輯迴歸 – CH.Tseng  

Logistic regression 邏輯迴歸 – CH.Tseng

Advertisement