1. 程式人生 > >資料探勘,篩選,補充的廣義線性模型的---- LASSO 迴歸

資料探勘,篩選,補充的廣義線性模型的---- LASSO 迴歸

Kaggle 網站(https://www.kaggle.com/)成立於 2010 年,是當下最流行的進行資料發掘和預測模型競賽的線上平臺。 與 Kaggle 合作的公司可以在網站上提出一個問題或者目標,同時提供相關資料,來自世界各地的電腦科學家、統計學家和建模愛好者, 將受領任務,通過比較模型的某些效能引數,角逐出優勝者。 通過大量的比賽,一系列優秀的資料探勘模型脫穎而出,受到廣大建模者的認同,被普遍應用在各個領域。 在保險行業中用於擬合廣義線性模型的 LASSO 迴歸就是其中之一。

LASSO 迴歸的特點是在擬合廣義線性模型的同時進行變數篩選(variable selection)和複雜度調整(regularization)。 因此,不論目標因變數(dependent/response varaible)是連續的(continuous),還是二元或者多元離散的(discrete),都可以用 LASSO 迴歸建模然後預測。 這裡的變數篩選是指不把所有的變數都放入模型中進行擬合,而是有選擇的把變數放入模型從而得到更好的效能引數。 複雜度調整是指通過一系列引數控制模型的複雜度,從而避免過度擬合(overfitting)。 對於線性模型來說,複雜度與模型的變數數有直接關係,變數數越多,模型複雜度就越高。 更多的變數在擬合時往往可以給出一個看似更好的模型,但是同時也面臨過度擬合的危險。此時如果用全新的資料去驗證模型(validation),通常效果很差。 一般來說,變數數大於資料點數量很多,或者某一個離散變數有太多獨特值時,都有可能過度擬合。

LASSO 迴歸複雜度調整的程度由引數 λ 來控制,λ 越大對變數較多的線性模型的懲罰力度就越大,從而最終獲得一個變數較少的模型。 LASSO 迴歸與 Ridge 迴歸同屬於一個被稱為 Elastic Net 的廣義線性模型家族。 這一家族的模型除了相同作用的引數 λ 之外,還有另一個引數 α 來控制應對高相關性(highly correlated)資料時模型的性狀。 LASSO 迴歸 α=1,Ridge 迴歸 α=0,一般 Elastic Net 模型 0<α<1。 這篇文章主要介紹 LASSO 迴歸,所以我們集中關注 α=1 的情況,對於另外兩種模型的特點和如何選取最優 α 值, 我會在章節 “Elstic Net 模型家族簡介” 做一些簡單闡述。

目前最好用的擬合廣義線性模型的 R package 是 glmnet,由 LASSO 迴歸的發明人,斯坦福統計學家 Trevor Hastie 領銜開發。 它的特點是對一系列不同 λ 值進行擬合,每次擬合都用到上一個 λ 值擬合的結果,從而大大提高了運算效率。 此外它還包括了平行計算的功能,這樣就能調動一臺計算機的多個核或者多個計算機的運算網路,進一步縮短運算時間。

下面我們就通過一個線性迴歸和一個 Logistic 迴歸的例子,瞭解如何使用 glmnet 擬合 LASSO 迴歸。 另外,之後的系列文章我打算重點介紹非引數模型(nonparametric model)中的一種,Gradient Boosting Machine。 然後通過一個保險行業的例項,分享一些實際建模過程中的經驗, 包括如何選取和預處理資料,如何直觀得分析自變數與因變數之間的關係,如何避免過度擬合,如何衡量和選取最終模型。

線性迴歸

我們從最簡單的線性迴歸(Linear Regression)開始瞭解如何使用 glmnet 擬合 LASSO 迴歸模型, 所以此時的連線函式(link function)就是恆等,或者說沒有連線函式,而誤差的函式分佈是正態分佈。

首先我們裝載 glmnet package,然後讀入試驗用資料 “LinearExample.RData”, 下載連結

library(glmnet)
load("LinearExample.RData")

之後在 workspace 裡我們會得到一個 100×20 的矩陣 x 作為輸入自變數,100×1 的矩陣 y 作為目標因變數。 矩陣 x 代表了我們有 100 個數據點,每個資料點有 20 個統計量(feature)。 現在我們就可以用函式 glmnet() 建模了:

fit = glmnet(x, y, family="gaussian", nlambda=50, alpha=1)

好,建模完畢,至此結束本教程