数据拟合

神经网络不收敛的原因

泄露秘密 提交于 2019-11-27 22:40:26
1. Learning rate不合适,如果太大,会造成不收敛,如果太小,会造成收敛速度非常慢; 2. Batch size太小,每次迭代使用的样本数量太少,梯度方向不够准确,造成不收敛; 3. 网络太简单,一般情况下,网络的层数和节点数量越大,拟合能力就越强,如果层数和节点不够多,无法拟合复杂的数据,也会造成不收敛. 来源: https://www.cnblogs.com/mstk/p/11380747.html

机器学习中的过拟合和欠拟合及交叉验证

◇◆丶佛笑我妖孽 提交于 2019-11-27 04:04:28
机器学习中的过拟合和欠拟合 1、机器学习算法对于整体的数据训练和拟合,以典型的多元线性回归的方式为例,通过设定拟合的最高次数,然后对比输出的曲线结果可以看出, 随着拟合函数次数的增大,其拟合线性回归模型的R2的值在不断地增大,均方差也在不断地减小,看起来拟合的结果越来越准确,其实质只是对于所存在原始数据的拟合误差越来越小,而对于新的数据样本则并不一定适合 , 这就是说存在 过拟合(overfitting) 的现象 ;而如果设定的 多项式次数太小,又会使得整体的R2值太小,均方误差太大,从而使得拟合结果不足,这又是 欠拟合(under fitting) 的情况 。 其中过拟合和欠拟合的输出准确度一般可以用均方差来进行对比和衡量, 将不同机器学习算法的学习曲线定义为函数输出 如下所示: #将不同的机器学习算法的学习曲线封装成为函数可以方便输出def plot_learning_curve(algo,x_train,x_test,y_train,y_test): train_score = [] test_score = [] for i in range(1, len(x_train)): algo.fit(x_train[:i], y_train[:i]) y_train_pre = algo.predict(x_train[:i]) y_test_pre =algo.predict

5.多项式回归与模型泛化

 ̄綄美尐妖づ 提交于 2019-11-27 03:59:11
(一)什么是多项式回归 还记得线性回归法吗?线性回归法有一个很大的局限性,那就是需要数据是有一定的线性关系的,但是现实中的很多数据是没有线性关系的。多项式就是用来解决这个问题的,可以处理非线性数据 在线性回归中,我们是假设数据具有线性关系的,因此我们在简单线性回归中,将直线的方向设置为y=ax+b的形式,那么我们求出a和b即可。 而对于有些数据,我们虽然也可以使用线性回归,但是显然具有更加强的非线性的关系,换句话说,如果我们用一个二次曲线来拟合这些点,效果会更好。因此函数就变成了了y=ax^2+bx+c,我们求出a、b、c即可。但是本质上,和线性回归一样,目前都是只有一个特征,只不过我们为样本多添加了一些特征,这些特征是原来的多项式项。求出了对原来的特征而言,一个非线性的曲线。 生成数据集 import numpy as np import matplotlib.pyplot as plt # 生成一百个样本,每个样本只有一个特征 X = np.random.uniform(-3, 3, size=(100, 1)) y = 0.5 * X ** 2 + X + 2 + np.random.normal(0, 1, size=(100,1)) plt.scatter(X, y) plt.show() 可以看到数据大概满足一条二次曲线,但是我们使用线性回归法来拟合一下 from

莫烦pytorch 关系拟合(回归)

不问归期 提交于 2019-11-27 02:18:24
思路:首先建立一个数据集用来拟合函数,要拟合函数我们就需要建立一个神经网络,建立好神经网络后,我们再通过训练网络来减小神经网络拟合函数的误差,最后再可视化拟合过程。 建立数据集 我们创建一个一元二次函数:y=a*x^2 + b, 我们给y数据加上一点噪声来更加真实的展示它。 import torch import matplotlib.pyplot as plt #可视化函数库 x = torch.unsqueeze(torch.linspace(-1,1,100), dim=1) y = x.pow(2) + 0.2*torch.rand(x.size()) plt.scatter(x.data.numpy(), y.data.numpy()) plt.show() 函数剖析: torch.linspace(start, end, steps=100, out=None) → Tensor 返回start和end之间长度为steps的一维张量 参数: #start(float) — 点集的起始值 #end(float) — 点集的最终值 #steps(int) — 在start和end间的采样数,即返回多少个数 #out(Tensor, 可选的) — 结果张量 torch.squeeze(input, dim=None, out=None) 将输入张量形状中的1去除并返回

GBDT算法

时间秒杀一切 提交于 2019-11-26 23:58:12
一、简介 在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是 f t-1 (x) 损失函数是 L(y,f t-1 (x)) 我们本轮迭代的目标是学习到弱学习器h t (x),让本轮的损失 L(t,f t-1 (x)+h t (x)) 最小。 假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。 也就是说我们要求的是高偏差,然后一步一步慢慢缩小这个偏差。 二、负梯度拟合 初始化若学习分类器是: 每一轮都有一个损失函数要去拟合,因为是偏差,所以找不到一个真实值来去拟合。因此提出了一种方法: 用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个cart回归树 。 第t轮的第i个样本的损失函数的负梯度表示为: 利用(x i ,r ti )(i=1,2,...m),我们可以拟合一颗CART回归树,得到了第t颗回归树,其对应的叶节点区域Rtj,j=1,2,...,J。其中J为叶子节点的个数。 每个叶子节点里有多个样本,然后求出使损失函数最小时的输出值ct j (类似于标签): 这样我们就得到了本轮的决策树拟合函数如下: 本轮最终得到的强学习器的表达式如下: 三、GBDT常用损失函数 分类 指数损失函数

多项式回归

狂风中的少年 提交于 2019-11-26 21:13:50
目录 多项式回归 一、多项式回归 二、scikit-learn中的多项式回归 三、关于PolynomialFeatures 四、sklearn中的Pipeline 五、过拟合和欠拟合 六、解决过拟合问题 七、透过学习曲线看过拟合 我是尾巴 多项式回归 直线回归研究的是一个依变量与一个自变量之间的回归问题。 研究一个因变量与一个或多个自变量间多项式的回归分析方法,称为多项式回归(Polynomial Regression)多项式回归模型是线性回归模型的一种。 多项式回归问题可以通过变量转换化为多元线性回归问题来解决。 一、多项式回归 import numpy as np import matplotlib.pyplot as plt x = np.random.uniform(-3, 3, size=100) X = x.reshape(-1, 1) y = 0.5 + x**2 + x + 2 + np.random.normal(0, 1, size=100) plt.scatter(x, y) plt.show() 如果直接使用线性回归,看一下效果: from sklearn.linear_model import LinearRegression lin_reg = LinearRegression() lin_reg.fit(X, y) y_predict = lin

[转]机器学习资料(非常好理解)

天大地大妈咪最大 提交于 2019-11-26 16:55:52
先从回归(Regression)问题说起。我在本吧已经看到不少人提到如果想实现强AI,就必须让机器学会观察并总结规律的言论。具体地说,要让机器观察什么是圆的,什么是方的,区分各种颜色和形状,然后根据这些特征对某种事物进行分类或预测。其实这就是回归问题。 如何解决回归问题?我们用眼睛看到某样东西,可以一下子看出它的一些基本特征。可是计算机呢?它看到的只是一堆数字而已,因此要让机器从事物的特征中找到规律,其实是一个如何在数字中找规律的问题。 例:假如有一串数字,已知前六个是1、3、5、7,9,11,请问第七个是几? 你一眼能看出来,是13。对,这串数字之间有明显的数学规律,都是奇数,而且是按顺序排列的。 那么这个呢?前六个是0.14、0.57、1.29、2.29、3.57、5.14,请问第七个是几? 这个就不那么容易看出来了吧!我们把这几个数字在坐标轴上标识一下,可以看到如下图形: 用曲线连接这几个点,延着曲线的走势,可以推算出第七个数字——7。 由此可见,回归问题其实是个曲线拟合(Curve Fitting)问题。那么究竟该如何拟合?机器不可能像你一样,凭感觉随手画一下就拟合了,它必须要通过某种算法才行。 假设有一堆按一定规律分布的样本点,下面我以拟合直线为例,说说这种算法的原理。 其实很简单,先随意画一条直线,然后不断旋转它。每转一下,就分别计算一下每个样本点和直线上对应点的距离

拟合方法求直线方程系数

本小妞迷上赌 提交于 2019-11-26 13:56:28
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/MarsJohn/article/details/54911788 在数据的统计分析中,数据之间即变量x与Y之间的相关性研究非常重要,通过在直角坐标系中做散点图的方式我们会发现很多统计数据近似一条直线,它们之间或者正相关或者负相关。虽然这些数据是离散的,不是连续的,我们无法得到一个确定的描述这种相关性的函数方程,但既然在直角坐标系中数据分布接近一条直线,那么我们就可以通过画直线的方式得到一个近似的描述这种关系的直线方程。当然,从前面的描述中不难看出,所有数据都分布在一条直线附近,因此这样的直线可以画出很多条,而我们希望找出其中的一条,能够最好地反映变量之间的关系。换言之,我们要找出一条直线,使这条直线“最贴近”已知的数据点,设此直线方程为: 这里的是为了区分Y的实际值y(这里的实际值就是统计数据的真实值,我们称之为观察值),当x取值(i=1,2,3……n)时,Y的观察值为,近似值为(或者说对应的纵坐标是)。 其中式叫做Y对x的回归直线方程,b叫做回归系数。要想确定回归直线方程,我们只需确定a与回归系数b即可。 设x,Y的一组观察值为: i = 1,2,3……n 其回归直线方程为: 当x取值(i=1,2,3……n)时