榮小輝
摘 要:當(dāng)前機(jī)器學(xué)習(xí)應(yīng)用漸趨成熟,如何結(jié)合算法優(yōu)勢(shì)與醫(yī)學(xué)研究特點(diǎn)是有效應(yīng)用的關(guān)鍵。統(tǒng)計(jì)方法一直在預(yù)測(cè)精度與可解釋性上做平衡,而醫(yī)學(xué)問(wèn)題多數(shù)情況下對(duì)可解釋性具有較高的要求。Lasso回歸模型通過(guò)將某些不相關(guān)變量的回歸系數(shù)壓縮到零的方法,可以有效的篩選出與研究結(jié)果相關(guān)的變量。通過(guò)縮小變量范圍,增加模型的可解釋性,尤其有利于醫(yī)學(xué)問(wèn)題的簡(jiǎn)化和醫(yī)療工作者的人工應(yīng)用。本文將簡(jiǎn)要介紹Lasso回歸模型的原理,并應(yīng)用于糖尿病進(jìn)展的多元變量篩選。在取得相近預(yù)測(cè)精度的前提下,將自變量由10個(gè)簡(jiǎn)化到4個(gè),極大的提高了模型的簡(jiǎn)潔性與實(shí)用度。
關(guān)鍵詞:Lasso回歸;變量選擇;數(shù)據(jù)挖掘;糖尿病
中圖分類號(hào):O212.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-2064(2017)24-0026-04
1 背景
作為多變量回歸問(wèn)題的經(jīng)典方法,最小二乘法一直得到廣泛的應(yīng)用。醫(yī)學(xué)問(wèn)題往往都是涉及很多變量的復(fù)雜問(wèn)題。哪個(gè)變量與研究結(jié)果緊密相關(guān),哪個(gè)變量對(duì)研究結(jié)果其實(shí)毫無(wú)影響,了解其中含義在研究中具有關(guān)鍵的指引作用。最小二乘法可以得到哪些變量具有顯著性的數(shù)據(jù),但對(duì)那些不具有顯著性的變量,無(wú)法判斷是否應(yīng)該從模型中刪除哪個(gè)變量。由于有變量的共線性等問(wèn)題,直接刪除某些不顯著變量,再建立最小二乘法多元回歸模型會(huì)有很大的風(fēng)險(xiǎn)丟失重要變量,而且預(yù)測(cè)的精度也無(wú)法得到保證。
Lasso回歸模型通過(guò)將回歸系數(shù)壓縮到零,實(shí)現(xiàn)了變量的有效選擇[1]。最小二乘法采用最小化RSS的方法,來(lái)求得變量回歸系數(shù)。而Lasso回歸在最小二乘法RSS的基礎(chǔ)上增加了一個(gè)懲罰項(xiàng),是各回歸系數(shù)的絕對(duì)值之和乘以參數(shù)lambda。通過(guò)最小化RSS與懲罰項(xiàng)的和來(lái)求得變量回歸系數(shù)。當(dāng)參數(shù)lambda為0時(shí),Lasso回歸與最小二乘法沒(méi)有區(qū)別。當(dāng)參數(shù)lambda逐漸增加,模型開始將回歸系數(shù)向0壓縮,當(dāng)參數(shù)lambda足夠大時(shí),所有變量的系數(shù)將都被壓縮到0。隨著參數(shù)lambda的變化,各變量的回歸系數(shù)也會(huì)跟著改變。所以選擇一個(gè)合適的參數(shù)lambda對(duì)Lasso回歸模型至關(guān)重要,如何選擇參數(shù)lambda又要在預(yù)測(cè)精度與可解釋性上做平衡[2]。在預(yù)測(cè)精度可接受的范圍內(nèi),選擇一個(gè)比較大的參數(shù)lambda,將會(huì)得到一個(gè)盡可能精簡(jiǎn)的變量與模型。
醫(yī)學(xué)問(wèn)題經(jīng)常是復(fù)雜的多變量問(wèn)題,在某些問(wèn)題中往往有非常多的變量,這些變量之間的關(guān)系多樣,有很大可能存在共線性或其他相互影響關(guān)系。在醫(yī)學(xué)實(shí)踐中取得大量樣本數(shù)的機(jī)會(huì)通常會(huì)比較少,如果樣本量不能遠(yuǎn)遠(yuǎn)大于變量數(shù),而且多數(shù)變量與結(jié)果沒(méi)有什么關(guān)系的情況下,最小二乘法多元回歸將不能得到較好的預(yù)測(cè)結(jié)果。當(dāng)樣本量小于變量數(shù)時(shí),甚至無(wú)法使用最小二乘法建立模型。在大數(shù)據(jù)時(shí)代,醫(yī)學(xué)問(wèn)題的變量數(shù)急劇增加。例如,新的全基因組掃描等方法可以輕松產(chǎn)生上萬(wàn)個(gè)變量,而醫(yī)學(xué)研究的樣本很難有快速的增長(zhǎng),這將導(dǎo)致樣本量小于變量數(shù)的情況。在這些情況下,Lasso回歸模型可能既提高預(yù)測(cè)的精度,又通過(guò)變量篩選來(lái)簡(jiǎn)化模型。糖尿病的進(jìn)展,可能會(huì)帶來(lái)很多的并發(fā)癥,這些并發(fā)癥對(duì)患者的健康有重大影響。如果準(zhǔn)確的預(yù)測(cè)出患者病情進(jìn)展,提前采取多種措施,從診斷開始就對(duì)患者診療進(jìn)行干預(yù),可以取得很好的效果。
2 資料與方法
本文采用www4.stat.ncsu.edu下載的糖尿病數(shù)據(jù)集,有442個(gè)樣本,11個(gè)變量,其中10個(gè)自變量,(AGE年齡BMI 身體質(zhì)量指數(shù)BP收縮壓與舒張壓的均值SEX,1為女,2為男,LTG、TC、LDL、HDL、TCH、GLU是六個(gè)血生化指標(biāo))一個(gè)因變量Y。10個(gè)自變量是糖尿病確診時(shí)的數(shù)據(jù),因變量Y是一年后醫(yī)生對(duì)患者糖尿病嚴(yán)重程度的評(píng)分,分?jǐn)?shù)越高病情越嚴(yán)重。通過(guò)對(duì)該數(shù)據(jù)集建立模型,可以根據(jù)糖尿病確診時(shí)的數(shù)據(jù),預(yù)測(cè)一年后患者的病情嚴(yán)重程度。本文使用R語(yǔ)言既相關(guān)的分析包glmnet,在最小二乘法回歸模型十折交叉驗(yàn)證中使用了分析包dplyr[3]。數(shù)據(jù)集變量情況描述表1所示。
2.1 Lasso回歸
(1)參數(shù)lambda取最佳預(yù)測(cè)準(zhǔn)確時(shí)的值,Lasso模型和預(yù)測(cè)精度。
使用glmnet()函數(shù)建立lasso模型,必須用一個(gè)x矩陣和一個(gè)y向量。Diabetes是該糖尿病數(shù)據(jù)集在R中的數(shù)據(jù)框名稱。
如圖1所示,各個(gè)變量系數(shù)隨參數(shù)lambda增大逐漸被壓縮到0(L1 Norm隨參數(shù)lambda減小而增大),意味著該變量被模型排除。
x <- model.matrix(Y~.,diabetes)[,-1]
y <- diabetes$Y
library(glmnet)
grid <- 10^seq(10,-2,length=100)
set.seed(1)
train <- sample(1:nrow(x), nrow(x)*9/10)
test <- (-train)
y.test <- y[test]
lasso.mod <-glmnet(x[train,],y[train],alpha=1, lambda=grid)
plot(lasso.mod)
set.seed(123)
cv.out <- cv.glmnet(x[train,],y[train],alpha=1)
plot(cv.out)
bestlam <- cv.out$lambda.min
lasso.pred <- predict(lasso.mod, s=bestlam, newx=x[test,])
a<- lasso.pred
b<- as.vector(a)
mean((b-y.test)^2)endprint
[1] 2311.945
out <- glmnet(x,y,alpha=1,lambda=grid)
lasso.coef <- predict(out, type=”coefficients”, s=bestlam)[1:11,]
lasso.coef
> lasso.coef
(Intercept) AGE SEX2 BMI BP
-270.9677843 0.0000000 -21.0338187 5.6668803 1.0703732
TC LDL HDL TCH LTG
-0.2402796 0.0000000 -0.6251458 3.0270844 47.9925758
GLU
0.2594034
> result_10bestL <- c(2311.945,2516.548,3571.695,3787.387,3269.144,2867.482,2423.028,2873.636,3007.667,3324.951)
> mean(result_10bestL)
[1] 2995.348
> bestlam
[1] 0.3956936
首先根據(jù)10折交叉驗(yàn)證的方法,選出當(dāng)交叉驗(yàn)證的均方誤差最小時(shí),參數(shù)lambda的取值為0.3956936,并用該參數(shù)建立lasso模型如上,AGE和LDL的系數(shù)被壓縮到了0。取9成數(shù)據(jù)訓(xùn)練,1成數(shù)據(jù)測(cè)試,10次隨機(jī)測(cè)試的均方誤差的均值是2995.348。如圖2所示,均方誤差隨lambda增大而增大,會(huì)有一個(gè)lambda最佳取值使得均方誤差最小。
(2)參數(shù)lambda取10時(shí)的Lasso模型和預(yù)測(cè)精度。
set.seed(1)
train <- sample(1:nrow(x), nrow(x)*9/10)
test <- (-train)
y.test <- y[test]
lasso.mod <-glmnet(x[train,],y[train],alpha=1, lambda=grid)
plot(lasso.mod)
bestlam <- 10
lasso.pred <- predict(lasso.mod, s=bestlam, newx=x[test,])
a<- lasso.pred
b<- as.vector(a)
mean((b-y.test)^2)
out <- glmnet(x,y,alpha=1,lambda=grid)
lasso.coef <- predict(out,type = "coefficients",s=bestlam)[1:11,]
lasso.coef
> mean((b-y.test)^2)
[1] 2629.674
> lasso.coef
(Intercept) AGE SEX2 BMI BP
-191.8334615 0.0000000 0.0000000 5.1204788 0.4923885
TC LDL HDL TCH LTG
0.0000000 0.0000000 -0.2391955 0.0000000 37.5352114
GLU
0.0000000
>result_10 <-c(2629.674,2176.597,3744.255,3727.083,3555.335,3116.692,2698.318,3167.803,3043.358,3320.284)
> mean(result_10)
[1] 3117.94
取參數(shù)lambda的值為10,并用該參數(shù)建立lasso模型如上,只有4個(gè)變量的系數(shù)沒(méi)有被壓縮到0。取9成數(shù)據(jù)訓(xùn)練,1成數(shù)據(jù)測(cè)試,10次隨機(jī)測(cè)試的均方誤差的均值是3117.94。
所得的回歸模型是:
Y=-191+5.12BMI+0.49BP-0.24HDL+37.54LTG
該模型比最佳的參數(shù)lambda取值時(shí)的模型簡(jiǎn)單的多了,而且預(yù)測(cè)的結(jié)果也相差不多,在可接受范圍內(nèi)。
(3)參數(shù)lambda取100時(shí)的Lasso模型和預(yù)測(cè)精度。
set.seed(1)
train <- sample(1:nrow(x), nrow(x)*9/10)
test <- (-train)
y.test <- y[test]
lasso.mod <-glmnet(x[train,],y[train],alpha=1, lambda=grid)
plot(lasso.mod)
bestlam <- 100
lasso.pred <- predict(lasso.mod, s=bestlam, newx=x[test,])
a<- lasso.pred
b<- as.vector(a)
mean((b-y.test)^2)
out <- glmnet(x,y,alpha=1,lambda=grid)
lasso.coef <- predict(out,type = "coefficients",s=bestlam)[1:11,]endprint
lasso.coef
> mean((b-y.test)^2)
[1] 4915.202
> lasso.coef
(Intercept) AGE SEX2 BMI BP
152.1335 0.0000 0.0000 0.0000 0.0000
TC LDL HDL TCH LTG
0.0000 0.0000 0.0000 0.0000 0.0000
GLU
0.0000
參數(shù)lambda的取值為100時(shí),所有系數(shù)都被壓縮到0,這個(gè)不是好選擇。
2.2 最小二乘法回歸模型
> diabetes_lm <-lm(Y~.,data=diabetes) # 最小二乘法回歸模型
> summary(diabetes_lm)
Call:
lm(formula = Y ~ ., data = diabetes)
Residuals:
Min 1Q Median 3Q Max
-155.827 -38.536 -0.228 37.806 151.353
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -357.42679 67.05807 -5.330 1.59e-07 ***
AGE -0.03636 0.21704 -0.168 0.867031
SEX2 -22.85965 5.83582 -3.917 0.000104***
BMI 5.60296 0.71711 7.813 4.30e-14***
BP 1.11681 0.22524 4.958 1.02e-06 ***
TC -1.09000 0.57333 -1.901 0.057948 .
LDL 0.74645 0.53083 1.406 0.160390
HDL 0.37200 0.78246 0.475 0.634723
TCH 6.53383 5.95864 1.097 0.273459
LTG 68.48312 15.66972 4.370 1.56e-05***
GLU 0.28012 0.27331 1.025 0.305990
---
Signif. codes: 0 ‘*** 0.001 ‘** 0.01 ‘* 0.05 ‘. 0.1 ‘ 1
Residual standard error: 54.15 on 431 degrees of freedom
Multiple R-squared: 0.5177,Adjusted R-squared: 0.5066
F-statistic: 46.27 on 10 and 431 DF, p-value: < 2.2e-16
最小二乘法回歸模型十折交叉驗(yàn)證:
library(dplyr)
data<- diabetes
k=10
set.seed(123)
data$id<- sample(1:k, nrow(data), replace=TRUE)
list<- 1:k
prediction<- data.frame()
testsetCopy<- data.frame()
progress.bar<- create_progress_bar("text")
progress.bar$init(k)
for (i in 1:k) {
trainingset<- subset(data, id %in% list[-i])
testset<- subset(data, id %in% c(i))
trainingset <- trainingset[c(-12)] # delete id
testset <- testset[c(-12)] # delete id
mymodel<- lm(Y~.,data= trainingset)
temp1 <- predict(mymodel, newdata = testset)
prediction<- rbind(prediction, as.data.frame (temp1))
testsetCopy<- rbind(testsetCopy, as.data.frame(testset[,11]))
progress.bar$step()
}
Result_lm<- mean((testsetCopy-prediction)^2)
data <- data[c(-12)] # remember to delete id after run model.
Result_lm
> Result_lm
[1] 2979.149
3 結(jié)果
3.1 Lasso回歸模型
(1)首先根據(jù)10折交叉驗(yàn)證的方法,選出當(dāng)交叉驗(yàn)證的均方誤差最小時(shí),參數(shù)lambda的取值為0.3956936,并用該參數(shù)建立lasso模型如上,AGE和LDL的系數(shù)被壓縮到了0。取9成數(shù)據(jù)訓(xùn)練,1成數(shù)據(jù)測(cè)試,10次隨機(jī)測(cè)試的均方誤差的均值是2995.348。endprint
(2)取參數(shù)lambda的值為10,并用該參數(shù)建立lasso模型如上,只有4個(gè)變量的系數(shù)沒(méi)有被壓縮到0。取9成數(shù)據(jù)訓(xùn)練,1成數(shù)據(jù)測(cè)試,10次隨機(jī)測(cè)試的均方誤差的均值是3117.94。
所得的回歸模型是:
Y=-191+5.12BMI+0.49BP-0.24HDL+37.54LTG
該模型比最佳的參數(shù)lambda取值時(shí)的模型簡(jiǎn)單的多了,而且預(yù)測(cè)的結(jié)果也相差不多,在可接受范圍內(nèi)。
(3)參數(shù)lambda的取值為100時(shí),所有系數(shù)都被壓縮到0,這個(gè)不是好選擇。
3.2 最小二乘法回歸模型
(1)10折交叉驗(yàn)證預(yù)測(cè)的均方誤差是2979.149;(2)有4個(gè)變量有顯著性,BMI、BP、LTG、SEX2,整個(gè)模型也有顯著性。
4 討論
(1)取參數(shù)lambda值為10的lasso模型,具有較好的預(yù)測(cè)結(jié)果,同時(shí)10個(gè)變量簡(jiǎn)化到了4個(gè)變量,這對(duì)醫(yī)療工作者有很大的意義。因?yàn)樵卺t(yī)療過(guò)程中,很多變量不容易能都收集到,而且變量多的時(shí)候,人腦很難記住這些關(guān)系并實(shí)際應(yīng)用。這種方法對(duì)模型中有更多變量的情況,作用更大。Y=-191+5.12BMI+0.49BP-0.24HDL+37.54LTG。
(2)lambda值從最佳的0.3956936,10,100的過(guò)程中,預(yù)測(cè)誤差越來(lái)越大,回歸系數(shù)壓縮成0的變量也越來(lái)越多。在lasso模型的應(yīng)用中,lambda值的選擇是至關(guān)重要的。通常可以從交叉驗(yàn)證的均方誤差最小的lambda值開始,逐漸取較大的lambda值,直到預(yù)測(cè)誤差不能接受或變量已經(jīng)篩選到滿意的程度。
(3)最佳lambda值的lasso模型,與最小二乘法回歸模型預(yù)測(cè)誤差幾乎相同。但lasso模型的優(yōu)勢(shì)在于有兩個(gè)變量的系數(shù)壓縮到0,模型更簡(jiǎn)單。在本文中的數(shù)據(jù)集預(yù)測(cè)中,lasso模型沒(méi)有顯著的提高預(yù)測(cè)誤差。但在具有某些特征的數(shù)據(jù)集中,比如樣本數(shù)不是遠(yuǎn)遠(yuǎn)大于變量數(shù)等情況下,lasso模型會(huì)有更好的預(yù)測(cè)表現(xiàn)。
(4)取參數(shù)lambda值為10的lasso模型,所得的方程中4個(gè)變量中有3個(gè)在最小二乘法回歸模型具有顯著性,可見(jiàn)這兩種方法得到的結(jié)果有較強(qiáng)的相互支持關(guān)系。
(5)變量SEX在最小二乘法回歸模型中具有顯著性,但沒(méi)有出現(xiàn)在取參數(shù)lambda值為10的lasso模型中。原因可能是變量SEX為類別變量,顯著性的含義只是在這個(gè)類別中自己比較時(shí)才有,即其他條件相同時(shí),不同變量SEX之間有顯著區(qū)別。最小二乘法回歸模型無(wú)法把類別變量與其他變量直接比較,lasso模型剔除了變量SEX,表明變量SEX并沒(méi)有顯示出比其他變量更大的作用。實(shí)際上在另一種機(jī)器學(xué)習(xí)方法—隨機(jī)森林模型中,變量SEX在提高數(shù)據(jù)分類的純潔度上重要性排在最后,沒(méi)有重要意義。
參考文獻(xiàn)
[1]詹姆斯(James,G.)等,著.王星等,譯.統(tǒng)計(jì)學(xué)習(xí)導(dǎo)論---基于R應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2015.
[2]周志華,著.機(jī)器學(xué)習(xí)[M].北京:清華大學(xué)出版社,2016.
[3]麥特洛夫(Matloff,N.)等著.陳堰平,等譯.R語(yǔ)言編程藝術(shù)[M].北京:機(jī)械工業(yè)出版社,2013.
Variable Selection Function of Lasso Regression Model and its Application in Prediction Model of Diabetes Development
Abstract:As machine learning is becoming more and more popular, it is very important to combine the advantage of algorithms and the specificity of medical questions. While statistic is always balance between prediction accuracy and interpretability, medical questions have higher requirement on interpretability in many cases. The Lasso regression model can effectively screen variables related to the results by compressing the regression coefficients of these unrelated variables into zero. By reducing the number of variables and increasing the interpretability, the Lasso regression model is especially helpful for the simplification of medical problems and the artificial application of medical experts. This article briefly introduces the principles of Lasso regression model and applies it to multivariate screening of diabetes progression. Under obtaining the near prediction accuracy conditions, the independent variables are reduced from 10 to 4, which greatly improves the simplicity and practicability of the model.
Key words:Lasso regression;Variable selection;Data mining;Diabetesendprint