线性回归

  • 一. 介绍
    • 1. 1 线性回归API介绍——LinearRegression
  • 二. 线性回归的损失和优化
    • 2.1 全梯度下降算法(FG)
    • 2.2 随机梯度下降算法(SG)
    • 2.3 小批量梯度下降算法(mini-batch)
    • 2.4 随机平均梯度下降算法(SAG)
  • 三. 波士顿房价预测——正规方程(线性回归)
    • 3.1 获取数据
    • 3.2 数据基本处理
    • 3.3 特征工程 标准化
    • 3.4机器学习(线性回归)
    • 3.5 模型评估
  • 四 波士顿房价预测——梯度下降(SGDRegressor)
    • 4.1 修改一下机器学习
    • 4.2 重新模型评估
  • 五. 波士顿房价预测——岭回归(RidgeCV)

悄悄介绍自己:

作者:神的孩子在跳舞
本人是快升大四的小白,在山西上学,学习的是python方面的知识,希望能找到一个适合自己的实习公司,哪位大佬看上我的可以留下联系方式我去找您,或者加我微信chenyunzhiLBP

一. 介绍

  1. 定义:线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
  2. 公式:y=kx+b
  3. 特征值目标值之间建立了一个关系,这个关系可以理解为线性模型
  4. 非线性:y=kx2+b

1. 1 线性回归API介绍——LinearRegression

  1. 获取数据集
  2. 机器学习
#导入线性回归API
from sklearn .linear_model import LinearRegression
import numpy as np
#生成数据数据
x = [[80, 86],
[82, 80],
[85, 78],
[90, 90],
[86, 82],
[82, 90],
[78, 80],
[92, 94]]
y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]
#模型训练
#1.实例化一个估计器
estimator=LinearRegression()
#2. 调用fit方法,进行训练
estimator.fit(x,y)
#查看系数值
coef=estimator.coef_
print("系数值:\n",coef)# [2.22073791 2.65648855]就可以知道x中两列的数乘什么值可以的到y值#预测:
pre=estimator.predict([[80,100]])
print("预测值(目标值):\n",pre)
系数值:[0.3 0.7]
预测值(目标值):[94.]

二. 线性回归的损失和优化

  1. 损失函数:预测值减真实值的平方求和(最小二乘法)

  2. 如何减小损失函数

    (1)正规方程:调整系数(w)的矩阵(适合样本特征较少的情况)
    (2)梯度下降法 -- 循序渐进举例:山  -- 可微分的函数山底 -- 函数的最小值梯度的概念单变量 -- 切线多变量 -- 向量梯度下降法中关注的两个参数α  -- 就是步长步长太小 -- 下山太慢步长太大 -- 容易跳过极小值点(*****)为什么梯度要加一个负号梯度方向是上升最快方向,负号就是下降最快方向
    (3)梯度下降法和正规方程对比:梯度下降                 正规方程需要选择学习率          不需要需要迭代求解            一次运算得出特征数量较大可以使用     需要计算方程,时间复杂度高O(n3)
    

2.1 全梯度下降算法(FG)

计算所有样本的误差平均值,作为我的目标函数

缺点:数据量太大

2.2 随机梯度下降算法(SG)

只取其中一个样本,通过一个样本来反复的重复的下降迭代

缺点:一个不能代表全部

2.3 小批量梯度下降算法(mini-batch)

选取一部分来进行迭代更新

缺点:对其他样本不公平

2.4 随机平均梯度下降算法(SAG)

首先计算一个权重维度,就是外面有很多个样本,算的时候算出来一个权重样本给赋值到样本中,样本有了这个权重以后,下一次在计算的时候,我依旧把这个权重带到这个样本里面进行计算.如此,每一轮更新仅需计算一个样本的梯度,计算成本等同于SG,但收敛速度快得多。

三. 波士顿房价预测——正规方程(线性回归)

均方误差:真实值预测值的平方求和除于所有样本的值

导入对应API

from sklearn.datasets import load_boston#导入数据
from sklearn.model_selection import train_test_split#数据集划分
from sklearn.preprocessing import StandardScaler#特征工程标准化
from sklearn.linear_model import LinearRegression#线性回归
from sklearn.metrics import mean_squared_error#模型评估

3.1 获取数据

boston=load_boston()
boston

部分数据:

{'data': array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,...23.1, 19.7, 18.3, 21.2, 17.5, 16.8, 22.4, 20.6, 23.9, 22. , 11.9]),'feature_names': array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD','TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7'),

3.2 数据基本处理

#数据集划分
x_train, x_test, y_train, y_test = train_test_split(boston.data,boston.target,test_size=0.2)
x_train

部分数据:

array([[6.6170e-02, 0.0000e+00, 3.2400e+00, ..., 1.6900e+01, 3.8244e+02,9.9700e+00],...,[5.4250e-02, 0.0000e+00, 4.0500e+00, ..., 1.6600e+01, 3.9560e+02,6.2900e+00]])

3.3 特征工程 标准化

transfer=StandardScaler()#实例化一个对象
x_train=transfer.fit_transform(x_train)#通过transform进行转换
x_test=transfer.fit_transform(x_test)
x_train

部分数据:

array([[-0.3787068 , -0.51054284, -1.09701944, ..., -0.69607865,0.26568234, -0.32873461],...,[-0.38005317, -0.51054284, -0.97801505, ..., -0.83515668,0.4119297 , -0.86543003]])

3.4机器学习(线性回归)

estimator=LinearRegression()#实例化一个对象
estimator.fit(x_train,y_train)#训练
print("这个模型的偏置是:\n",estimator.intercept_)
这个模型的偏置是:22.930198019801995

3.5 模型评估

#预测值和准确率
y_pre=estimator.predict(x_test)
print("预测值:\n",y_pre)
score=estimator.score(x_test,y_test)
print("准确率:\n",score)
#均方误差
ret=mean_squared_error(y_test,y_pre)#输出测试的目标值和预测后的预测值
print("均方误差是:\n",ret)
预测值:[27.2896495  14.9985836  20.11931172 20.78720261  8.36920169 16.54422763...33.51147164  8.14587979  8.80369598 25.18907243 25.66926574 20.952631923.15306736 25.19316154 22.7180993  20.67159295 17.03417655 18.92520514]
准确率:0.6694454216146718
均方误差是:31.60855906567943

四 波士顿房价预测——梯度下降(SGDRegressor)

api:

sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='invscaling', eta0=0.01)
  1. loss – 损失 (最小二乘)
  2. learning_rate – 学习率
    一般学习率都是进行动态的更新,也可以指定常数,但是不推荐。
from sklearn.linear_model import SGDRegressor#梯度下降

4.1 修改一下机器学习

#修改一下机器学习
estimator=SGDRegressor(max_iter=10000,learning_rate="constant",eta0=0.000001)#实例化一个对象,max_iter迭代几次,learning_rate学习率,eta设置学习率
estimator.fit(x_train,y_train)#训练
print("这个模型的偏置是:\n",estimator.intercept_)
这个模型的偏置是:[21.43629149]

4.2 重新模型评估

#预测值和准确率
y_pre=estimator.predict(x_test)
print("预测值:\n",y_pre)
score=estimator.score(x_test,y_test)
print("准确率:\n",score)
#均方误差
ret=mean_squared_error(y_test,y_pre)#输出测试的目标值和预测后的预测值
print("均方误差是:\n",ret)
预测值:[25.29790506 14.11914061 19.48652432 19.74929904  6.48583548 13.37014642...32.58145984  7.03392801  7.19451762 24.52285962 24.28395461 18.715682121.33737494 23.77922648 18.49322604 19.06555468 16.46683163 20.78219838]
准确率:0.6802348744819791
均方误差是:30.57684121772666

出现以下警告:修改成这样子:SGDRegressor(max_iter=1000)

五. 波士顿房价预测——岭回归(RidgeCV)

标准化:是对前面一些方法的封装,在使用线性回归,梯度下降,岭回归,我们会涉及到数据大小的计算,都需要特征工程里面的把数据变成到特定范围内(标准化),在进行值的变换

API——Ridge:

Ridge方法相当于SGDRegressor(penalty=‘l2’, loss=“squared_loss”),只不过SGDRegressor实现了一个普通的随机梯度下降学习,推荐使用Ridge(实现了SAG)

sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)

参数介绍

  1. 具有l2正则化的线性回归
  2. alpha:正则化力度,也叫 λ,通过这个力度来进行响应值的判断,值越大,正则化力度越大,相应的系数会越小,默认值是1
  3. solver:会根据数据自动选择优化方法 sag:如果数据集、特征都比较大,选择该SAG随机梯度下降优化
  4. normalize:默认进行标准化处理 normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据
  5. Ridge.coef_:回归权重
  6. Ridge.intercept_:回归偏置

API——RidgeCV:

这个API封装的更牛逼:可以把λ对应的值,可以通过网格搜索进行值的传递

sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
  1. 具有l2正则化的线性回归,可以进行交叉验证

  2. coef_:回归系数

代码:

from sklearn.linear_model import RidgeCV#岭回归

修改一下机器学习

estimator=RidgeCV(alphas=(0.001,0.1,1,1.0))#实例化一个对象,自动选择一个参数看看那个最好

输出:

这个模型的偏置是:22.54529702970301
预测值:[20.80073917 22.01968705 22.07129549 13.1739321  29.19152411 33.26611376...31.36346221 25.80495191 10.39900086 25.39191069 16.09318826 24.79786881]
准确率:0.7216861974681366
均方误差是:23.6001418609719

本人博客:https://blog.csdn.net/weixin_46654114
本人b站求关注:https://space.bilibili.com/391105864
转载说明:跟我说明,务必注明来源,附带本人博客连接。

请给我点个赞鼓励我吧

正规方程,梯度下降,岭回归——机器学习相关推荐

  1. 机器学习(11)线性回归(1)理论:损失函数(含最小二乘法)、正规方程、梯度下降、回归性能评估(均方差)

    目录 一.线性回归基础理论 1.定义与公式 2.线性关系(单特征与双特征) 2-1.单特征线性关系 2-2.双特征平面关系 2-3.其他线性模型 二.线性回归的损失和优化原理 1.损失函数 1.定义 ...

  2. 13_线性回归分析、线性模型、损失函数、最小二乘法之梯度下降、回归性能评估、sklearn回归评估API、线性回归正规方程,梯度下降API、梯度下降 和 正规方程对比

    1.线性回归 1.1 线性模型 试图学得一个通过属性的线性组合来进行预测的函数: 1.2 定义 定义:线性回归通过一个或者多个自变量与因变量之间进行建模的回归分析.其中特点为一个或多个称为回归系数的模 ...

  3. matlab用梯度下降拟合回归直线

    看了神经网络的梯度下降(Gradient Descent)逼近的方法之后就写了一个拟合散点(y= kx+b)的程序,原理是使方差最小(对拟合直线来说这样的算法肯定不算是好算法). x=(1:10)'; ...

  4. 机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)

    前言: 上次写过一篇关于贝叶斯概率论的数学,最近时间比较紧,coding的任务比较重,不过还是抽空看了一些机器学习的书和视频,其中很推荐两个:一个是stanford的machine learning公 ...

  5. 机器学习中为什么需要梯度下降_梯度下降直觉 - 机器是如何学习的

    梯度下降法是一种求函数最小值的算法.在机器学习中,预测值和实际值之间的差称为误差.将所有数据点上的所有误差加在一起时称为成本. 当然,我们希望最小化代表此成本的函数 - 成本函数. 在机器学习中梯度下 ...

  6. sklearn - 线性回归(正规方程与梯度下降)

    一: 线性回归方程 ​ 线性回归(英语:linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量 之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归 ...

  7. 【机器学习】P17 梯度下降 与 梯度下降优化算法(BGD 等 与 Adam Optimizer、AdaGrad、RMSProp)

    梯度下降与梯度下降算法 梯度下降 梯度下降算法 基础优化算法 批量梯度下降 BGD 随机梯度下降 SGD 小批量梯度下降 MBGD 动量梯度下降 MGD 基础优化算法上的改进和优化的算法 自适应梯度算 ...

  8. 【机器学习】<刘建平Pinard老师博客学习记录>梯度下降(Gradient Descent)

    目录 一.梯度: 二.梯度上升和梯度下降: 三.梯度下降法算法详解: 1.梯度下降的直观解释: 2.梯度下降的相关概念: 3.梯度下降的详细算法: 3.1 梯度下降法的代数方式描述: 3.2 梯度下降 ...

  9. 梯度下降,损失函数-讲的很好

    原文:http://blog.csdn.net/woxincd/article/details/7040944,原文有评论,注意看 回归(regression).梯度下降(gradient desce ...

最新文章

  1. grep,但只有特定的文件扩展名
  2. Rocket - diplomacy - AddressSet
  3. 外媒称Windows 10是一辆“广告大巴车”
  4. 资源权限操作-添加资源权限
  5. jzoj6800-NOIP2020.9.19模拟spongebob【枚举】
  6. 我们异口同声说的shooow
  7. stylelint rules
  8. 新一代数据安全的制胜法宝-UBA
  9. VB案例:DAO使用示例1
  10. 2020 年百度之星·程序设计大赛 - 初赛一 Civilization BFS广搜
  11. java jquery时间问候语,js实现实时问候,不同时间显示不同问候语
  12. LODOP打印控件简单示例
  13. java 批量打印pdf文件_java 打印tiff及批量打印图片技术文章.doc
  14. Excel 的进阶学习
  15. 【Java从零到架构师第③季】【30】SpringMVC-转发_重定向_路径问题总结
  16. android arcgis使用自定义图片背景底图(tif图片制作)
  17. AJAX实现页面登录及注册用户名验证
  18. 判断一个数是奇数还是偶数
  19. u-boot-2012.10移植(三)MMC驱动
  20. 163邮箱苹果设置不成功_【知乎最详细】Windows邮件amp;日历UWP+QQ邮箱如何设置

热门文章

  1. OPPOr9手机设置
  2. IE浏览器 时间出现NaN-aN-AN aN:aN:aN的原因
  3. 怎么样才能做C语言项目?
  4. 基于jsp+mysql+ssm汽车配件管理系统-计算机毕业设计
  5. Recast Navigation 学习笔记(一)
  6. android 原生等待动画,Android 自定义Loading动画
  7. 【C语言】对猴子吃桃问题的解读
  8. Mac安装android studio
  9. 下载股票的历史日交易数据并存入数据库——基于tushare
  10. 数据结构——二叉树练习题