ML之PLiR之Glmnet:利用Glmnet算法求解ElasticNet回归类型问题(实数值评分预测)
生活随笔
收集整理的這篇文章主要介紹了
ML之PLiR之Glmnet:利用Glmnet算法求解ElasticNet回归类型问题(实数值评分预测)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ML之PLiR之Glmnet算法:利用Glmnet算法求解ElasticNet回歸類型問題(實數值評分預測)
?
目錄
?
輸出結果
1、Glmnet算法
實現代碼
?
?
輸出結果
0 2 1 2 2 2 3 3 4 3 5 3 6 3 7 3 8 3 9 2 10 2 11 2 12 2 13 3 14 3 15 2 16 2 17 2 18 2 19 2 20 2 21 2 22 2 23 2 24 2 25 2 26 2 27 2 28 2 29 3 30 3 31 3 32 2 33 3 34 2 35 2 36 2 37 2 38 2 39 2 40 2 41 2 42 1 43 1 44 2 45 2 46 2 47 1 48 2 49 1 50 1 51 1 52 1 53 1 54 1 55 1 ……95 1 96 1 97 1 98 1 99 1 ['"alcohol"', '"volatile acidity"', '"sulphates"', '"total sulfur dioxide"', '"chlorides"', '"fixed acidity"', '"pH"', '"free sulfur dioxide"', '"residual sugar"', '"citric acid"', '"density"']1、Glmnet算法
?
?
?
?
實現代碼
#calculate starting value for lambda lam = maxXY/alpha#this value of lambda corresponds to beta = list of 0's #initialize a vector of coefficients beta beta = [0.0] * ncols#initialize matrix of betas at each step betaMat = [] betaMat.append(list(beta))#begin iteration nSteps = 100 lamMult = 0.93 #100 steps gives reduction by factor of 1000 in# lambda (recommended by authors) nzList = []for iStep in range(nSteps):#make lambda smaller so that some coefficient becomes non-zerolam = lam * lamMultdeltaBeta = 100.0eps = 0.01iterStep = 0betaInner = list(beta)while deltaBeta > eps:iterStep += 1if iterStep > 100: break#cycle through attributes and update one-at-a-time#record starting value for comparisonbetaStart = list(betaInner)for iCol in range(ncols):xyj = 0.0for i in range(nrows):#calculate residual with current value of betalabelHat = sum([xNormalized[i][k]*betaInner[k]for k in range(ncols)])residual = labelNormalized[i] - labelHatxyj += xNormalized[i][iCol] * residualuncBeta = xyj/nrows + betaInner[iCol]betaInner[iCol] = S(uncBeta, lam * alpha) / (1 +lam * (1 - alpha))sumDiff = sum([abs(betaInner[n] - betaStart[n])for n in range(ncols)])sumBeta = sum([abs(betaInner[n]) for n in range(ncols)])deltaBeta = sumDiff/sumBetaprint(iStep, iterStep)beta = betaInner#add newly determined beta to listbetaMat.append(beta)#keep track of the order in which the betas become non-zeronzBeta = [index for index in range(ncols) if beta[index] != 0.0]for q in nzBeta:if (q in nzList) == False:nzList.append(q)?
?
?
?
?
總結
以上是生活随笔為你收集整理的ML之PLiR之Glmnet:利用Glmnet算法求解ElasticNet回归类型问题(实数值评分预测)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ML之PLiR之LARS:利用LARS算
- 下一篇: 成功解决调用密钥报错4001 加密方式错