拟合与岭回归

 

目录

                                          拟合与岭回归

1 什么是过拟合与欠拟合

2 模型复杂度

3 鉴别欠拟合与过拟合

4 过拟合解决方法

5 岭回归(Ridge)

6 模型的保存与加载


                                           拟合与岭回归

1 什么是过拟合与欠拟合

通过下面两张图来解释过拟合和欠拟合:

  

左图中机器通过这些图片来学习天鹅的特征知道了天鹅是有翅膀的,天鹅的嘴巴是长长的。简单的认为有这些特征的都是天鹅。因为机器学习到的天鹅特征太少了,导致区分标准太粗糙,不能准确识别出天鹅。这就是欠拟合

有图中机器通过这些图片来学习天鹅的特征,经过训练后,知道了天鹅是有翅膀的,天鹅的嘴巴是长长的弯曲的,天鹅的脖子是长长的有点曲度,天鹅的整个体型像一个"2"且略大于鸭子。这时候机器已经基本能区别天鹅和其他动物了。但是已有的天鹅图片全是白天鹅的,会认为天鹅的羽毛都是白的,以后看到羽毛是黑的天鹅就会认为那不是天鹅。这就是过拟合

由上图得知欠拟合是训练误差和测试误差都大,过拟合是随着模型的复杂度越来越复杂,训练误差不断减少,决策树就是这样的,但是测试误差先是减少到达某一个临界点后越来越大了,说明过拟合了,只是在训练集合里面考虑训练集的特点,但是测试集里面的特点可能不是这个规律。

过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)。

欠拟合:一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)、

2 模型复杂度

线性回归不仅仅只能拟合线性关系数据。现实中大多数数据是非线性关系,对应的就是弯弯曲曲的曲线,求出系数后就变复杂了,因为特征复杂,线性回归非线性也可以去拟合。特征复杂就意味着复杂模型。

假如建立的模型是线性如第一个图,这时候画出来的是一条直线;对于图二的曲线要建立一个模型把这个曲线画出来,那么数据的关系可能是某个平方的值在加上一个值,那模型就变复杂了;有可能还更加复杂的情况,特征更多,数据之间更复杂,某个值的平方加某个值的三次方等。这些x和θ是根据数据来定的,模型复杂的原因:数据的特征值和目标值之间的关系不仅仅是线性关系。

在线性拟合的时候还是求出这些θ参数,不管x是什么东西,当数据比较复杂的时候,θ乘以某个特征,这个时候预测关系比较复杂,因为某些特征是特征平方的关系。你怎么知道这是x的平方还是x的三次方,不用管,因为数据本身就是这种特性,我们的目的是为了求θ。对于线性关系来说,如果数据是复杂,有弯曲关系的时候,容易复杂度变大。

3 鉴别欠拟合与过拟合

欠拟合产生原因: 学习到数据的特征过少;解决办法: 增加数据的特征数量。

过拟合产生原因: 原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾 各个测试数据点;解决办法: 进行特征选择,消除关联性大的特征(很难做),交叉验证(让所有数据都有过训练,不能解决只能验证是哪种拟合),正则化(了解)。

如何知道是欠拟合还是过拟合呢?一般可以通过交叉验证得来,比较在交叉验证中本身在训练集里面就60%左右的效果,那么说明在训练集训练的时候已经学不到很多东西,就可以认为是欠拟合情况,如果在网格搜索里面把交叉验证单独拿出来发现训练集结果特别好,90%多但是测试集预测的时候发现才80%多,那就认为是过拟合。

总结就是根据训练集结果现象判断,根据交叉验证训练集结果与测试集对比一般是准确率,会看误差,这个有业务去定。

4 过拟合解决方法

特征选择有过滤式(低方差特征)和嵌入式(正则化,决策树,神经网络)。

正则化:如虽然不知道是哪些特征影响,但是可以不断地去试,不断的调整曲线,减少权重,把权重θ3,权重θ4不断减少趋近于0,那么模型就变简单了。所以正则化出发的角度就是在更新权重的过程中,不断的尝试把某一个特征前面的权重θ减小,看下哪个效果好,最终发现有一些特征前面的权重调整到趋近于0的时候效果好,这就是正则化解决问题的角度。

虽然不知道是哪些特征影响,但是可以减少权重,因为权重是我们取求出来的,尽量减少高次项特征的影响

L2正则化:作用:可以使得W的每个元素都很小,都接近于0 ;优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象

线性回归:LinearRegression容易出现过拟合,为了把训练数据集表现更好,把所有训练数据拟合进去。

那么就用L2正则化(Ridge)的方式去解决,Ridge岭回归,带有正则化的回归,能够解决过拟合。

基本上回归解决过拟合的方式就是L2正则化。

回归和分类解决过拟合的方式是不一样的,决策树解决过拟合的方式:①把api里面的叶子节点数量增大;②随机森林。

5 岭回归(Ridge)

岭回归就是带有正则化的回归。

带有正则化的线性回归-Ridge的API:sklearn.linear_model.Ridge

sklearn.linear_model.Ridge(alpha=1.0) 具有l2正则化的线性最小二乘法

alpha:正则化力度 (λ也表示正则化力度 )

coef_:回归系数

正则化力度对权重有什么影响呢?看下面官网给的一张图

正则化力度越大(右到左),模型越来越简单。所以正则化对权重的影响为:正则化力度越来越大,权重越来越趋近于0。

岭回归进行房价预测如下:

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,SGDRegressor,Ridge
from sklearn.metrics import mean_squared_error
# 1获取数据
lb = load_boston()# 2分割数据为训练集合测试集
x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)# 3进行标准化处理,特征值和目标值都必须进行标准化处理
std1 = StandardScaler()
x_train = std1.fit_transform(x_train)
x_test = std1.transform(x_test)
# 目标值标准化
std2 = StandardScaler()
y_train = std2.fit_transform(y_train.reshape(-1,1))
y_test = std2.transform(y_test.reshape(-1,1))# 4.estimator估计器测试
# 4.3岭回归求解预测
rd = Ridge()
# 输入数据一直不断用训练数据建立模型
rd.fit(x_train,y_train)
print("岭回归系数为",rd.coef_)
# 预测测试集房子价格
y_rdPredict = rd.predict(x_test)
y_rdPredict = std2.inverse_transform(y_rdPredict)
print("sgd测试集每个样本的预测价格:",y_rdPredict)
print("梯度下降均方根误差",mean_squared_error(std2.inverse_transform(y_test),y_rdPredict))

线性回归 LinearRegression与Ridge对比:岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研究中有较大的实用价值。

6 模型的保存与加载

sklearn的模型保存月加载API:sklearn.externals.joblib

保存:joblib.dump(rf,"test.pkl")

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

注意:文件格式为pkl(二进制文件)

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,SGDRegressor,Ridge
from sklearn.metrics import mean_squared_error
from sklearn.externals import joblib
# 1获取数据
lb = load_boston()# 2分割数据为训练集合测试集
x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)# 3进行标准化处理,特征值和目标值都必须进行标准化处理
std1 = StandardScaler()
x_train = std1.fit_transform(x_train)
x_test = std1.transform(x_test)
# 目标值标准化
std2 = StandardScaler()
y_train = std2.fit_transform(y_train.reshape(-1,1))
y_test = std2.transform(y_test.reshape(-1,1))# 4.estimator估计器测试
# 4.1正规方程求解预测
lr = LinearRegression()
# 输入数据一直不断用训练数据建立模型
lr.fit(x_train,y_train)print("lr回归系数为",lr.coef_)# 保存训练好的模型
joblib.dump(lr,"test.pkl")
y_predict = lr.predict(x_test)
y_predict = std2.inverse_transform(y_predict)
print("未保存模型前的预测结果:",y_predict)# 当时用什么模型训练的这时候就返回什么模型
model = joblib.load("test.pkl")# 预测测试集房子价格
y_modelPredict = model.predict(x_test)
print("保存后的模型的预测结果:",std2.inverse_transform(y_modelPredict))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 778. 水位上升的泳池中游泳(二分查找+dfs)

文章目录1. 题目2. 解题1. 题目 在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。 现在开始下雨了。当时间为 t 时,此时雨水导致水池中任意位置的水位为 t 。 你可以从一个平台游向四周相邻的任意一个平台&a…

pycharm快捷键、常用设置、配置管理

内容包含: pycharm学习技巧 Learning tips PyCharm3.0默认快捷键(翻译的) pycharm常用设置 pycharm环境和路径配置 Pycharm实用拓展功能:pycharm中清除已编译.pyc中间文件 python2转python3最快方式 [pycharm版本控制和数据库管理][PyCharm中的那些实用功…

逻辑回归-分类算法

目录 逻辑回归-分类算法 1 概述 2 sigmoid函数 3 逻辑回归公式 4 逻辑回归的损失函数 5 均方误差与对数自然损失对比 6 sklearn逻辑回归API 7 案例 8 总结 逻辑回归-分类算法 1 概述 逻辑回归(Logistic Regression),简称LR。它的特…

LeetCode 1220. 统计元音字母序列的数目(DP)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母(a, e, i, o, u) - 每个元音 a 后面都只能跟着 e - 每个元音 e 后面…

Django视图(python函数)

1.视图 视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse给请求者响应可以是一张网页的HTML内容,一个重定向,一个404错误等 视图就是python中的函数视图一般被定义在“应用/views.py”文件中 视图的第一个…

非监督学习

非监督学习 1 什么是非监(unsupervised learning)督学习 无监督学习,就是不受监督的学习,一种自由的学习方式。该学习方式不需要先验知识进行指导,而是不断地自我认知,自我巩固,最后进行自我归纳,在机器学…

LeetCode 1250. 检查「好数组」(set / 最大公约数)

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。 假如该和结果为 1,那么原数组就是一个「好数组」,则返回 True&#xff1…

用户画像系统

用户画像系统 1 用户画像概述 1.1 什么是用户画像 用户画像就是对现实世界中用户的数学建模。现实世界的用户通过自己各种各样的行为,浏览购买,或者收藏,等等这些行为会把自己的兴趣爱好等体现在这些行为中,比如喜欢看书就会有…

编程思想:面向对象和面向过程

何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中。我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起,最后可能也只会说出一句就是那样啦&#…

LeetCode 1210. 穿过迷宫的最少移动次数(状态压缩BFS)

文章目录1. 题目2. 解题1. 题目 你还记得那条风靡全球的贪吃蛇吗? 我们在一个 n*n 的网格上构建了新的迷宫地图,蛇的长度为 2,也就是说它会占去两个单元格。 蛇会从左上角((0, 0) 和 (0, 1))开始移动。 我们用 0 表示…

Django模板(编写html代码

1.模板 用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器 模版致力于表达外观,一个视图可以使用任意一个模板,一个模板可以供多个视图…

用户画像之Spark ML实现

用户画像之Spark ML实现 1 Spark ML简单介绍 Spark ML是面向DataFrame编程的。Spark的核心开发是基于RDD(弹性分布式数据集),但是RDD,但是RDD的处理并不是非常灵活,如果要做一些结构化的处理,将RDD转换成…

[Kaggle] Digit Recognizer 手写数字识别(神经网络)

文章目录1. baseline2. 改进2.1 增加训练时间2.2 更改网络结构Digit Recognizer 练习地址 相关博文: [Hands On ML] 3. 分类(MNIST手写数字预测) [Kaggle] Digit Recognizer 手写数字识别 1. baseline 导入包 import tensorflow as tf fr…

逻辑回归原理

逻辑回归原理 1 逻辑回归简介 logistic回归(LR),是一种广义的线性回归分析模型,常用于数据挖掘,疾病预测,经济预测等方面。 优点:计算代价低,思路清晰易于理解和实现;…

LeetCode 956. 最高的广告牌(DP)

文章目录1. 题目2. 解题1. 题目 你正在安装一个广告牌,并希望它高度最大。 这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。 你有一堆可以焊接在一起的钢筋 rods。 举个例子,如果钢筋的长度为 1、2 和 3,则…

Tensorflow线程队列与IO操作

目录 Tensorflow线程队列与IO操作 1 线程和队列 1.1 前言 1.2 队列 1.3 队列管理器 1.4 线程协调器 2 文件读取 2.1 流程 2.2 文件读取API: 3 图像读取 3.1 图像读取基本知识 3.2 图像基本操作 3.3 图像读取API 3.4 图片批处理流程 3.5 读取图片案例 …

LeetCode 1298. 你能从盒子里获得的最大糖果数(BFS)

文章目录1. 题目2. 解题1. 题目 给你 n 个盒子,每个盒子的格式为 [status, candies, keys, containedBoxes] ,其中: - 状态字 status[i]:整数,如果 box[i] 是开的,那么是 1 ,否则是 0 。 - 糖…

给javascript初学者的24条最佳实践

1.使用 代替 JavaScript 使用2种不同的等值运算符:|! 和 |!,在比较操作中使用前者是最佳实践。 “如果两边的操作数具有相同的类型和值,返回true,!返回false。”——JavaScript:语言精粹 然而,当使用和&a…

LeetCode 1614. 括号的最大嵌套深度

文章目录1. 题目2. 解题1. 题目 如果字符串满足一下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS): 字符串是一个空字符串 "",或者是一个不为 "("…

[AngularJS]Chapter 1 AnjularJS简介

创建一个完美的Web应用程序是很令人激动的,但是构建这样应用的复杂度也是不可思议的。我们Angular团队的目标就是去减轻构建这样AJAX应用的复杂度。在谷歌我们经历过各种复杂的应用创建工作比如:GMail、Map和日历。我们认为我们有必要把这些经验总结下来…