ML之PLiR之Glmnet:利用Glmnet算法求解ElasticNet回归类型问题(实数值评分预测)

举报
一个处女座的程序猿 发表于 2021/03/31 00:08:56 2021/03/31
【摘要】 ML之PLiR之Glmnet算法:利用Glmnet算法求解ElasticNet回归类型问题(实数值评分预测)   目录   输出结果 1、Glmnet算法 实现代码     输出结果 0 21 22 23 34 35 36 37 38 39 210 211 212 213 314 315 216 217 218 219 220 221 222 223 2...

ML之PLiR之Glmnet算法:利用Glmnet算法求解ElasticNet回归类型问题(实数值评分预测)

 

目录

 

输出结果

1、Glmnet算法

实现代码


 

 

输出结果


  
  1. 0 2
  2. 1 2
  3. 2 2
  4. 3 3
  5. 4 3
  6. 5 3
  7. 6 3
  8. 7 3
  9. 8 3
  10. 9 2
  11. 10 2
  12. 11 2
  13. 12 2
  14. 13 3
  15. 14 3
  16. 15 2
  17. 16 2
  18. 17 2
  19. 18 2
  20. 19 2
  21. 20 2
  22. 21 2
  23. 22 2
  24. 23 2
  25. 24 2
  26. 25 2
  27. 26 2
  28. 27 2
  29. 28 2
  30. 29 3
  31. 30 3
  32. 31 3
  33. 32 2
  34. 33 3
  35. 34 2
  36. 35 2
  37. 36 2
  38. 37 2
  39. 38 2
  40. 39 2
  41. 40 2
  42. 41 2
  43. 42 1
  44. 43 1
  45. 44 2
  46. 45 2
  47. 46 2
  48. 47 1
  49. 48 2
  50. 49 1
  51. 50 1
  52. 51 1
  53. 52 1
  54. 53 1
  55. 54 1
  56. 55 1
  57. ……
  58. 95 1
  59. 96 1
  60. 97 1
  61. 98 1
  62. 99 1
  63. ['"alcohol"', '"volatile acidity"', '"sulphates"', '"total sulfur dioxide"', '"chlorides"', '"fixed acidity"', '"pH"', '"free sulfur dioxide"', '"residual sugar"', '"citric acid"', '"density"']

1、Glmnet算法

 

 

 

 

实现代码


  
  1. #calculate starting value for lambda
  2. lam = maxXY/alpha
  3. #this value of lambda corresponds to beta = list of 0's
  4. #initialize a vector of coefficients beta
  5. beta = [0.0] * ncols
  6. #initialize matrix of betas at each step
  7. betaMat = []
  8. betaMat.append(list(beta))
  9. #begin iteration
  10. nSteps = 100
  11. lamMult = 0.93 #100 steps gives reduction by factor of 1000 in
  12. # lambda (recommended by authors)
  13. nzList = []
  14. for iStep in range(nSteps):
  15. #make lambda smaller so that some coefficient becomes non-zero
  16. lam = lam * lamMult
  17. deltaBeta = 100.0
  18. eps = 0.01
  19. iterStep = 0
  20. betaInner = list(beta)
  21. while deltaBeta > eps:
  22. iterStep += 1
  23. if iterStep > 100: break
  24. #cycle through attributes and update one-at-a-time
  25. #record starting value for comparison
  26. betaStart = list(betaInner)
  27. for iCol in range(ncols):
  28. xyj = 0.0
  29. for i in range(nrows):
  30. #calculate residual with current value of beta
  31. labelHat = sum([xNormalized[i][k]*betaInner[k]
  32. for k in range(ncols)])
  33. residual = labelNormalized[i] - labelHat
  34. xyj += xNormalized[i][iCol] * residual
  35. uncBeta = xyj/nrows + betaInner[iCol]
  36. betaInner[iCol] = S(uncBeta, lam * alpha) / (1 +
  37. lam * (1 - alpha))
  38. sumDiff = sum([abs(betaInner[n] - betaStart[n])
  39. for n in range(ncols)])
  40. sumBeta = sum([abs(betaInner[n]) for n in range(ncols)])
  41. deltaBeta = sumDiff/sumBeta
  42. print(iStep, iterStep)
  43. beta = betaInner
  44. #add newly determined beta to list
  45. betaMat.append(beta)
  46. #keep track of the order in which the betas become non-zero
  47. nzBeta = [index for index in range(ncols) if beta[index] != 0.0]
  48. for q in nzBeta:
  49. if (q in nzList) == False:
  50. nzList.append(q)

 

 

 

 

 

文章来源: yunyaniu.blog.csdn.net,作者:一个处女座的程序猿,版权归原作者所有,如需转载,请联系作者。

原文链接:yunyaniu.blog.csdn.net/article/details/85058190

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。