一、如何理解线性回归模型

简单举个例子:期末总成绩=0.6 x 平时成绩 + 0.3 x 期末考试成绩 + 0.1 x 考勤

期末总成绩为目标值,平时成绩、期末考试成绩、考勤是特征值,在目标值和特征值之间建立一个关系,这个关系就可以理解为线性模型。

1、线性关系:单变量线性关系,在二维平面坐标轴上成直线表示。多变量线性关系:2个特征值则在三位平面上成平面的表示。

2、非线性关系


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

1、损失

因为我们的预测结果和真实的结果一般都是存在误差的,很难完美的预测出真实的结果,只能尽可能的缩小误差。可以通过损失函数将误差给衡量出来。

损失函数:

  • yi为第i个训练样本的真实值
  • h(xi)为第i个训练样本特征值组合预测函数
  • 又称最小二乘法

2、优化

线性回归中最长用的两种方式:正规方程和梯度下降

(1)正规方程:

X为特征值矩阵,y为目标值矩阵。直接求到最好的结果w(w是矩阵也就是权重系数)

(2)梯度下降 

a.单变量函数的梯度下降

我们假设有一个单变量的函数 :J(θ) = θ**2

函数的微分(求导):J、(θ) = 2θ

初始化,起点为: θ0 = 1

学习率:α = 0.4

我们开始进行梯度下降的迭代计算过程:

b.多变量函数的梯度下降

我们假设有一个目标函数 ::J(θ) = θ1**2 + θ2**2   (**2表示平方)

现在要通过梯度下降法计算这个函数的最小值。我们通过观察就能发现最小值其实就是 (0,0)点。但是接下 来,我们会从梯度下降算法开始一步步计算到这个最小值! 我们假设初始的起点为: θ0 = (1, 3)

初始的学习率为:α = 0.1

函数的梯度为:▽:J(θ) =< 2θ1 ,2θ2>

进行多次迭代:

α在梯度下降算法中被称作为学习率或者步长,α不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!

梯度都要乘以一个负号!!!

梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号


三、常见的梯度下降算法

  • 全梯度下降算法(Full gradient descent)(FG)
  • 随机梯度下降算法(Stochastic gradient descent)(SG)
  • 随机平均梯度下降算法(Stochastic average gradient descent)(SAG)
  • 小批量梯度下降算法(Mini-batch gradient descent)(mini-bantch)

四、波士顿房价预测案例

回归性能评估:均方误差(Mean Squared Error)MSE)评价机制:

yi为预测值,¯y为真实值

def model():# 1.获取数据data = load_boston()# 2.数据集划分x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22)# 3.特征工程-标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.fit_transform(x_test)# 4.机器学习-线性回归(正规方程)estimator = LinearRegression()estimator.fit(x_train, y_train)# 4.机器学习-线性回归(特征方程)estimator = SGDRegressor(max_iter=1000)estimator.fit(x_train, y_train)# 5.模型评估# 5.1 获取系数等值y_predict = estimator.predict(x_test)print("预测值为:\n", y_predict)print("模型中的系数为:\n", estimator.coef_)print("模型中的偏置为:\n", estimator.intercept_)# 5.2 评价# 均方误差error = mean_squared_error(y_test, y_predict)print("误差为:\n", error)

 

五、拟合,正则化,维灾难

1、过拟合:在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据(模型过于复杂)

  • 原因:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点
  • 解决办法:  (1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。         (2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。       (3)正则化       (4)减少特征维度,防止维灾难

  2、欠拟合:在训练数据上不能获得更好的拟合,并且在测试数据集上也不能很好地拟合数据(模型过于简单)

  • 原因:学习到数据的特征过少
  • 解决办法:(1)添加其他特征项   (2)添加多项式特征

3、正则化

L2正则化作用:可以使得其中一些W的都很小,都接近于0,削弱某个特征的影响

优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象

例如:Ridge回归

L1正则化作用:可以使得其中一些W的值直接为0,删除这个特征的影响

例如:LASSO回归

正则化力度越大,权重系数会越小

正则化力度越小,权重系数会越大

4、正则化线性模型

  • Ridge Regression 岭回归
  • Lasso 回归
  • Elastic Net 弹性网络
  • Early stopping

5、维灾难


六、模型保存与加载

# 4.机器学习-线性回归(岭回归)#  4.1 模型训练estimator = Ridge(alpha=1)estimator.fit(x_train, y_train)#  4.2 模型保存joblib.dump(estimator, "./data/test.pkl")# 4.3 模型加载estimator = joblib.load("./data/test.pkl")

七、线性回归API总结

1、sklearn.linear_model.LinearRegression(fit_intercept=True)

1)通过正规方程优化  (********)

(2)fit_intercept:是否计算偏置

(3)LinearRegression.coef_:回归系数

(4)LinearRegression.intercept_:偏置

2、sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='invscaling', eta0=0.01)

(1)SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型。  (********)

(2)loss:损失类型loss=”squared_loss”: 普通最小二乘法

(3)fit_intercept:是否计算偏置

(4)learning_rate : string, optional

a.   学习率填充

b.  'constant': eta = eta0

c.  'optimal': eta = 1.0 / (alpha * (t + t0)) [default]

d.  'invscaling': eta = eta0 / pow(t, power_t)     ------- power_t=0.25:存在父类当中

e. 对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率。

(5)SGDRegressor.coef_:回归系数

(6)SGDRegressor.intercept_:偏置

3、sklearn.metrics.mean_squared_error(y_true, y_pred)

(1)均方误差回归损失评估  (********)

(2)y_true:真实值

(3)y_pred:预测值

(4)return:浮点数结果

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

(1)具有L2正则化的线性回归-----岭回归  (********)

(2)alpha:正则化力度,也叫 λ

(λ取值:0~1 1~10)

(3)solver:会根据数据自动选择优化方法

(sag:如果数据集、特征都比较大,选择该随机梯度下降优化)

(4)normalize:数据是否进行标准化

(normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据)

(5)Ridge.coef_:回归权重

(6)Ridge.intercept_:回归偏置

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

5、sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)

(1)交叉验证---岭回归  (********)

(2)具有l2正则化的线性回归,可以进行交叉验证

(3)coef_:回归系数

6、from sklearn.externals import joblib

(1)模型保存与加载  (********)

(2)保存:joblib.dump(estimator, 'test.pkl')

(3)加载:estimator = joblib.load('test.pkl')

模型保存要用.pkl结尾

线性回归阶段学习总结相关推荐

  1. 2018年计算机职称考试冲刺,2018年中级会计职称考试冲刺阶段学习计划

    2018年中级会计师考试冲刺阶段复习时间段是8月12日至9月8日.经过前面一段时间的复习,相信考生已经对全书的内容有了一定的了解和掌握.在此小编为大家总结了2018年中级会计职称考试冲刺阶段学习计划, ...

  2. Python第一阶段学习总结

    [第7天]Python第一阶段学习总结 2021/09/23 一. 元组 元组的定义 元组是容器型数据(序列),将()作为容器的标志里面多个元素用逗号隔开:(元素1, 元素2,-) 元组不可变(不支持 ...

  3. OpenCV作业及近阶段学习总结

    OpenCV作业及近阶段学习总结 作业描述 不太理解为啥不让用OpenCV的API,明明可以直接可以一行代码搞定..... numpy代码如下: 均值滤波 import cv2 import nump ...

  4. Java web阶段学习总结(华清远见)

    标题Java web阶段学习总结 经过web前端的学习之后,我们开启了Java web后端的学习. 学习一样新的东西首先要了解它的原理,以及所要具备的一些条件.对于Servlet 的开发步骤一般有:新 ...

  5. 自学大数据者请进:大数据学习线路及各阶段学习书籍推荐

    大数据学习路线及各阶段学习书籍推荐!废话不多说,直接切入主题,有需要的小伙伴可以参考学习! 阶段一.大数据基础--java语言基础方面 自学大数据者请进:大数据学习线路及各阶段学习书籍.视频推荐 (1 ...

  6. 大数据学习线路及各阶段学习书籍推荐

    大数据学习路线及各阶段学习书籍推荐!废话不多说,直接切入主题,有需要的小伙伴可以参考学习! 阶段一.大数据基础--java语言基础方面 (1)Java语言基础 Java开发介绍.熟悉Eclipse开发 ...

  7. 谈谈我的高中阶段学习情况以及大学现状,还有对未来的规划和憧憬

    谈谈我的高中阶段学习情况以及大学现状,还有对未来的规划和憧憬 作者:Luosd     时间:2017年春节 光阴似箭,日月如梭,正是经历了这些年的光阴,才真正懂得了这句话是多么的正确,回首过去,仿佛 ...

  8. python数据趋势算法_Python数据拟合与广义线性回归算法学习

    机器学习中的预测问题通常分为2类:回归与分类. 简单的说回归就是预测数值,而分类是给数据打上标签归类. 本文讲述如何用Python进行基本的数据拟合,以及如何对拟合结果的误差进行分析. 本例中使用一个 ...

  9. java程序员必看经典书单,以及各个阶段学习建议

    最近,部分读者一直希望我给大家推荐java程序员必读书籍,以及java程序员每个阶段的学习建议. 今天,先给大家推荐1.0版本,后面再不断完善程序员必读书籍2.0版本. 希望,你早日成为牛逼的程序员. ...

最新文章

  1. .NET Core + Kubernetes:Deployment
  2. 4线电子围栏安装示意图_知识积累|周界防护-脉冲电子围栏的安装
  3. 20 个强大的 Sublime Text 插件
  4. CenterOS防火墙操作
  5. 史上最全近百条Oracle DBA日常维护SQL脚本指令
  6. 指针用作函数参数、指针型函数和函数指针
  7. Web 前端编程运维必备
  8. Python数据可视化——坐标轴基础
  9. 剧情插件Cutscene Creator uSequencer 1.3.7.1使用说明一
  10. pytorch 模型输出特征 保存npy
  11. ubuntu上通过命令行导出mysql数据库文件到widows系统上
  12. Socket 多人聊天室的实现 (含前后端源码讲解)(一)
  13. excel表格横向纵向变换_Excel新手最容易给自己挖的几个坑,手把手教你完美避雷!...
  14. 从“中国宙斯盾”亮相想到的
  15. OpenBCI_GUI通过lsl传输出来的数据是原始数据吗?
  16. python 声音基频f0_ASR中常用的语音特征之FBank和MFCC(原理 + Python实现)
  17. 处理器(CPU)结构
  18. element 复杂表格渲染(1)
  19. 3.3.4.2.2 Decimation-in-Frequency (DIF) Radix-2 FFT
  20. javascript实现按频次排序

热门文章

  1. TI RTOS Kernel
  2. 以产业区块链提升数字化转型质量
  3. 在线最小二乘计算机器,最小二乘法在线最小二乘法计算器
  4. hibernate5.2之后createCriteria过时问题
  5. 你不知道的JavaScript(ES6与之未来)
  6. 区块链技术让传统旅游业焕发新机
  7. workman + webRtc + js 实现一对一视频聊天
  8. php后台闪退,详解Cscms V4程序网站后台登陆出现闪退
  9. Java死锁和Java进程Java CPU 100%排查
  10. 2000元组装电脑配置推荐2022 2000元组装电脑配置清单2022