迴歸算法是一種通過最小化預測值與實際結果值之間的差距,而得到輸入特徵之間的最佳組合方式的一類算法。對於連續值預測有線性迴歸等,而對於離散值/類別預測,我們也可以把邏輯迴歸等也視作迴歸算法的一種。線性迴歸主要用來解決連續值預測的問題,邏輯迴歸用來解決分類的問題,輸出的屬於某個類別的概率,工業界經常會用邏輯迴歸來做排序。在SVM、GBDT、AdaBoost算法中都有涉及邏輯迴歸,迴歸中的損失函數、梯度下降、過擬合等知識點也經常是面試考察的基礎問題。因此很重要的兩個內容,需要仔細體會~
1. 線性迴歸
1.1 線性迴歸問題,適用於有監督學習的預測。
一元線性迴歸分析:y=ax+b,只包括一個自變量和一個因變量,且二者的關係可用一條直線近似表示。
多元線性迴歸分析:hθ(x)=θ0+θ1x1+...+θnxn,包括兩個或兩個以上的自變量,並且因變量和自變量是線性關係。
1.2 損失函數
損失函數:通俗地說,損失函數用來衡量參數選擇的準確性。損失函數定義爲:
這個公式計算的是線性迴歸分析的值與實際值的距離的平均值。顯然,損失函數得到的值越小,損失也就越小。
1.3 梯度下降
怎樣最小化損失函數?損失函數的定義是一個凸函數,就可以使用凸優化的一些方法:
1) 梯度下降:逐步最小化損失函數的過程。如同下山的過程,找準下山方向(梯度),每次邁進一步,直至山底。如果有多個特徵,對應多個參數θ,需要對每一個參數做一次迭代θj:=θj−α∂∂θjJ(θ0,θ1),做完以後再求J函數。
學習率:上段公式中的α就是學習率。它決定了下降的節奏快慢,就像一個人下山時候步伐的快慢。α過小會導致收斂很慢,α太大有可能會導致震盪。如何選擇學習率呢,目前也有好多關於學習率自適應算法的研究。工程上,一般會調用一些開源包,包含有一些自適應方法。自己做的話會選擇相對較小的α,比如0.01。下圖展示了梯度下降的過程。
2) 牛頓法:速度快適用於小數據,大數據比較耗內存。
1.4 過擬合與正則化
迴歸與欠/過擬合:
1) 欠擬合:函數假設太簡單導致無法覆蓋足夠的原始數據,可能造成數據預測的不準確。
2) 擬合問題:比如我們有很多的特徵,假設的函數曲線對原始數據擬合的非常好,從而喪失一般性,導致對新給的待預測樣本,預測效果差。下圖就是一個例子,一個複雜的曲線,把所有點都擬合進去了,但是泛化能力變差了,沒有得到一個規律性的函數,不能有效的預測新樣本。
過擬合解決方法:
1) 減少特徵個數:手工選擇保留特徵、模型選擇的算法選擇特徵。
2) 正則化:在原來的損失函數中加入θ的平方項,來防止波動太大。
即L2正則化。留下所有的特徵,但是減少參數的大小。
2. 邏輯(斯特)迴歸
2.1 應用分析
與線性迴歸不同,邏輯迴歸主要用於解決分類問題,
2.2 Sigmoid函數
邏輯迴歸首先把樣本映射到[0,1]之間的數值,這就歸功於sigmoid函數,可以把任何連續的值映射到[0,1]之間,數越大越趨向於0,越小越趨近於1。Sigmoid函數公式如下:
函數的圖像如下圖,x=0的時候y對應中心點。
判定邊界:對多元線性迴歸方程求Sigmoid函數hθ(x)=g(θ0+θ1x1+...+θnxn),找到一組θ,假設得到−3+x1+x2=0的直線,把樣本分成兩類。把(1,1)代入g函數,概率值<0.5,就判定爲負樣本。這條直線就是判定邊界,如下圖:
除了線性判定邊界,還有較複雜的非線性判定邊界。
2.3 邏輯迴歸的損失函數
線性迴歸的損失函數對邏輯迴歸不可用,因爲邏輯迴歸的值是0或者1,求距離平均值會是一條不斷彎曲的曲線,不是理想的凸函數。聰明的數學家找到了一個適合邏輯迴歸的損失定義方法:
其中hθ(x)是一個概率值,y=1表示正樣本,y=0表示負樣本。當y是正樣本時,如果給定的概率特別小(預測爲負樣本),損失就會很大;給定的概率很大(預測爲正樣本),損失就會接近0。損失值的函數如圖:
帶L2正則項的損失函數:
這個函數依然可以用梯度下降求解。
2.4 多分類問題
剛纔講述的都是二分類的問題,那如果是多分類的問題,又該怎麼做呢?其實可以套用二分類的方法,根據特徵,一層層細化類別。比如下圖中有三種形狀:
①:可以先用一個分類器區分“正方形”和“非正方形”,使用一個分類器對三角形與非三角形區分,再使用一個分類器對×進行區分,選擇這三個分類器中 概率最高的那個。
②:可以先用一個分類器區分“正方形”和“非正方形”, 再用一個分類器對非正方形區分,得到“三角形”和“非三角形”,然後再用一個分類器區分叉。
3. 工程應用經驗
邏輯斯特迴歸(LR)是個比較基礎的算法,在它只會有很多算法SVM/GBDT/RandomForest。複雜的算法比較難以把握,工業界更偏向於用簡單的算法。
3.1 LR優點與應用
LR的優點:
1) LR是以概率的形式輸出結果,不只是0和1的判定;
2) LR的可解釋強,可控性高;
3) 訓練快,feature engineering之後效果贊;
4) 因爲結果是概率,可以做ranking model;
5) 添加feature簡單。
LR的應用場景很多哈:
1) CTR預估、推薦系統的learning to rank;
2) 一些電商搜索排序基線;
3) 一些電商的購物搭配推薦;
4) 新聞app排序基線。
1) 如果樣本不均衡,樣本充足的情況下可以做下采樣——抽樣,樣本不足的情況下做上採樣——對樣本少的做重複;
2) 修改損失函數,給不同權重。比如負樣本少,就可以給負樣本大一點的權重;
3) 採樣後的predict結果,用作判定請還原。