当前位置:网站首页>机器学习——线性回归
机器学习——线性回归
2022-08-04 18:06:00 【Ding Jiaxiong】
7. 线性回归
文章目录
7.1 应用场景
房价预测
销售额度预测
贷款额度预测
7.2 定义
利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式
7.3 特点
只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归
7.4 通用公式

7.4.1 例子
- 期末成绩:0.7×考试成绩+0.3×平时成绩
- 房子价格 = 0.02×中心区域的距离 + 0.04×城市一氧化氮浓度 + (-0.12×自住房平均房价) + 0.254×城镇犯罪率
7.5 两种模型
7.5.1 线性关系
- 单变量
- 多变量
7.5.2 非线性关系
7.6 线性回归API
7.6.1 sklearn.linear_model.LinearRegression(fit_intercept=True)
LinearRegression.coef_:回归系数

通过正规方程优化
fit_intercept:是否计算偏置
LinearRegression.coef_:回归系数
LinearRegression.intercept_:偏置
7.6.2 sklearn.linear_model.SGDRegressor(loss=“squared_loss”, fit_intercept=True, learning_rate =‘invscaling’, eta0=0.01)
SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型
loss:损失类型
- loss=”squared_loss”: 普通最小二乘法
fit_intercept:是否计算偏置
learning_rate : string, optional
学习率填充
‘constant’: eta = eta0
‘optimal’: eta = 1.0 / (alpha * (t + t0)) [default]
‘invscaling’: eta = eta0 / pow(t, power_t)
- power_t=0.25:存在父类当中
对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率
SGDRegressor.coef_:回归系数
SGDRegressor.intercept_:偏置
7.7 求导
7.7.1 常见函数的导数
7.7.2 导数的四则运算
7.7.3 矩阵(向量)求导
7.8 损失和优化
7.8.1 损失函数 → 最小二乘法

yi为第i个训练样本的真实值
h(xi)为第i个训练样本特征值组合预测函数
7.8.2 优化算法
正规方程

X为特征值矩阵,y为目标值矩阵。直接求到最好的结果
缺点:当特征过多过复杂时,求解速度太慢并且得不到结果
梯度下降
基本思想
- 类比为一个下山的过程
梯度
- 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
- 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
举例
单变量的梯度下降

迭代计算
经过了4次运算,基本就抵达了函数的最低点

多变量的梯度下降
假设初始的起点为: θ0 = (1, 3)
初始的学习率为:α = 0.1
函数的梯度为:▽:J(θ) =< 2θ1 ,2θ2>
迭代计算


基本靠近函数的最小值点
公式

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

7.9 梯度下降法
7.9.1 全梯度下降算法(Full gradient descent) → FG
计算训练集所有样本误差,对其求和再取平均值作为目标函数
缺点
- 在执行每次更新时,我们需要在整个数据集上计算所有的梯度,速度慢
- 无法处理超出内存容量限制的数据集
- 不能在线更新模型,在运行的过程中,不能增加新的样本
在整个训练数据集上计算损失函数关于参数θ的梯度
7.9.2 随机梯度下降算法(Stochastic gradient descent)→ SG
每次只代入计算一个样本目标函数的梯度来更新权重

遇上噪声则容易陷入局部最优解
7.9.3 随机平均梯度下降算法(Stochastic average gradient descent) → mini-bantch
每次从训练样本集上随机抽取一个小样本集,在抽出来的小样本集上采用FG迭代更新权重
被抽出的小样本集所含样本点的个数称为batch_size,通常设置为2的幂次方,更有利于GPU加速处理
若batch_size=1,则变成了SG;若batch_size=n,则变成了FG
迭代形式
7.9.4 小批量梯度下降算法(Mini-batch gradient descent) → SAG
- 在内存中为每一个样本都维护一个旧的梯度,随机选择第i个样本来更新此样本的梯度,其他样本的梯度保持不变,然后求得所有梯度的平均值,进而更新了参数
7.9.5 梯度下降优化算法
(主要用于深度学习优化)
- 动量法
- Nesterov加速梯度下降法
- Adagrad
- Adadelta
- RMSProp
- Adam
- https://blog.csdn.net/google19890102/article/details/69942970
7.10 案例:波士顿房价预测
from sklearn.datasets import load_boston
data = load_boston()
7.11 欠拟合和过拟合
7.11.1 过拟合
一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据
- 模型过于复杂
原因
- 原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点
解决办法
重新清洗数据
增大数据的训练量
正则化
在学习的时候,数据提供的特征有些影响模型复杂度或者这个特征的数据点异常较多,所以算法在学习的时候尽量减少这个特征的影响(甚至删除某个特征的影响)
类别
L2正则化
作用
- 可以使得其中一些W的都很小,都接近于0,削弱某个特征的影响
优点
- 越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
Ridge回归
L1正则化
作用
- 可以使得其中一些W的值直接为0,删除这个特征的影响
LASSO回归
减少特征维度,防止维灾难
维灾难
- 随着维度的增加,分类器性能逐步上升,到达某点之后,其性能便逐渐下降
7.11.2 欠拟合
一个假设在训练数据上不能获得更好的拟合,并且在测试数据集上也不能很好地拟合数据
- 模型过于简单
原因
- 学习到数据的特征过少
解决办法
- 添加其他特征项
- 添加多项式特征
7.12 正则化线性模型
7.12.1 Ridge Regression (岭回归,又名 Tikhonov regularization)
在原来的线性回归的 cost function 中添加正则项
代价函数
α=0:岭回归退化为线性回归
API
sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver=“auto”, normalize=False)
具有l2正则化的线性回归
alpha:正则化力度,也叫 λ
- λ取值:0~1 1~10
solver:会根据数据自动选择优化方法
sag:如果数据集、特征都比较大,选择该随机梯度下降优化
normalize:数据是否进行标准化
Ridge.coef_:回归权重_
Ridge.intercept:回归偏置
sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
- 具有l2正则化的线性回归,可以进行交叉验证
- coef_:回归系数
7.12.2 Lasso Regression(Lasso 回归)
线性回归的另一种正则化版本,正则项为权值向量的ℓ1范数
代价函数

Lasso Regression 的代价函数在 θi=0处是不可导的.
解决方法:在θi=0处用一个次梯度向量(subgradient vector)代替梯度
倾向于完全消除不重要的权重
7.12.3 Elastic Net (弹性网络)
在岭回归和Lasso回归中进行了折中,通过 混合比(mix ratio) r 进行控制
- r=0:弹性网络变为岭回归
- r=1:弹性网络便为Lasso回归
代价函数
7.12.4 Early Stopping
- 在验证错误率达到最小值的时候停止训练
7.13 模型的保存和加载
from sklearn.externals import joblib
- 保存:joblib.dump(estimator, ‘test.pkl’)
- 加载:estimator = joblib.load(‘test.pkl’)
边栏推荐
猜你喜欢

巴比特 | 元宇宙每日必读:微博动漫将招募全球各类虚拟偶像并为其提供扶持...

2019年海淀区青少年程序设计挑战活动小学组复赛试题详细答案

(ECCV-2022)GaitEdge:超越普通的端到端步态识别,提高实用性

CAN光纤转换器CAN光端机解决消防火灾报警

开发那些事儿:如何通过EasyCVR平台获取监控现场的人流量统计数据?

EasyCVR calls the cloud recording API and returns an error and no recording file is generated. What is the reason?

EasyCVR调用云端录像API接口返回错误且无录像文件生成,是什么原因?

Iptables防火墙基础知识介绍

基于大学生内卷行为的调查研究

Flask框架实现注册加密功能详解【Flask企业课学习】
随机推荐
如何让 JS 代码不可断点
Alibaba Cloud International Edition uses ROS to build WordPress tutorial
公司自用的国产API管理神器
EasyCVR calls the cloud recording API and returns an error and no recording file is generated. What is the reason?
asp dotnet core 通过图片统计 csdn 用户访问
Literature Review on Involution of College Students
Flask framework implementations registered encryption, a Flask enterprise class learning 】 【
关于大学生内卷的文献综述
使用bash语句,清空aaa文件夹下的所有文件
防火墙基础之防火墙做出口设备安全防护
Develop those things: How to obtain the traffic statistics of the monitoring site through the EasyCVR platform?
报道称任天堂在2023年3月前不会推出任何新硬件产品
解决错误:The package-lock.json file was created with an old version of npm
Route lazy loading
2018年南海区小学生程序设计竞赛详细答案
路由懒加载
链表的经典入门LeetCode题目
基于层次分析法的“内卷”指数分析
【STM32】入门(五):串口TTL、RS232、RS485
Flask框架实现注册加密功能详解【Flask企业课学习】








