1. 程式人生 > >機器學習演算法:迴歸分析與工程應用

機器學習演算法:迴歸分析與工程應用

一、線性迴歸

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封裝的