数据拟合

转Python SciPy库——拟合与插值

孤人 提交于 2019-12-28 17:00:46
1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot as plt from scipy.optimize import leastsq plt.figure(figsize=(9,9)) x=np.linspace(0,10,1000) X = np.array([8.19, 2.72, 6.39, 8.71, 4.7, 2.66, 3.78]) Y = np.array([7.01, 2.78, 6.47, 6.71, 4.1, 4.23, 4.05]) #计算以p为参数的直线和原始数据之间的误差 def f(p): k, b = p return(Y-(k*X+b)) #leastsq使得f的输出数组的平方和最小,参数初始值为[1,0] r = leastsq(f, [1,0]) k, b = r[0] print("k=",k,"b=",b) plt.scatter(X,Y, s=100, alpha=1.0, marker='o',label=u'数据点') y=k*x+b ax = plt.gca() #gca获取轴这个对象 ax.set_xlabel(..., fontsize=20) ax.set_ylabel(..., fontsize=20) #设置坐标轴标签字体大小 plt.plot(x, y,

过拟合与欠拟合

蓝咒 提交于 2019-12-25 03:15:32
过拟合与欠拟合 过拟合与欠拟合图解 欠拟合:个人理解就是由于数据少、正则化太厉害、模型复杂度太简单等原因,导致模型没有学习到足够的规律,准确率与模型可达到的准确率差距较大。但是模型在训练集和测试集的曲线趋势是正常收敛的。 解决方法 为有: 增加特征,寻找与标签相关性较大的特征,在保证特征没有共线性的前提下,增加特征的数量; 减少正则化,正则化目的是在牺牲训练集上部分准确率的前提下,使得模型的泛化能力增强。在模型未过拟合前,可以适当降低正则化的程度,提高准确率; 增加模型复杂度或选择更复杂的模型。比如非线性分类问题,如果选择了简单的线性分类器,准确率较低,如果选择神经网络等非线性算法,则会有较好的拟合效果。 过拟合:个人理解就是模型复杂度过高、特征过多问题、缺乏正则化等原因,导致模型在训练集学习到了太多的只有训练集特有的规律,使得模型在训练集准确率超高,但在测试集上预测不准确的现象,模型的泛化能力变差。 解决方法 : 最终目的就是要弱化模型学到的训练集里的特有规律。 增加正则化,正则化可以弱化训练集里的特有规律,使得模型泛化能力提高,但在训练集的准确率稍有降低。 增加训练样本数量,使得样本集尽量是完备的,可以代表当前的业务尝尽。 减少特征,在尽量保证剩余特征含有更多信息的前提下,减少特征的数量,可以适当提高模型的泛化能力,比如使用PCA降维。 考虑是否可以更换为更简单的算法来建模。

偏差和方差

蹲街弑〆低调 提交于 2019-12-23 16:38:39
偏差(Bias)与方差(Variance) 目录: 为什么会有偏差和方差? 偏差、方差、噪声是什么? 泛化误差、偏差和方差的关系? 用图形解释偏差和方差。 偏差、方差窘境。 偏差、方差与过拟合、欠拟合的关系? 偏差、方差与模型复杂度的关系? 偏差、方差与bagging、boosting的关系? 偏差、方差和K折交叉验证的关系? 如何解决偏差、方差问题? 1. 为什么会有偏差和方差? 对学习算法除了通过实验估计其泛化性能之外,人们往往还希望了解它为什么具有这样的性能。“偏差-方差分解”(bias-variance decomposition)就是从偏差和方差的角度来解释学习算法泛化性能的一种重要工具。 在机器学习中,我们用训练数据集去训练一个模型,通常的做法是定义一个误差函数,通过将这个误差的最小化过程,来提高模型的性能。然而我们学习一个模型的目的是为了解决训练数据集这个领域中的一般化问题,单纯地将训练数据集的损失最小化,并不能保证在解决更一般的问题时模型仍然是最优,甚至不能保证模型是可用的。这个训练数据集的损失与一般化的数据集的损失之间的差异就叫做泛化误差(generalization error)。 而泛化误差可以分解为偏差(Biase)、方差(Variance)和噪声(Noise)。 2. 偏差、方差、噪声是什么? 为了更好的理解偏差、方差和噪声概念,这一部分我分两个小节来阐述

三维点集拟合:平面拟合、RANSAC、ICP算法

蹲街弑〆低调 提交于 2019-12-23 02:54:36
ACM算法分类:http://www.kuqin.com/algorithm/20080229/4071.html;CSDN容易吞图,不过编辑器里面图片还是显示的..... 一: 拟合一个平面:使用SVD分解,代码里面去找吧 空间平面方程的一般表达式为: Ax+By+Cz+D=0; 则有:平面法向量为n=(A,B,C). 第一种方法: 对于空间中n个点(n3) 空间中的离散点得到拟合平面,其实这就是一个最优化的过程。即求这些点到某个平面距离最小和的问题。由此,我们知道一个先验消息,那就是该平面一定会过众散点的平均值。接着我们需要做的工作就是求这个平面的法向量。 根据协方差矩阵的SVD变换,最小奇异值对应的奇异向量就是平面的方向。 注意:这个方法是直接的计算方法,没办法解决数值计算遇到的病态矩阵问题.在公式转化代码之前必须对空间点坐标进行近似归一化! 第二种方法:使用法线方法, 对于空间中n个点(n3),若已获得点云法线 使用合适的方法剔除离群点,计算点云的形心P; 若在已经获得法线的点云中,可以对法线进行剔除离散点之后,求取最小方差的均值,直接求得法线方向N( alpha, beta, theta ); 使用点法式描述三维平面;或者根据形心P和法线方向,计算出平面方程的一般式。 使用法线多次聚类:完成场景平面提取 使用法线两次聚类:第一次根据法线方向进行聚类,使用一个欧式距离约束

逻辑回归与线性回归的区别

白昼怎懂夜的黑 提交于 2019-12-16 00:19:17
logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。 与线性回归不同,逻辑回归主要用于解决分类问题,那么线性回归能不能做同样的事情呢?下面举一个例子。比如恶性肿瘤和良性肿瘤的判定。假设我们通过拟合数据得到线性回归方程和一个阈值,用阈值判定是良性还是恶性: 如图,size小于某值就是良性,否则恶性。但是“噪声”对线性方程的影响特别大,会大大降低分类准确性。例如再加三个样本就可以使方程变成这样:      那么,逻辑斯特回归是怎么做的呢?如果不能找到一个绝对的数值判定肿瘤的性质,就用概率的方法,预测出一个概率,比如>0.5判定为恶性的。 2.2 Sigmoid函数   逻辑回归首先把样本映射到[0,1]之间的数值,这就归功于sigmoid函数,可以把任何连续的值映射到[0,1]之间,数越大越趋向于0,越小越趋近于1。   函数的图像如下图,x

从负无穷学习机器学习(一)

我的梦境 提交于 2019-12-14 11:09:19
适逢双十一,买了一本名为《深入浅出Python机器学习》的书,作者生动描述机器学习的原理,爱了!ヾ(◍°∇°◍)ノ゙ 一、基础必需的库 (一)、numpy——基础科学计算库 import numpy #基础科学计算库 i = numpy . array ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] ) #为i赋值一个数组 print ( "i:\n{}" . format ( i ) ) #输出数组i (二)、scipy——科学计算工具集 import numpy as np from scipy import sparse matrix = np . eye ( 3 ) #创建一个3阶对角阵 sparse_matrix = sparse . csr_matrix ( matrix ) #把np数组转化成CSR格式的Scipy稀疏矩阵(sparse matrix) #sparse函数只会存储非0元素 print ( "对角矩阵:\n {}" . format ( matrix ) ) #打印数组 print ( "\n sparse matrix:\n{}" . format ( sparse_matrix ) ) #上下两矩阵进行对比 (三)、pandas——数据分析 #导入数据分析工具 import pandas data = { "Name" : [

正则化到底是怎么消除拟合的?这位大佬终于讲明白了,赞

邮差的信 提交于 2019-12-13 19:55:53
1、过拟合怎么产生的? 模型训练之初,你压根不知道哪些特征会有用,于是你找了很多特征,以此来尽可能精确地去拟合训练数据。 这样的结果往往就是,你用上了一些其实不重要的特征,虽然加上这些特征,会在训练集中表现很好,甚至拿到满分,但是我们的目标并不是让模型在训练集上取得满分,而是在正儿八经的测试集,这种大考中,取得优秀的表现。 十有八九,我们第一次训练出来的模型,会出现过拟合,也就是说,在测试集表现的没有在训练集上好,甚至差不少。 这是为什么? 分析发现,我们在模型中使用的某些特征,本身就不具备普适性。但你通过训练集,还是学习到它了,因为你的模型,想法设法地拟合了所有的样本点,自然而然地就会出来很多特征参数,如下图,第三幅图的模型复杂程度远大于第一幅。 图片来源于网络 在这种不具备普遍性的情况下学习到它,自然会影响你测试集的效果,自然就做不出泛化能力强的模型,就产生了过拟合。 当然了,并不是只要参数一多就会过拟合,还要看你的样本量。 2 、消除过拟合的通俗理解 先不用管L1, L2正则到底是干啥的,它们之间有何区别等这样的问题。 按照逻辑,遇到过拟合这个问题,直接解决过拟合就行。 我们不妨先想想,如果想消除几个原来模型中的特征,你会怎么去做?比如我们学到了一个模型: y = tanh(w1x1 + w2x2 + w3x3 + w4x4) 如果想变弱或消除特征x3, 其实很简单的

深度学习—过拟合问题

半城伤御伤魂 提交于 2019-12-10 17:20:36
1、过拟合问题   欠拟合: 根本原因是特征维度过少,模型过于简单,导致拟合的函数无法满足训练集,误差较大;       解决方法:增加特征维度,增加训练数据;    过拟合: 根本原因是 特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多 ,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。 过度的拟合了训练数据,而没有考虑到泛化能力。       解决方法:(1)减少特征维度;(2)正则化,降低参数值。    减少过拟合总结: 过拟合主要是有两个原因造成的:数据太少+模型太复杂   (1)获取更多数据 :从数据源头获取更多数据;数据增强(Data Augmentation)   (2)使用合适的模型:减少网络的层数、神经元个数等均可以限制网络的拟合能力;   (3) dropout ;   (4)正则化,在训练的时候限制权值变大;   (5)限制训练时间;通过评估测试;   (6)增加噪声 Noise: 输入时+权重上(高斯初始化) ;   (7)数据清洗(data ckeaning/Pruning):将错误的label 纠正或者删除错误的数据。   (8)结合多种模型: Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络;    产生过拟合根本原因:    1、 观察值与真实值存在偏差:    训练样本的获取

机器学习:过拟合和欠拟合:岭回归

荒凉一梦 提交于 2019-12-10 15:53:26
过拟合与欠拟合 过拟合 :一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂) 欠拟合 :一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单) 模型复杂度 数据的特征和目标值之间的关系,不仅仅是线性关系。 欠拟合原因以及解决办法 原因 : 学习到数据的特征过少 解决办法 : 增加数据的特征数量 过拟合原因以及解决办法 原因 : 原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾 各个测试数据点 解决办法 : 进行特征选择,消除关联性大的特征(很难做) 交叉验证(让所有数据都有过训练) 正则化(了解) 根据结果现象判断:欠拟合和过拟合 交叉验证:训练集结果:表现不行,测试集:表现不行(欠拟合) 特征选择有:过滤式:低方差特征;嵌入式:正则化,决策树,神经网络 正则化 L2正则化:解决过拟合 作用:可以使得W的每个元素都很小,都接近于0 优点:越小的参数说明模型越简单,越简单的模型则越不 容易产生过拟合现象 如果模型函数是: 尽量减小高次项特征的影响,减小他们的权重,这就是正则化 线性回归:LInearRegression 容易出现过拟合,为了把训练集数据表现得更好 所以就出现了

机器学习之监督学习supervised learning

前提是你 提交于 2019-12-06 16:36:06
分类与回归 监督学习的问题主要有两种,分别是分类classification和回归regression。 分类: 分类问题的目的是预测类别标签class label,这些标签来自预定义的可选列表。 回归: 回归任务的目的是预测一个连续值,也叫作浮点数floating-point number,即预测值不是一个类别而是一个数字值。打个比方,假如要根据一个人的年龄学历等feature来预测这个人的收入,那么预测值为一个金额,可以在给定范围内任意取值。 区分分类与回归: 最好的办法就是看输出是否具有某种连续性,如果在可能的结果之间具有连续性,那么它就是一个回归问题。 泛化 generalize: 如果一个模型能对没有见过的数据做出准确的预测,那么就表明这个模型能从训练集generalize到测试集。 过拟合 overfitting 欠拟合 underfitting: 如果我们总想找到最简单的模型,构建与一个对于现有信息量过于复杂的模型,即在拟合模型的时候过分关注训练集的细节,得到了一个与训练集上表现很好但是不能泛化到新数据上的模型,那么就是overfitting过拟合。 反之 ,如果模型过于简单,无法抓住数据的全部内容以及数据中的变化,甚至在训练集上表现就很差,那么就是underfitting欠拟合。 所以 ,在二者之间存在一个最佳位置,找到这个位置就是我们最想要的模型。 监督学习算法