机器学习算法基础5-线回归与岭回归
文章目录
- 一、线回归
- 1.线性回归的定义
- 2.线性回归策略-损失函数-最小二乘法
- 1)最小二乘法之正规方程
- 2)最小二乘法之梯度下降
- 3.sklearn线性回归正规方程、梯度下降API
- 4.线性回归案例-波士顿房价数据集分析
- 5.回归性能评估
- 6.LinearRegression与SGDRegressor评估
- 7.过拟合与欠拟合
- 8.正则化
- 二、岭回归
一、线回归
1.线性回归的定义
回归问题的判定?-目标值连续线性回归:定义:线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。
其中特点为一个或多个称为回归系数的模型参数的线性组合
通俗理解,就是属性与权重的线性组合一元线性回归:涉及到的变量只有一个
多元线性回归:涉及到的变量两个或两个以上
通用公式:
2.线性回归策略-损失函数-最小二乘法
预测结果与真实值的误差大小
1)最小二乘法之正规方程
找到最小损失对应的W值,数学原理简单
2)最小二乘法之梯度下降
3.sklearn线性回归正规方程、梯度下降API
sklearn.linear_model.LinearRegression
# 正规方程sklearn.linear_model.SGDRegressor
# 梯度下降•sklearn.linear_model.LinearRegression()
# 普通最小二乘线性回归# 方法
coef_:回归系数sklearn.linear_model.SGDRegressor( )
# 通过使用SGD最小化线性模型# 方法
coef_:回归系数sklearn优点与缺点:
优点:封装好,建立模型简单、预测简单
缺点:看不到算法的过程,有些参数在算法API内部已经优化好了tensorflow:封装高低,很多东西可以自己指定
4.线性回归案例-波士顿房价数据集分析
波士顿房价数据案例分析流程:1、波士顿地区房价数据获取
2、波士顿地区房价数据分割
3、训练与测试数据标准化处理
4、使用最简单的线性回归模型LinearRegression和梯度下降估计SGDRegressor对房价进行
预测
# 线性回归案例-波士顿房价数据集分析
import numpy as np
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,SGDRegressordef mylinear():'''线性回归预测房子价格:return:'''# 一、获得数据lb = load_boston()# 二、处理数据# 1.取得数据集中特征值与目标值x = lb.datay = lb.target# 2.分割数据集 训练集与测试集x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)# 三、进行特征工程# 1.训练集与测试集标准化处理# 特征值与目标值都必须进行标准化处理,实例化两个API,分别处理特征值与目标值# 特征值std_x = StandardScaler()x_train = std_x.fit_transform(x_train)x_test = std_x.transform(x_test)# 目标值std_y = StandardScaler()# 要求传入的y_train是二维数组,后面也一样,用reshape(-1,1)方法转换y_train = std_y.fit_transform(y_train.reshape(-1,1))y_test = std_y.transform(y_test.reshape(-1,1))# 四、线性回归模型-estimator预测# 1.正规方程求解方式预测结果lr = LinearRegression()lr.fit(x_train, y_train)# 回归系数print('回归系数为:\n',lr.coef_)# 预测测试集房子的价格,y_predict = std_y.inverse_transform(lr.predict(x_test))print('预测测试集房子的价格:\n',y_predict)# 2.梯度下降法对房价进行预测sgd = SGDRegressor()sgd.fit(x_train, y_train)# 回归系数print('回归系数为:\n', sgd.coef_)# 预测测试集房子的价格,y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))print('预测测试集房子的价格:\n', y_sgd_predict)return None
if __name__ == '__main__':mylinear()# 正规方程的回归系数为:
# [[-0.10585364 0.10729515 -0.01182419 0.10537416 -0.15782269 0.31884582
# -0.03722253 -0.33811139 0.23264086 -0.21290059 -0.21755264 0.09053632
# -0.36598622]]# 梯度下降法的回归系数为:
# [-0.07640904 0.05813942 -0.04414127 0.13573824 -0.06123698 0.37556306
# -0.02720198 -0.22558641 0.06958108 -0.07072683 -0.19329438 0.08788201
# -0.34746047]
5.回归性能评估
sklearn回归评估API:sklearn.metrics.mean_squared_error# 均方误差回归损失
mean_squared_error(y_true, y_pred)
# 参数
y_true:真实值
y_pred:预测值
注:真实值,预测值为标准化之前的值return:浮点数结果
6.LinearRegression与SGDRegressor评估
特点:线性回归器是最为简单、易用的回归模型。
从某种程度上限制了使用,尽管如此,在不知道特征之间关系的前提下,我们仍然使用线性回归
器作为大多数系统的首要选择。小规模数据:LinearRegression(不能解决拟合问题)以及其它
大规模数据:SGDRegressor
7.过拟合与欠拟合
过拟合与欠拟合概念:过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集
上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)欠拟合:一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很
好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)对线性模型进行训练学习会变成复杂模型
模型变复杂的原因是数据的特征与目标值之间的关系不仅仅是线性关系
欠拟合与过拟合原因以及解决办法欠拟合原因以及解决办法
原因:学习到数据的特征过少
解决办法:增加数据的特征数量过拟合原因以及解决办法
原因:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试
数据点
解决办法:
1.进行特征选择,消除关联性大的特征(很难做)
2.交叉验证(让所有数据都有过训练)
3.正则化(了解)•解决办法:
•进行特征选择,消除关联性大的特征(很难做)
•交叉验证(让所有数据都有过训练)
•正则化(了解)L2正则化:
作用:可以使得W的每个元素都很小,都接近于0
优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
8.正则化
L2正则化:
作用:可以使得W的每个元素都很小,都接近于0
优点:越小的参数说明模型越简单,越简单的模型则越不
容易产生过拟合现象
二、岭回归
带有正则化的线性回归-Ridge岭回归API:
sklearn.linear_model.Ridgesklearn.linear_model.Ridge(alpha=1.0)
# 具有l2正则化的线性最小二乘法# 超参数
alpha:正则化力度# 方法
coef_:回归系数
*
线性回归 LinearRegression与Ridge对比岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让估计参数的波动范围变小,
变的更稳定。在存在病态数据偏多的研究中有较大的实用价值。
# 线性回归、岭回归案例-波士顿房价数据集分析
import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
from sklearn.metrics import mean_squared_errordef mylinear():'''线性回归预测房子价格:return:'''# 一、获得数据lb = load_boston()# 二、处理数据# 1.取得数据集中特征值与目标值x = lb.datay = lb.target# 2.分割数据集 训练集与测试集x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)# 三、进行特征工程# 1.训练集与测试集标准化处理# 特征值与目标值都必须进行标准化处理,实例化两个API,分别处理特征值与目标值# 特征值std_x = StandardScaler()x_train = std_x.fit_transform(x_train)x_test = std_x.transform(x_test)# 目标值std_y = StandardScaler()# 要求传入的y_train是二维数组,后面也一样,用reshape(-1,1)方法转换y_train = std_y.fit_transform(y_train.reshape(-1,1))y_test = std_y.transform(y_test.reshape(-1,1))# 四、线性回归模型-estimator预测# 1.正规方程求解方式预测结果lr = LinearRegression()lr.fit(x_train, y_train)# 回归系数print('正规方程的回归系数为:\n',lr.coef_)# 预测测试集房子的价格,y_predict = std_y.inverse_transform(lr.predict(x_test))print('正规方程预测测试集房子的价格:\n',y_predict)# 回归性能评估y_test = std_y.inverse_transform(y_test)print('正规方程的回归性能评估为:',mean_squared_error(y_test, y_predict))# 2.梯度下降法对房价进行预测sgd = SGDRegressor()sgd.fit(x_train, y_train)# 回归系数print('梯度下降法的回归系数为:\n', sgd.coef_)# 预测测试集房子的价格,y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))print('梯度下降法的预测测试集房子的价格:\n', y_sgd_predict)# 回归性能评估print('梯度下降法的回归性能评估为:', mean_squared_error(y_test, y_sgd_predict))# 3.岭回归进行房价预测rd = Ridge(alpha=1.0)rd.fit(x_train,y_train)# 回归系数print('岭回归的回归系数为:\n',rd.coef_)# 预测测试集房子价格y_rd_predict = std_y.inverse_transform(rd.predict(x_test))print('测试集房子价格为:\n',y_rd_predict)# 回归性能评估print('岭回归的回归性能评估为:',mean_squared_error(y_test,y_rd_predict))# 4.岭回归交叉验证与网格搜索rd_1 = Ridge()# 网格搜索# 构造一些参数的值用于搜索param = {'alpha': [0.5, 1.0, 2]}gc = GridSearchCV(rd_1, param_grid=param, cv=5)gc.fit(x_train, y_train)# 预测测试集房子价格y_gc_predict = std_y.inverse_transform(gc.predict(x_test))# 回归性能评估print('岭回归网格搜索的回归性能评估为:',mean_squared_error(y_test,y_gc_predict))print('在交叉验证中最好的结果是:\n', gc.best_score_)print('最好的参数选择是:\n', gc.best_params_)return None
if __name__ == '__main__':mylinear()# 岭回归的回归性能评估为: 16.978116222418087
# 岭回归网格搜索的回归性能评估为: 16.890653980333717
机器学习算法基础5-线回归与岭回归相关推荐
- 机器学习--线性回归2(共线性问题、岭回归、lasso算法)
上一节我们讲了线性回归的一元线性回归和多元线性回归,其中多元线性回归在求解的过程中又分为满秩和非满秩的情况,进而引出了的最大释然估计进行处理,后面详细的对回归误差进行了分析,最后误差来源于平方偏置.方 ...
- [机器学习-原理篇]学习之线性回归、岭回归、Lasso回归
线性回归.岭回归.Lasso回归 前言 一,线性回归--最小二乘 二,Lasso回归 三,岭回归 四, Lasso回归和岭回归的同和异 五, 为什么 lasso 更容易使部分权重变为 0 而 ridg ...
- 机器学习算法系列(六)- 弹性网络回归算法(Elastic Net Regression Algorithm)
阅读本文需要的背景知识点:岭回归.Lasso回归.一点点编程知识 最近笔者做了一个基于人工智能实现音乐转谱和人声分离功能的在线应用--反谱(Serocs),感兴趣的读者欢迎试用与分享,感谢您的支持!s ...
- 线性回归——lasso回归和岭回归(ridge regression)
目录 线性回归--最小二乘 Lasso回归和岭回归 为什么 lasso 更容易使部分权重变为 0 而 ridge 不行? References 线性回归很简单,用线性函数拟合数据,用 mean squ ...
- lasso回归和岭回归_如何计划新产品和服务机会的回归
lasso回归和岭回归 Marketers sometimes have to be creative to offer customers something new without the lux ...
- 线性回归、lasso回归、岭回归以及弹性网络的系统解释
线性回归.lasso回归.岭回归以及弹性网络的系统解释 声明 背景介绍 概述 线性回归模型函数及损失函数 线性回归算法 多项式回归(线性回归的推广) 广义线性回归(线性回归的推广) 岭回归(Ridge ...
- lasso回归_线性回归amp;lasso回归amp;岭回归介绍与对比
1. 回顾最小二乘法 详细的解释在以下这个链接 https://www.matongxue.com/madocs/818 简而言之,最小二乘法展现了平方误差值最小的时候,就是最好的拟合回归线. 2. ...
- 应用预测建模第六章线性回归习题6.1【主成分分析,模型的最优参数选择与模型对比 ,多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网】
模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...
- 应用预测建模第六章-线性回归-预测化合物溶解度练习-R语言(多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网)
模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...
- 应用预测建模第六章线性回归习题6.3【缺失值插补,分层抽样,预测变量重要性,重要预测变量如何影响响应变量,多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网】
模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...
最新文章
- 作为数据科学家,我都有哪些弱点
- SQL字符串基本操作汇总
- w ndows7防火墙文件名,Windows7中的防火墙是什么? 爱问知识人
- tomcat 绑定ipv4端口
- SharePoint Server 2010 一步一步从入门到精通
- about quartus, FPGA and verilog 琐记
- python的指针跟c的区别_ctypes中的LP_x*指针和*p指针有什么区别?(以及与结构的奇怪交互)...
- python idle打不开_孩子,给你的Python安个家吧!
- Hibernate初探之单表映射——jar包的导入
- 基于SVM的思想做CIFAR 10图像分类
- 使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求的架构细节【转】
- 网站降权原因解析 -转
- Atitit.atiRI 与 远程调用的理论and 设计
- 知网中的硕博论文是caj格式,如何用CAJ转PDF?
- linux更改445端口,windows连接非445端口(nginx转发)的samba服务卡顿
- 各省历年排污费入库金额(2008-2017年)
- ATtiny85 制作迷你小游戏机
- 【BUG】【已解决】VS2019:应用程序无法正常启动(0x000007b)
- 启用系统保护是灰色的#win10系统
- win10老是弹出计算机管理器,win10系统Ie11老是弹出“管理加载项”提示框取消的处理办法...
热门文章
- Java学习之反射机制及应用场景
- maven新建的项目,不自动引入依赖包
- selenium--python如何定位一组元素并返回文本值
- 查看一个数是不是2的n次方
- 读书摘要——《凌波微步-软件开发警戒案例集》
- 订单同步工程标准化改造事记
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第7节 Arrays工具类_17_Arrays练习:字符串倒序...
- QAction QActionGroup QMenu 使用方法
- 聚类分析二:DBSCAN算法
- iOS学习之Object-C语言继承和初始化方法