Glmnet是一個經過懲罰最大似然來擬合廣義線性模型的包。正則化路徑是針對正則化參數λ的值網格處的套索或彈性網絡罰值計算的。該算法速度極快,能夠利用輸入矩陣中的稀疏性x。它符合線性,邏輯和多項式,泊松和Cox迴歸模型。能夠從擬合模型中作出各類預測。它也能夠適合多響應線性迴歸。算法
glmnet算法採用循環座標降低法,它連續優化每一個參數上的目標函數並與其餘參數固定,並反覆循環直至收斂。該軟件包還利用強大的規則來有效地限制活動集。因爲高效的更新和技術,如熱啓動和主動集合收斂,咱們的算法能夠很是快地計算解決方案路徑。網絡
該代碼能夠處理稀疏的輸入矩陣格式,以及係數的範圍約束。其核心glmnet是一組Fortran子程序,它們使執行速度很是快。函數
該軟件包還包括用於預測和繪圖的方法以及執行K倍交叉驗證的功能。測試
首先,咱們加載glmnet包:優化
library(glmnet) ## Loading required package: Matrix## Loaded glmnet 1.9-9
包中使用的默認模型是高斯線性模型或「最小二乘」,咱們將在本節中演示。咱們加載一組預先建立的數據用於說明。用戶能夠加載本身的數據,也可使用保存在工做區中的數據。ui
load("QuickStartExample.RData")
該命令從該保存的R數據檔案中加載輸入矩陣x和響應向量y。spa
咱們使用最基本的呼叫來適應模型glmnet。code
fit=glmnet(x,y)
「適合」是類的一個對象,glmnet它包含擬合模型的全部相關信息以供進一步使用。咱們不鼓勵用戶直接提取組件。相反,提供對象,如各類方法plot,print,coef和predict,使咱們可以更優雅執行這些任務。對象
咱們能夠經過執行plot函數來顯示係數:ip
MSE在測試集上
r語言中對LASSO,Ridge和ElasticNet模型實現
咱們看到lasso(alpha=1)在這裏作的最好。咱們也看到,使用的lambda的範圍與alpha不一樣。
這些是最近添加的加強模型範圍的功能。假設咱們想要擬合咱們的模型,但將係數限制爲大於-0.7且小於0.5。這是很容易經過實現upper.limits和lower.limits參數:
懲罰因素
該參數容許用戶對每一個係數應用單獨的懲罰因子。其每一個參數的默認值爲1,但能夠指定其餘值。特別是,任何penalty.factor等於零的變量都不會受到懲罰!讓[ 數學處理錯誤]v表示[ 數學處理錯誤]的懲罰因子變量。罰款期限變爲[ 數學處理錯誤] 請注意,懲罰因子在內部從新調整爲與nvars相加。
當人們對變量有先驗知識或偏好時,這很是有用。在不少狀況下,一些變量可能很是重要,以致於一直想要保持這些變量,這能夠經過將相應的懲罰因子設置爲0來實現:
r語言中對LASSO,Ridge和ElasticNet模型實現