线性拟合

转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,

Softmax回归(Softmax Regression)

て烟熏妆下的殇ゞ 提交于 2019-12-27 05:04:06
转自:http://www.cnblogs.com/BYRans/ 多分类问题 在一个多分类问题中,因变量y有k个取值,即 。例如在邮件分类问题中,我们要把邮件分为垃圾邮件、个人邮件、工作邮件3类,目标值y是一个有3个取值的离散值。这是一个多分类问题,二分类模型在这里不太适用。 多分类问题符合 多项分布 。有许多算法可用于解决多分类问题,像决策树、朴素贝叶斯等。这篇文章主要讲解多分类算法中的 Softmax回归(Softmax Regression) 推导思路为:首先证明多项分布属于指数分布族,这样就可以使用广义线性模型来拟合这个多项分布,由广义线性模型推导出的目标函数 即为Softmax回归的分类模型。 证明多项分布属于指数分布族 多分类模型的输出结果为该样本属于k个类别的概率,从这k个概率中我们选择最优的概率对应的类别(通常选概率最大的类别),作为该样本的预测类别。这k个概率用k个变量 , …, 表示。这个k变量和为1,即满足: 可以用前k-1个变量来表示,即: 使用 广义线性模型 拟合这个多分类问题,首先要验证这个多项分布是否符合一个指数分布族。定义T(y)为: 在这里,统计分量T(y)并没有像之前那样定义为T(y)=y,因为T(y)不是一个数值,而是一个k-1维的向量。使用符号 表示向量T(y)的第i个元素。 在这里引入一个新符号: ,如果括号内为true则这个符号取1

过拟合与欠拟合

蓝咒 提交于 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. 偏差、方差、噪声是什么? 为了更好的理解偏差、方差和噪声概念,这一部分我分两个小节来阐述

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

白昼怎懂夜的黑 提交于 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-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欠拟合。 所以 ,在二者之间存在一个最佳位置,找到这个位置就是我们最想要的模型。 监督学习算法

模型优化评估

≡放荡痞女 提交于 2019-12-06 08:20:01
Basis Expansion 这个咋翻译呢, 线性扩充基? 无所谓其实, 这里主是用它来处理 因变量 和 自变量 的非线性关系的 Basis Expansion 是指通过对数据进行转换来扩充或替换数据集的的特征. 我最初的数据分析工具是R语言嘛, 当时没有接触ML这些什么 正则 的概念, 就统计学理论. 在做线性模型的时候, 拟合的不是很好, 我当时真的就凭感觉, 给方程加上一些高阶项 然后就拟合得可以了. 不过呢,后来还是放弃了, 因为很难解释, 尤其是经管方面, 模型的参数的解释尤为重要 这点跟ML不太同, 当然,更不会用神经网络, 我感觉我的水平,怕是解释不清楚里面是怎么工作的. 这里的 Basis Expansion, 举个栗子, 给定输入特征X, Basis Expansion 可以将X 扩充到多个特征, 如 1, X, X^2 等. 这种映射允许各类学习算法来 捕捉数据中的非线性趋势, 同时仍然使用线性模型来分析这些转换后的特征 . 比如增加一些非线性的高阶项等, 线性而言, 其中有一个比较耳熟的名称 多项式回归 case1 线性回归 进行一个升维(多项式项)的变换 \(\phi(x) = [1,x, x^2]\) 即之前是对一个特征求参数, 现在变为了3个特征了. \(w_0 + w_1x + w_2x^2 = \phi(x).[w_0, w_1, w_2 ]\)

最小二乘法

夙愿已清 提交于 2019-12-06 06:48:19
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。 背景:我们有一系列的点(x,y),如下图所示,实际上这就是一个y=10*x的一元一次曲线,再加上一个随机误差得到的数据。 我们想用一个线性方程来拟合它y=a*x+b 为了达到最好的拟合效果,我们应该让 最小。(y是原始值)。 对上式求导 对上式稍微整理以下,使用克莱姆法则,得 矩阵的表达形式 如果我们推广到更一般的情况,假如有更多的模型变量x^1, x^2,…, x^n(注意:x^1是指一个样本,x_1是指样本里的一个模型相关的变量),可以用线性函数表示如下: 对于n个样本来说,可以用如下线性方程组表示: 注意事项 经典的最小二乘法使用起来够简单粗暴,计算过程也不复杂。但是一个致命的问题就是其对噪声的容忍度很低。试想一下,如果前面我们得到的总采样数据为100个,但是里面有几个误差比较大的数据,这就是噪声了。如果不采取一些手段对这几个噪声样本进行处理,最后拟合的效果肯定不是很好。 对于噪声的处理,比如有加权最小二乘等方法,后续有时间跟大家再讲讲 我们加入更大一点的噪声,发现这时候拟合的效果就不是很好

matlab练习程序(螺线拟合)

╄→尐↘猪︶ㄣ 提交于 2019-12-06 04:51:42
这里待拟合的螺线我们选择阿基米德螺线,对数螺线类似。 螺线的笛卡尔坐标系方程为: 螺线从笛卡尔坐标转为极坐标方程为: 阿基米德螺线在极坐标系下极径r和极角theta为线性关系,方程为: 计算步骤如下: 1.通常我们首先得到螺线在笛卡尔坐标下的一些点x,y。 2.然后根据x,y计算出r和theta。 3.最后拟合的目标就是计算出a和b,这一步可以用最小二乘。 拟合结果: 下图蓝色线为原始线(这里可能看不到),红色线为拟合线,红色点为测量点。 放大看一下: 不过有时候拟合也会失败(这时候就可以祭出ransac大法了): matlab代码如下: clear all; close all; clc; %%生成阿基米德螺线 a=6.34; b=4.23; theta=0:0.01:5*pi; r = a+b*theta; x = r.*cos(theta); y = r.*sin(theta); plot(x,y,'b') %%生成待拟合数据 ind = randperm(length(x),50); dat=[x(ind)' y(ind)'] + rand(50,2)/5; hold on; plot(dat(:,1),dat(:,2),'r.'); T = atan(dat(:,2)./dat(:,1)); R = sqrt(dat(:,1).^2+dat(:,2).^2); %