演算法工程師修仙之路:吳恩達機器學習(五)
吳恩達機器學習筆記及作業程式碼實現中文版
第四章 Logistic迴歸
簡化代價函式與梯度下降
-
邏輯迴歸的代價函式: 。
-
我們要試圖找儘量讓 取得最小值的引數 ,所以我們想要儘量減小這一項。
-
如果我們給出一個新的樣本,假如某個特徵為x,我們可以用擬合訓練樣本的引數 ,來輸出對假設的預測。另外,我們假設的輸出,實際上就是這個概率值: ,就是關於x以 為引數, 的概率,你可以認為我們的假設就是估計 的概率。
-
最小化代價函式的方法,是使用梯度下降法(gradient descent)。
-
如果你有n個特徵,也就是說引數向量 包括 一直到 ,那麼你就需要用這個式子: 來同時更新所有 的值。
-
即使更新引數的規則看起來基本相同,但由於假設的定義發生了變化,所以邏輯函式的梯度下降,跟線性迴歸的梯度下降實際上是兩個完全不同的東西。
-
如果你的特徵範圍差距很大的話,那麼應用特徵縮放的方法,同樣也可以讓邏輯迴歸中,梯度下降收斂更快。
高階優化
-
我們有個代價函式 ,而我們想要使其最小化,那麼我們需要做的是編寫程式碼,當輸入引數 時,它們會計算出兩樣東西: 以及 等於 0、1直到n時的偏導數項。假設我們已經完成了可以實現這兩件事的程式碼,那麼梯度下降所做的就是反覆執行這些更新。
-
另一種考慮梯度下降的思路是:我們需要寫出程式碼來計算 和這些偏導數,然後把這些插入到梯度下降中,然後它就可以為我們最小化這個函式。
-
對於梯度下降來說,從技術上講,你實際並不需要編寫程式碼來計算代價函式 。你只需要編寫程式碼來計算導數項,但是,如果你希望程式碼還要能夠監控這些 的收斂性,那麼我們就需要自己編寫程式碼來計算代價函式 和偏導數項。所以,在寫完能夠計算這兩者的程式碼之後,我們就可以使用梯度下降。
-
三種高階優化演算法
- 梯度下降並不是我們可以使用的唯一演算法,還有其他一些演算法,更高階、更復雜。
- 如果我們能用這些方法來計算代價函式 和偏導數項 兩個項的話,那麼這些演算法就是為我們優化代價函式的不同方法。
- 共軛梯度法,BFGS (變尺度法) 和 L-BFGS (限制變尺度法) 就是其中一些更高階的優化演算法,它們需要有一種方法來計算 ,以及需要一種方法計算導數項,然後使用比梯度下降更復雜的演算法來最小化代價函式。
-
三種演算法的優點和缺點:
- 使用這其中任何一個演算法,你通常不需要手動選擇學習率 ,你可以認為演算法有一個智慧的內部迴圈,而且,事實上,他們確實有一個智慧的內部迴圈,稱為線性搜尋(line search)演算法,它可以自動嘗試不同的學習速率 ,並自動選擇一個好的學習速率 ,因此它甚至可以為每次迭代選擇不同的學習速率,那麼你就不需要自己選擇。
- 這些演算法實際上在做更復雜的事情,而不僅僅是選擇一個好的學習率,所以它們往往最終收斂得遠遠快於梯度下降。
- 我們實際上完全有可能成功使用這些演算法,並應用於許多不同的學習問題,而不需要真正理解這些演算法的內環間在做什麼,如果說這些演算法有缺點的話,那麼主要缺點是它們比梯度下降法複雜多了,特別是你最好不要使用 L-BGFS、BFGS 這些演算法,除非你是數值計算方面的專家。
多元分類:一對多
- 對於一個二元分類問題,我們的資料看起來可能是像這樣:
- 對於一個多類分類問題,我們的資料集或許看起來像這樣:
- 我們現在已經知道如何進行二元分類,可以使用邏輯迴歸,對於直線或許你也知道,可以將資料集一分為二為正類和負類。用一對多的分類思想,我們可以將其用在多類分類問題上。
- 現在我們有一個訓練集,好比上圖表示的有 3 個類別,我們用三角形表示 ,方框表示 ,叉叉表示 。我們下面要做的就是使用一個訓練集,將其分成 3 個二元分類問題。
- 我們先從用三角形代表的類別 1 開始,實際上我們可以建立一個,新的"偽"訓練集,型別 2 和型別 3 定為負類,型別 1 設定為正類,我們建立一個新的訓練集, 如下圖所示的那樣,我們要擬合出一個合適的分類器。
- 這裡的三角形是正樣本,而圓形代表負樣本。可以這樣想,設定三角形的值為 1,圓形的值為 0,下面我們來訓練一個標準的邏輯迴歸分類器,這樣我們就得到一個正邊界。
- 為了能實現這樣的轉變,我們將多個類中的一個類標記為正向類( ),然後將其他所有類都標記為負向類,這個模型記作