dreamhappy2012

2019-01-23   阅读量: 653

机器学习

岭回归python代码怎么实现?

扫码加入数据分析学习群

岭回归就是在矩阵xTx上增加一项使得矩阵非奇异,从而能够对其求逆。在之前对xTx求逆时都需要先判断xTx是否可以求逆,而岭回归就是解决这个问题的。

实现代码如下:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. def ridgeRegres(xMat,yMat,lam=0.2):
  4. xTx = xMat.T*xMat
  5. denom = xTx + np.eye(np.shape(xMat)[1])*lam
  6. if np.linalg.det(denom) == 0.0:
  7. print("This matrix is singular, cannot do inverse")
  8. return
  9. ws = denom.I * (xMat.T*yMat)
  10. return ws
  11. def ridgeTest(xArr,yArr):
  12. xMat = np.mat(xArr); yMat=np.mat(yArr).T
  13. yMean = np.mean(yMat) # 数据标准化
  14. # print(yMean)
  15. yMat = yMat - yMean
  16. # print(xMat)
  17. #regularize X's
  18. xMeans = np.mean(xMat,0)
  19. xVar = np.var(xMat,0)
  20. xMat = (xMat - xMeans) / xVar #(特征-均值)/方差
  21. numTestPts = 30
  22. wMat = np.zeros((numTestPts,np.shape(xMat)[1]))
  23. for i in range(numTestPts): # 测试不同的lambda取值,获得系数
  24. ws = ridgeRegres(xMat,yMat,np.exp(i-10))
  25. wMat[i,:]=ws.T
  26. return wMat
  27. # import data
  28. ex0 = np.loadtxt('abalone.txt',delimiter='\t')
  29. xArr = ex0[:,0:-1]
  30. yArr = ex0[:,-1]
  31. # print(xArr,yArr)
  32. ridgeWeights = ridgeTest(xArr,yArr)
  33. # print(ridgeWeights)
  34. plt.plot(ridgeWeights)
  35. plt.show()

纵坐标为回归系数,横坐标为log(lambda),在最左边,回归系数与线性回归一致,最右边系数全部缩减为0.

其中间某部分可以得到最好的预测结果,为了定量进行寻找最佳参数,还需要进行交叉验证。


以上代码python环境均为python3.6

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0000 0 3 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子