機器學習演算法:迴歸分析與工程應用
一、線性迴歸
1.1 定義與定義引入
(一)什麼是線性迴歸呢?
- 有監督學習
- 輸出/預測的結果yi為連續值變數
- 需要學習對映f:x->y
- 假定輸入x和輸出y之間有線性相關關係
(二)舉一個例子(單一變數):
(三)多變數的情況
1.2 損失函式
(一)我們要找到最好的權重/引數
(二)怎樣去衡量“最好”?
我們把x到y的對映函式f記做θ的函式
定義損失函式為:
(三)最小化損失函式
下圖中的右圖為隨著θ1變化,損失值的變化,呈現拋物線形狀:
(四)在θ0和θ1存在的情況下會形成拋物面,最主要的是找到最低點
1.3 梯度下降
(一)逐步最小化損失函式的過程
(二)如同下山,找準方向(斜率),每次邁進一小步,直至山底
α是學習率,由於偏導求解後區分正負號,所以會自動實現正負加減。
在應用中,一般可以設定一個閾值,以此為限進行求解。
(三)對於有兩個引數θ0和θ1存在的情況下會形成拋物面:
(四)假如現在有n個特徵/變數x(x1,x2,x3......)
(五)學習率α
學習率太小——收斂會很慢,會影響學習效率。
學習率太大——“由這山入那山”,可能會形成左右振盪的情況,可能會無法到達最低點。
一般情況下會將α定為一個相對比較小的值,但不能太小,0.01,0.005比較常見。
1.4 過/欠擬合與正則化
(一)迴歸與欠/過擬合
如果我們有特別多的特徵 , 我們的假設函式曲線可以對原始資料擬合得非常好( ( ), 但喪失了一般性 , 從而導致對新給的待預測樣本 , 預測效果差 。
最左邊的圖中,使用直線,無論如何調整都無法進行相對正確和完整的擬合,所以這個模型並不好;中間的圖是一種拋物線的形狀,這個時候我們發現,這條曲線比較光滑,雖然不一定可以穿過每一個樣本點,但是基本符合;最右邊的圖,給的參量太多了,波動過大,沒有穩定性,不適合進行大量資料的擬合。
因此最左邊的稱為“欠擬合”,最右邊的稱為“過擬合”。
(二)正則化
二、邏輯迴歸
2.1 定義與問題引入
(一)邏輯(斯特)迴歸
有時候需要解決分類問題。
線性迴歸+閾值?
以得腫瘤的為例:
但是當加入3個新的樣本點時候,就會受噪聲影響比較大:
(二)本身是對離散值的預測,為什麼要叫回歸?
為了解決以上的問題(噪聲影響)希望可以將以上模型對映到(0,1)的概率上,進行概率測算
使用一個函式sigmoid
當x=0是,y=0.5,即一半的概率
(三)判定邊界
①判定邊界的三種類別:
邏輯迴歸就是在尋找判定邊界。
②線性判定邊界:
③非線性判定邊界:
2.2 損失函式
(一)在邏輯(斯特)迴歸中,不可以使用如下的損失函式,否則會形成一個跳動式的曲線,形成一個非凸的函式:
而我們在處理模型的時候期望的損失函式應該類似於這個樣子:
(二) 通過進一步探索,得出了新的損失函式:
2.3 梯度下降與正則化及例項
使用梯度下降求解:
三、工程應用經驗
3.1 邏輯迴歸例項
(一)線性決策邊界
(二)非線性決策邊界
(三)LR演算法的應用經驗
LR < SVM/GBDT/RandomForest
①優勢
- LR能以概率的形式輸出結果,而非只是0,1判定
- LR的可解釋性強,可控度高
- 訓練快,feature engineering之後效果好
- 因為結果是概率,可以做ranking model
②應用
- CTR預估(點選率預估)/推薦系統的learning to rank/各種分類場景
- 某搜尋引擎廠的廣告CTR預估基線版本是LR
- 某電商搜尋排序基線版是LR(廣告也是)
- 某電商的購物搭配推薦用了大量LR
- 某電商的購物搭配推薦用了大量LR
- 某現在一天廣告賺1000w+的新聞app排序基線是LR
3.2 樣本處理
(一)樣本量太大怎麼辦?
- 離散化後用one-hot編碼處理成0,1值
- 如果要用連續值,注意做scaling(幅度變化)
- 試試spark Mllib
- 試試取樣(注意取樣方式:日期 or 使用者 or 行為)(二)注意樣本的平衡
- LR對樣本分佈十分敏感
- 如果樣本不均衡:下采樣(樣本量充足的情況下),上取樣(樣本數量不太足)
- 修改loss function,給不同權重
- 取樣後的predict結果,用作排序可以,但用作判定需要還原
3.3 特徵處理
(一)離散化
- 對映到高維空間,用linear的LR(快,且兼具更好的分割性)
- 稀疏化,0,1向量內積乘法運算速度快,計算結果方便儲存,容易擴充套件
- 離散化後,給線性模型帶來一定的非線性
- 模型穩定,收斂度高,魯棒性好
- 在一定程度上降低了過擬合風險
(二)特徵處理
①通過組合特徵引入個性化因素
- uuid + tag
- uuid + cluster_id
②注意特徵的頻度
- 區分特徵重要度
- 可以產出層次判定模型
③聚類/Hash
- 增強了極度係數的特徵表達力
- 減小了模型,加速運算
3.4 演算法調優
(一)假設只看模型
- 選擇適合的正則化(L1,L2,L1+L2)
- 正則化係數C
- 收斂的閾值e,迭代輪數
- 調整loss function給定不同權重
- Bagging或其他方式的模型融合
- 最優化演算法額選擇(‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’)
- 小樣本liblinear,大樣本sag,多分類‘newton-cg’和‘lbfgs’
(二)liblinear
- libsvm稀疏向量儲存格式,海量資料下單機速度還OK
- 高緯度離散化特徵,準確率逼近非線性切分
- 引數調節比較方便
- Sklearn中的LR實際上式liblinear封裝的