1. 程式人生 > 其它 >軟體測試介紹

軟體測試介紹

邏輯迴歸

1. 邏輯迴歸中的條件概率

談到分類,也許沒有比邏輯迴歸更簡單的方法了,受到工業界的極大的歡迎。邏輯迴歸的基本概念,以及如何一步步來構建邏輯迴歸中起到最核心作用的條件概率。

二分類問題

  • 預測貸款違約情況(會/不會)
  • 預測廣告點選率(會/不會)
  • 情感分析(正面/負面)
  • 預測疾病(陽性/陰性)

基準(Baseline)

基準(baseline)在建模過程中非常重要。簡單來講,在設計模型的階段, 首先試圖通過簡單的方法來快速把系統搭起來, 之後逐步把模組細化, 從而不斷得到更好的解決方案。對於分類任務,邏輯迴歸模型可以稱得上

是最好的基準,也是比較靠譜的基準。 在實際工作中,切忌一上來就使用複雜的模型,這是不可取的。

分類問題

二分類問題

核心問題是: 如果通過條件概率p(y|x)來描述xy之間的關係。

邏輯迴歸實際上是基於線性迴歸模型構建起來的, 所以這裡也希望通過線性迴歸方程一步步來構造上述的條件概率p(yx)。

我們是不能把條件概率p(yx)表示成p(y|x) = wT x + b,因為右邊的式子不滿足條件概率的性質。

那麼是否可以改造線性迴歸wTx + b使得它的值域對映到(0, 1)區間了?

如何把正無窮到負無窮區間的值對映到(0,1)區間?

  答案就是使用邏輯函式。

邏輯函式

邏輯函式的應用非常廣泛, 特別是在神經網路中處處可見, 很大程度上是源於它不可或缺的性質:

可以把任意區間的值對映到(0, 1)區間。這樣的值既可以作為概率, 也可以作為一種權重。另外,由於大多數模型在訓練時涉及到導數(derivative)的計算, 同時邏輯函式的導數具有極其簡單的形態, 這也使得邏輯函

數受到了很大的歡迎。

樣本的條件概率

當把 線性迴歸 的式子和邏輯函式拼在一起的時候, 就可以得到合理的條件概率的表示式。

邏輯迴歸中我們針對的是 二分類問題 , 所以一個樣本必須要屬於其中的某一個分類。這就意味著,條件概率p(y=1|x)p(y=0|x)之和一定會等於1。

對於邏輯迴歸, 它的引數是w, b, 前者是向量, 後者是標量。在這裡, 兩個條件概率的表示式是可以替換順序的。只要能保證兩個條件概率之和等於1就可以了。

2. 邏輯迴歸的目標函式

如何構造邏輯迴歸模型的目標函式,它是從條件概率獲得。先理解最大似然估計,之後在最大似然的框架下試著推匯出邏輯迴歸的目標函式。

最大似然估計

最大似然估計(Maximum Likelihood Estimation)在機器學習建模中有著舉足輕重的作用。它可以指引我們去構造模型的目標函式, 以及求出使 目標函式 最大或者最小的引數值。

如何理解最大似然估計呢?

  一個比較抽象的解釋是:假如有個未知的模型(看作是黑盒子), 並且它產生了很多能觀測到的樣本。這時候, 我們便可以通過最大化這些樣本的概率反過來求出模型的最優引數,這個過程稱之為最大似然估計

邏輯迴歸的似然函式

邏輯迴歸的似然函式

對於單個樣本的條件概率已經定義過了, 這個概率也可以看作是似然概率。下一步得把所有的樣本全部考慮進來, 這時候我們得到的就是所有樣本的似然概率。

有了所有樣本的似然概率之後, 我們的目標就是要求出讓這個似然概率最大化的模型的引數( 對於邏輯迴歸模型就是w,b),這個過程稱之為最大似然估計(maximum likelihood estimation)

邏輯迴歸的最大似然估計

得到了邏輯迴歸的目標函式之後,首先來做一層簡化,就是把乘積的形式改造成加法形式。這對於後續的運算有很大的幫助。

經過一系列的簡化操作之後,發現不能繼續再簡化了。剩下的工作就是要尋找讓目標函式最小化的引數w,b。那如何求出最優解呢? 一個經典的優化演算法是梯度下降法!

3. 梯度下降法

優化領域的核心內容 - 梯度下降法。幾乎所有的機器學習模型我們均可以通過梯度下降法來學出最優的引數。另外,我們試著通過梯度下降法來求解邏輯迴歸的最優引數。

求函式的最大值/ 最小值

對於求解函式的最優引數, 通常有兩種簡單的方法:

  • 把導數設定為0
  • 基於迭代式的演算法來求解, 如梯度下降法

    第一種方法我們也稱之為解析解(Analytic Solution)。但這裡需要注意的一點是並不是所有的目標函式都可以通過把導數設定為0的方式來求解的。一個經典的例子就是邏輯迴歸的目標函式。 對於這類的問題我們不得不採用另外一種更通用的方法-迭代式的優化演算法。其中最經典的無非就是梯度下降法

梯度下降法

梯度下降法非常實用, 幾乎所有的模型我們都可以使用梯度下降法來訓練。這也說明此方法是具有通用性的,不管問題有多複雜。特別是對於深度學習, 它的作用無可替代, 我們常說的反向傳播演算法(back-

propagation)其實本質上就是梯度下降法。需要注意的一點是: 梯度下降法依賴於求導, 這也是為什麼對函式的求導能力如此重要!

對於梯度下降法來說,有一個重要的引數叫作學習率(learning rate), 我們可以把它看作是可調節的引數(也稱之為超引數)。學習率對於收斂以及對最終的結果起到很重要的作用。

對於邏輯函式的求導

梯度下降法的核心是對函式的求導。 邏輯迴歸的目標函式本身具有一定的複雜度, 其中就涉及到對邏輯函式的求導過程。對邏輯函式的求導:

邏輯迴歸的梯度下降法

對於邏輯迴歸,我們有兩組引數分別為w,b, 所以求導的關鍵也就圍繞這兩組引數。這個過程中會涉及到一些複合函式的求導法則。

有了對w, b的結果之後,最終可以寫出整個邏輯迴歸的梯度下降法的過程。

梯度下降法過程中, 如何判斷迭代過程是否已經收斂 ?

  • 如果在相鄰兩個時間段損失函式沒有任何變化或者變化很小,即可以認為優化過程已收斂
  • 如果在相鄰兩個時間段引數的值沒有變化或者變化很小,即可以認為優化過程已收斂
當我們使用梯度下降法來求解邏輯迴歸的最優解時,不管怎麼初始化,結果是一樣的。主要的原因是邏輯迴歸的目標函式為凸函式。 如果一個函式為 凸函式 ,它只有全域性最優解,所以不管怎麼初始化,最後收斂到的結果是同一個點。

4. 隨機梯度下降法

隨機梯度下降法以及小批量梯度下降法。這兩者均是梯度下降法的變種,適合用在資料量比較大的場景。實際上,工業界中用得最廣泛的是小批量梯度下降法。

梯度下降法的缺點

當樣本很多的時候, 每一次迭代所花費的時間成本是很高的。舉個例子, 當資料集裡有一百萬個樣本的時候, 每一次的引數更新就需要迴圈所有的樣本並把它們的梯度做累加。

隨機梯度下降法

隨機梯度下降法(SGD) 可以看作是梯度下降法的極端的情況。在梯度下降法裡,每次的引數更新依賴於所有的樣本。然而, 在隨機梯度下降法裡, 每一次的迭代不再依賴於所有樣本的梯度之和, 而是僅僅依賴於其中

一個樣本的梯度。所以這種方法的優勢很明顯, 通過很“便宜”的方式獲得梯度, 並頻繁的對引數做迭代更新, 這有助於在更短的時間內得到收斂結果。

雖然SGD用很低的成本可以更新到模型的引數,但也有自身的缺點。

  由於梯度的計算僅依賴於一個樣本,計算出的結果包含較大的噪聲;實際上, SGD的收斂效率通常是更高的, 而且有些時候SGD的最後找出來的解更優質。

由於在隨機梯度下降法中, 我們用一個樣本的梯度來代替所有樣本的梯度之和, 計算出來的結果包含大量噪聲,並且不太穩定。為了部分解決這個問題,我們通常會把學習率設定為較小的值, 這樣可以有效削弱梯度

計算中帶來的不穩定性。

相比梯度下降法, 當我們使用隨機梯度下降法的時候可以看到每一次迭代之後的目標函式或者損失函式會有一些波動性。有時候的更新會帶來目標值的提升,其他時候的更新可能反而讓目標值變得更差。但只要實

現細節合理,大的趨勢是沿著好的方向而發展的。

小批量梯度下降法

梯度下降法和隨機梯度下降法其實可以看作是兩個極端, 前者在計算梯度時考慮所有的樣本, 後者則僅僅考慮其中的一個樣本既然這兩個極端各有各自的優缺點,那是否可以使用一個折中的方案呢? 答案是肯定

的,這個方法叫作小批量梯度下降法(mini-batch gradient descent)。 它每次從樣本中選擇一部分子集,並基於這些選出來的樣本計算梯度, 並做引數的更新。

下面的程式碼用來實現基於梯度下降法的邏輯迴歸。如何把迴圈的程式碼寫成矩陣、向量的形式。

比較不同的演算法

對於各類梯度下降法做一個總結:

  • 在工業界中,最常用的方法為小批量梯度下降法
  • 小批量梯度下降法也有助於更好地利用GPU的計算能力
  • 小批量梯度下降法折中了梯度下降法和隨機梯度下降法各自的優缺點,更好地解決梯度噪聲的問題,更新更加穩定。
  • 隨機梯度下降法或者小批量梯度下降法有助於解決鞍點(saddle point)的問題。

5. 預測銀行客戶是否開設賬戶

用邏輯迴歸模型來解決一個分類問題 - 預測銀行客戶是否開設賬戶。在這個過程中,會涉及到資料視覺化、獨熱編碼、F1-SCORE等技術。

基於使用者的相關資訊(如年齡,教育程度、婚姻狀況等)來預測是否使用者未來會有開設定期存款賬戶的需求。這種問題在銀行業務上很常見,對於銀行來講,他們希望挖掘出一些潛在的客戶,並精準地提供一些相關的服 務。 這個問題是很經典的二分類問題(預測結果為會開設或者不會開設),很適合用邏輯迴歸來解決。

理解資料

理解資料是解決問題的第一步,在這裡我們從多方位來理解一下資料本身的一些特點比如哪些特徵具有更好地預測能力,下面給出了部分資料的快照以及欄位的說明。

對於二分類問題來講,一個很重要資訊是標籤資料如每個標籤的佔比有多少。當一類標籤的佔比明顯高於另外一類的時候,我們其實要採取一些措施的,這裡包括對樣本的處理,也包括評估結果上的處理。 對於每一個特徵,我們也可以做一些分析,如觀察哪些特徵對最後的預測產生更重要的影響。對於這些特徵的分析我們可以通過一些視覺化的分析即可以得到。

特徵選擇

對特徵本身的重要性有大概的認知之後,我們可以選擇把那些關聯度不高的特徵可以從資料中剔除掉。對於特徵個數很多的資料來講,這種操作還是非常有效的。但由於目前案例的資料特徵並沒有特別多,在這裡先保留所有的特徵。關於特徵選擇,其實有很多不同的方法如根據相關性來選擇、根據貪心演算法來選擇、根據樹模型來選擇等等,在後續的課程裡會做詳細的講解。

類別變數和獨熱編碼

對於類別型變數如本科、碩士、博士,在放到模型之前我們需要做特殊的處理,因為我們都知道模型的輸入一定是數量化的資訊,那如何把“本科,碩士,博士“這些欄位轉換成數量化的訊號呢?

如果一個特徵的值為類別型變數,”本科“, ”碩士“,”博士“,每一個值如何轉換成數字呢?

碩士大於本科, 博士大於碩士, 類似於男大於女, 或者女大於男。 從這個角度考慮,我們就不能把類別型變數直接設定為某一個具體的值, 因為這些值本身是有大小關係的。

正確的做法是把變數值轉化為獨熱編碼的形態

獨熱編碼

對於類別型變數,正確做法是使用獨熱編碼(one-hot encoding), 這也是最常用的編碼方式。 然後直接把獨熱編碼輸入到模型就可以了。 一般來講,獨熱編碼的轉換會讓特徵維度上升,比如對於一個類別型變數 - “城

市”, 可能的取值為1000多個,那當我們把這個變數轉換成獨熱編碼之後就變成了1000多維的向量。

模型的評估

對於這個案例,標籤型別的佔比是很不平衡的,這種資料我們也稱之為不平衡資料(imbalanced data)。 對於不平衡資料,評估標準上也需要格外地注意,因為選錯了評估標準可能導致建模本身失去了意義。

假如我們有1000個樣本,其中990個為負樣本,10個為正樣本,最後我們以準確率來評估模型的效果。

由於負樣本很多,假如把所有的樣本分類成負樣本,準確率已經高達99%,看似訓練得很好。

在資料不平衡的場景下,準確率會失去意義。我們可以不訓練任何的模型,直接把所有的樣本分類成樣本,準確率仍然高達99%,所以這個說明不了任何問題。 在這種情況下,我們傾向於使用另外一種評估標準叫作F1-SCORE。