岭回归介绍

用正规方程求解线性回归时,


岭回归是线性回归的正则化版本,即在原来的线性回归的 cost function 中添加正则项(regularization term):


利用岭回归实现Longley数据集,Longley数据集来自J.W.Longley(1967)发表在JASA上的一篇论文,是强共线性的宏观经济数据,包含GNP deflator(GNP平减指数)、GNP(国民生产总值)、Unemployed(失业率)、rmedForces(武装力量)、Population(人口)、year(年份),Emlpoyed(就业率)。LongLey数据集因存在严重的多重共线性问题,在早期经常用来检验各种算法或计算机的计算精度。

sklearn中的岭回归

导入包

vdfgfd

import numpy as np
from numpy import genfromtxt
import pandas as pd
from sklearn import linear_model
import matplotlib.pyplot as plt

读入数据

data = pd.read_csv("longley.csv",delimiter=',')
print(data)

Unnamed: 0 GNP.deflator GNP Unemployed Armed.Forces Population Year Employed
0 1947 83.0 234.289 235.6 159.0 107.608 1947 60.323
1 1948 88.5 259.426 232.5 145.6 108.632 1948 61.122
2 1949 88.2 258.054 368.2 161.6 109.773 1949 60.171
3 1950 89.5 284.599 335.1 165.0 110.929 1950 61.187
4 1951 96.2 328.975 209.9 309.9 112.075 1951 63.221
5 1952 98.1 346.999 193.2 359.4 113.270 1952 63.639
6 1953 99.0 365.385 187.0 354.7 115.094 1953 64.989
7 1954 100.0 363.112 357.8 335.0 116.219 1954 63.761
8 1955 101.2 397.469 290.4 304.8 117.388 1955 66.019
9 1956 104.6 419.180 282.2 285.7 118.734 1956 67.857
10 1957 108.4 442.769 293.6 279.8 120.445 1957 68.169
11 1958 110.8 444.546 468.1 263.7 121.950 1958 66.513
12 1959 112.6 482.704 381.3 255.2 123.366 1959 68.655
13 1960 114.2 502.601 393.1 251.4 125.368 1960 69.564
14 1961 115.7 518.173 480.6 257.2 127.852 1961 69.331
15 1962 116.9 554.894 400.7 282.7 130.081 1962 70.551

切分数据

x_data = data.iloc[:,2:]
y_data = data.iloc[:,1]
print(x_data)
print(y_data)

创建模型

# 生成50个值,作为岭回归系数
alphas_to_test = np.linspace(0.001, 1)
# 创建模型,保存误差值
estimator = linear_model.RidgeCV(alphas=alphas_to_test, store_cv_values=True)
estimator.fit(x_data, y_data)# 岭回归系数
print(estimator.alpha_)
# loss值
print(estimator.cv_values_.shape)

0.40875510204081633
(16, 50)

# 画图
# 岭系数跟loss值的关系
plt.plot(alphas_to_test, estimator.cv_values_.mean(axis=0))
# 选取的岭系数值的位置
plt.plot(estimator.alpha_, min(estimator.cv_values_.mean(axis=0)),'ro')
plt.show()

estimator.predict([x_data.iloc[2]])

array([88.11216213])

正规方程岭回归

导入包

import numpy as np
from numpy import genfromtxt
import pandas as pd
import matplotlib.pyplot as plt

读入数据

data = pd.read_csv("longley.csv",delimiter=',')
print(data)
  Unnamed: 0  GNP.deflator      GNP  Unemployed  Armed.Forces  Population    Year  Employed
0         1947          83.0  234.289       235.6         159.0     107.608    1947    60.323
1         1948          88.5  259.426       232.5         145.6     108.632    1948    61.122
2         1949          88.2  258.054       368.2         161.6     109.773    1949    60.171
3         1950          89.5  284.599       335.1         165.0     110.929    1950    61.187
4         1951          96.2  328.975       209.9         309.9     112.075    1951    63.221
5         1952          98.1  346.999       193.2         359.4     113.270    1952    63.639
6         1953          99.0  365.385       187.0         354.7     115.094    1953    64.989
7         1954         100.0  363.112       357.8         335.0     116.219    1954    63.761
8         1955         101.2  397.469       290.4         304.8     117.388    1955    66.019
9         1956         104.6  419.180       282.2         285.7     118.734    1956    67.857
10        1957         108.4  442.769       293.6         279.8     120.445    1957    68.169
11        1958         110.8  444.546       468.1         263.7     121.950    1958    66.513
12        1959         112.6  482.704       381.3         255.2     123.366    1959    68.655
13        1960         114.2  502.601       393.1         251.4     125.368    1960    69.564
14        1961         115.7  518.173       480.6         257.2     127.852    1961    69.331
15        1962         116.9  554.894       400.7         282.7     130.081    1962    70.551

切分数据

x_data = data.iloc[0:,2:]
y_data = data.iloc[0:,1]
y_data = y_data[:, np.newaxis]
print(x_data)
print(y_data)
        GNP  Unemployed  Armed.Forces  Population  Year  Employed
0   234.289       235.6         159.0     107.608  1947    60.323
1   259.426       232.5         145.6     108.632  1948    61.122
2   258.054       368.2         161.6     109.773  1949    60.171
3   284.599       335.1         165.0     110.929  1950    61.187
4   328.975       209.9         309.9     112.075  1951    63.221
5   346.999       193.2         359.4     113.270  1952    63.639
6   365.385       187.0         354.7     115.094  1953    64.989
7   363.112       357.8         335.0     116.219  1954    63.761
8   397.469       290.4         304.8     117.388  1955    66.019
9   419.180       282.2         285.7     118.734  1956    67.857
10  442.769       293.6         279.8     120.445  1957    68.169
11  444.546       468.1         263.7     121.950  1958    66.513
12  482.704       381.3         255.2     123.366  1959    68.655
13  502.601       393.1         251.4     125.368  1960    69.564
14  518.173       480.6         257.2     127.852  1961    69.331
15  554.894       400.7         282.7     130.081  1962    70.551
[[ 83. ][ 88.5][ 88.2][ 89.5][ 96.2][ 98.1][ 99. ][100. ][101.2][104.6][108.4][110.8][112.6][114.2][115.7][116.9]]
print(np.mat(x_data).shape)
print(np.mat(y_data).shape)
# 给样本添加偏置项
X_data = np.concatenate((np.ones((16,1)),x_data),axis=1)
print(X_data.shape)

(16, 6)
(16, 1)
(16, 7)

print(X_data[:3])

[[1.00000e+00 2.34289e+02 2.35600e+02 1.59000e+02 1.07608e+02,1.94700e+03
6.03230e+01]
[1.00000e+00 2.59426e+02 2.32500e+02 1.45600e+02 1.08632e+02 1.94800e+03 6.11220e+01]
[1.00000e+00 2.58054e+02 3.68200e+02 1.61600e+02 1.09773e+02 1.94900e+036.01710e+01]]

岭回归标准方程法求解回归参数

def weights(xArr, yArr, lam=0.2):xMat = np.mat(xArr)yMat = np.mat(yArr)xTx = xMat.T*xMat # 矩阵乘法rxTx = xTx + np.eye(xMat.shape[1])*lam# 计算矩阵的值,如果值为0,说明该矩阵没有逆矩阵if np.linalg.det(rxTx) == 0.0:print("This matrix cannot do inverse")return# xTx.I为xTx的逆矩阵ws = rxTx.I*xMat.T*yMatreturn ws
ws = weights(X_data,y_data)
print(ws)

[[ 7.38107648e-04]
[ 2.07703836e-01]
[ 2.10076376e-02]
[ 5.05385441e-03]
[-1.59173066e+00]
[ 1.10442920e-01]
[-2.42280461e-01]]

计算预测值

np.mat(X_data)*np.mat(ws)

matrix([[ 83.55075226],
[ 86.92588689],
[ 88.09720228],
[ 90.95677622],
[ 96.06951002],
[ 97.81955375],
[ 98.36444357],
[ 99.99814266],
[103.26832266],
[105.03165135],
[107.45224671],
[109.52190685],
[112.91863666],
[113.98357055],
[115.29845063],
[117.64279933]])

机器学习--岭回归10相关推荐

  1. [机器学习] - 岭回归与Lasso回归

    注:在学习机器学习中回归算法时,随时都会接触最小二乘法原理和求解过程,最小二乘法可能对于理工科的学生低头不见抬头见的知识点,特点是在我学习<数值分析>课程中,老师讲了些最小二乘法的历史[- ...

  2. 机器学习 岭回归和lasso中乘调优参数λ的确定

    转自:https://blog.csdn.net/weixin_43374551/article/details/83688913 一.岭回归 1.参数推导 线性回归模型的目标函数J(β)=∑(y−X ...

  3. 机器学习的练功方式(十)——岭回归

    文章目录 十 岭回归 10.1 岭回归的接口 10.2 岭回归处理房价预测 十 岭回归 岭回归是线性回归的改进,有时候迫不得已我们的参数确实不能少,这时候过拟合的现象就可能发生.为了避免过拟合现象的发 ...

  4. 【机器学习入门】(8) 线性回归算法:正则化、岭回归、实例应用(房价预测)附python完整代码和数据集

    各位同学好,今天我和大家分享一下python机器学习中线性回归算法的实例应用,并介绍正则化.岭回归方法.在上一篇文章中我介绍了线性回归算法的原理及推导过程:[机器学习](7) 线性回归算法:原理.公式 ...

  5. Machine Learning | (10) 回归算法-岭回归

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法14:Ridge岭回归

    Python机器学习算法实现 Author:louwill 上一节我们讲到预防过拟合方法的Lasso回归模型,也就是基于L1正则化的线性回归.本讲我们继续来看基于L2正则化的线性回归模型. L2正则化 ...

  7. 【机器学习】正则化的线性回归 —— 岭回归与Lasso回归

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

  8. [机器学习-实践篇]学习之线性回归、岭回归、Lasso回归,tensorflow实现的线性回归

    线性回归.岭回归.Lasso回归 前言 1.线性回归 2. 岭回归 3. Lasso回归 4. tensorflow利用梯度下降实现的线性回归 前言 本章主要介绍线性回归.岭回归.Lasso回归,te ...

  9. 大数据分析机器学习(三)之岭回归-医疗心率数据分析

    大数据分析机器学习(一)之线性模型-年龄和心率关系 大数据分析机器学习(二)之直方图和多元线性回归 岭回归 岭回归(英文名:ridge regression, Tikhonov regularizat ...

最新文章

  1. C++集成开发环境(IDE)的优点
  2. luogu P3379 【模板】最近公共祖先(LCA)
  3. 零基础带你一步步搭建Nacos高可用集群(史上最详细,赛过教科书!)为此我准备了三台云服务器+云数据库
  4. java 俄文,俄文字体在word里面是什么
  5. Win32 控件篇(6)
  6. asp.net GridView 时间格式化 设置 短日期格式 去掉0!
  7. 复试复旦大学计算机博士,【华慧推荐】2018年复旦大学博士面试成功经验分享...
  8. 户外lisp导向牌如何安装_安装案例|户外标识牌常用安装方法
  9. php10天速成培训,十天学会php之第九天
  10. php生成色斑图,等值线图以及色斑图实现方式综述
  11. 灵格斯词霸 2.6.3 - 小窗口, 大世界
  12. visual studio python使用教程_教程:在 Visual Studio 中开始使用 Flask Web 框架
  13. 【烈日炎炎战后端】JAVA多线程(11.2万字)
  14. (二十六)树莓派3B+ 获取HMC5883L的磁场数据
  15. 用计算机编纂家谱的作用,家谱的编纂几大流程?
  16. [深度学习入门]两阶段目标检测算法到Faster RCNN
  17. 逆水寒语音服务器,逆水寒3月14日更新维护公告 风雅颂语音玩法上线
  18. Windows缓冲区溢出初探
  19. 【闲谈】应聘时要问HR的7个问题
  20. 2021年后国内互联网发展趋势预测

热门文章

  1. html5游戏开发_HTML5游戏开发–第10课
  2. FAQ是什么?如何高效地打造一个好的FAQ?
  3. mysql权限和使用注意事项及mysql 数据类型详解和innodb,myisam区别
  4. 【leetcode Database】175.Combine Two Tables
  5. python写的小巧的(14行有效代码)随机密码生成小脚本工具
  6. Java实现文件批量导入导出实例(兼容xls,xlsx)
  7. 解锁安卓手机端无损flac音乐免费播放和下载
  8. Docker 搭建Hfish蜜罐平台
  9. Shopee首届跨境品牌峰会落幕,升级全链路赋能品牌出海劲增!
  10. 第4章 JavaScript表达式与运算符