精华内容
下载资源
问答
  • python里面多元非线性回归有哪些方法SciPy 里面的子函数库optimize, 一般情况下可用curve_fit函数直接拟合或者leastsq做最小二乘第九句:简单的事重复做,你就是专家;重复的事用心做,你就是赢家。Python怎么实现...

    python里面多元非线性回归有哪些方法

    SciPy 里面的子函数库optimize, 一般情况下可用curve_fit函数直接拟合或者leastsq做最小二乘第九句:简单的事重复做,你就是专家;重复的事用心做,你就是赢家。

    Python怎么实现非线性的拟合小编只是个普通人,渴了会喝水,困了会想睡,痛了大概也会放手吧。

    f9c7c1e40704c0f2a12b8bd1962be609.png

    import matplotlib.pyplot as ptimport numpy as npfrom scipy.optimize import leastsqfrom pylab import *time = []counts = []for i in open('/some/folder/to/file.txt', 'r'): segs = i.split() time.append(float(segs[0])) counts.append讨厌一个人和喜欢一个人是一样的,都是不需要任何理由的

    python怎样做高斯拟合

    python怎么用线性回归拟合有一天你能够自给自足:从物质到情感到精神,你才能够与人真正的和谐亲密相处。

    请教一个多组数据点拟合的问题,需要用 Python 实现

    试试 numpy.piecewise() 或者 google 一下 piecewise liearn fitting 对 numpy 不熟悉,以小编朴素的数学知识瞎 bibi 下, 先锁定第一点 A 和最后一点 B, 然后假定加入中间的 i 点,变成 2 条线了,计算对应的方差 Di,确定第 3 个点 C=i, where 小编发誓你会活的有笑容,没人能把谁的幸福没收。

    python中用polyfit拟合出的函数怎么能直接调用?不开心,就算长生不老也没用,开心,就算只能活几天也足够!

    怎么用Python将图像边界用最小二乘法拟合成曲线

    Python 怎么用曲线拟合数据爱情是一场说走就走的旅行,也是一场说散就散的青春。

    小编有两组数据: y = [41.417, 49.077, 26.683, 42.137, 37.31, 10.022, Python中利用guiqwt进行曲线数据拟合。

    展开全文
  • 生成非线性数据集前面我们介绍了Python代码实现线性回归,今天,我们来聊一聊当数据呈现非线性时,这时我们继续用线性表达式去拟合,显然效果会很差,那我们该怎么处理?继续上实例(我们的代码里用到的数据集尽量...

    生成非线性数据集

    前面我们介绍了Python代码实现线性回归,今天,我们来聊一聊当数据呈现非线性时,这时我们继续用线性表达式去拟合,显然效果会很差,那我们该怎么处理?继续上实例(我们的代码里用到的数据集尽量直接由Python生成,因此,是可以全部跑通的,有需要的同学,建议大家粘贴复现一下,多思考,多动手,才可以学的更好。)

    import numpy as np

    from matplotlib import pyplot as plt

    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

    #生成如下数据集

    a= np.arange(1,11)

    b=np.array([4500,5000,6000,8000,11000,15000,20000,30000,50000,100000])

    data = np.c_[a,b]

    #给x,y分别添加维度

    x = data[:,0,np.newaxis]

    y=data[:,1,np.newaxis]

    plt.scatter(x,y)

    plt.show()

    1、用线性回归拟合

    数据的分布如上图所示,这时候如果继续使用线性回归去拟合,这里继续使用上篇文章Python手写的类,和sklearn里面实现是一样的。

    链接: 手写算法-Python代码推广多元线性回归

    class normal():

    def __init__(self):

    pass

    def fit(self,x,y):

    m=x.shape[0]

    X = np.concatenate((np.ones((m,1)),x),axis=1)

    xMat=np.mat(X)

    yMat=yMat =np.mat(y.reshape(-1,1))

    xTx=xMat.T*xMat

    #xTx.I为xTx的逆矩阵

    ws=xTx.I*xMat.T*yMat

    return ws

    model=normal()

    w = model.fit(x,y)

    #生成2个点画图

    x_test=np.array([[1],[10]])

    y_test = w[0] + x_test * w[1]

    ax1= plt.subplot()

    ax1.plot(x_test,y_test,c='r',label='线性回归拟合线')

    ax1.scatter(x,y,c='b',label='真实分布')

    ax1.legend()

    plt.show()

    可以看出拟合的效果很差,这里如果用

    这种表达式去拟合应该会更好

    2、多项式拟合

    这里和大家介绍一个

    #生成多项式

    from sklearn.preprocessing import PolynomialFeatures

    实现的功能是给X增加维度,具体的可以看官网或者看看我的这篇文章,里面有实现的原理解析,看一下明白了。

    链接: 代码系列-python实现PolynomialFeatures(多项式)

    我们继续用Python实现:

    def multi_feature(x,n):

    c = np.empty((x.shape[0],0)) #np.empty((3,1))并不会生成一个3行1列的空数组,np.empty((3,0))才会生成3行1列空数组

    for i in range(n+1):

    h=x**i

    c=np.c_[c,h]

    return c

    #先设置n=2

    x_1 = multi_feature(x,2)

    x_1 #输出变化后的x

    model=normal()

    #用新生成的x作为输入

    w = model.fit(x_1,y)

    报错了!!!

    LinAlgError: Singular matrix

    这个错误代表在对numpy的矩阵用np.linalg.inv方法时报错,也就是无法求逆矩阵,难道要屈服用sklearn吗?

    不行!!

    第一时间返回去看我们写的类,破案了!问题很简单,python写的类里面,我们给x添加了偏置,在这个生成的多项式x_1中,本身就有一列1,这样的话就有2列1,变成了一个非满秩矩阵,因此不需要再添加偏置,修改代码如下:

    class normal():

    def __init__(self):

    pass

    def fit(self,x,y):

    #x_1中已经生成了一列1,不需要再加偏置,因此注释掉这2列。

    #m=x.shape[0]

    #X = np.concatenate((np.ones((m,1)),x),axis=1)

    xMat=np.mat(x)

    yMat=yMat =np.mat(y.reshape(-1,1))

    xTx=xMat.T*xMat

    #xTx.I为xTx的逆矩阵

    ws=xTx.I*xMat.T*yMat

    return ws

    model=normal()

    #用新生成的x作为输入

    w = model.fit(x_1,y)

    w

    这次没有问题了。(为了检查参数是否正确,我又马上调用了sklearn来跑了一遍,先透露结论:系数没错,后面上sklearn的结果)

    画图看这次的拟合效果:

    #计算x_1的拟合效果,下面是矩阵乘法

    y_1 = np.dot(x_1,w)

    ax1= plt.subplot()

    ax1.plot(x,y_1,c='r',label='n=2时,拟合效果图')

    ax1.scatter(x,y,c='b',label='真实分布图')

    ax1.legend(prop = {'size':15}) #此参数改变标签字号的大小

    plt.show()

    效果好很多了,设置n=5

    #设置n=5

    x_2 = multi_feature(x,5)

    model=normal()

    #用新生成的x_2作为输入,重新拟合

    w = model.fit(x_2,y)

    #计算x_2的拟合效果,下面是矩阵乘法

    y_2 = np.dot(x_2,w)

    ax1= plt.subplot()

    ax1.plot(x,y_2,c='r',label='n=5时,拟合效果图')

    ax1.scatter(x,y,c='b',label='真实分布图')

    ax1.legend(prop = {'size':15}) #此参数改变标签字号的大小

    plt.show()

    已经很完美了,由于点太少,显得拟合曲线不是那么平滑,多传入一些x值,

    x_test = np.linspace(1,10,100)

    x_3 = multi_feature(x_test,5)

    #生成预测值y_3

    y_3 = np.dot(x_3,w)

    ax1= plt.subplot()

    ax1.plot(x_test,y_3,c='r',label='n=5时,拟合效果图')

    ax1.scatter(x,y,c='b',label='真实分布图')

    ax1.legend(prop = {'size':15}) #此参数改变标签字号的大小

    plt.show()

    sklearn实现,校验系数的结果

    最后附上sklearn检验系数的结果,完全一样的:

    from sklearn.linear_model import LinearRegression

    model = LinearRegression()

    model.fit(x_2, y)

    print('截距为:',model.intercept_,'\n')

    print('系数为:',model.coef_,'\n')

    print(w)

    总结

    1、这篇文章主要告诉我们,做回归模型时,要了解数据,不能上来就调用sklearn里面的线性回归包,要根据数据的分布,选择合适的算法包,有时候还要对X特征进行一些预处理工作。

    2、平时做机器学习还是调包,因为自己写的有很多不足的地方,且很难做到推广,但是,学习的过程中,还是建议多研究一下原理,这样可以走得更远。

    3、大家有什么问题需要交流,我一定知无不言,期待一起进步。

    展开全文
  • 比如z=f(x,y),给出(x,y,z)的多个数据点,然后怎么拟合出f函数,给出源码就更好了</p>
  • 回归分析简介Happy Halloween在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量...按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。下面是回归分析中最基础的简单线...

    回归分析简介

     Happy Halloween

    在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;按照涉及的因变量的多少,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。

    下面是回归分析中最基础的简单线性回归模型,它反映一个自变量与一个因变量之间的关系。

    模型形式:Y=β01X1

    其中:Y为因变量;X1为自变量;

    β0为常数项,表示回归直线在y轴上的截距;

    β1X1的回归系数,表示在其他条件不变的情况下,X1变化一个单位所引起的因变量的变化量;

    ε为随机误差,即随机因素对因变量产生的影响。

    Sklearn简介

     Happy Halloween

    Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。在下面的例子中,我们会从sklearn中引入线性回归模型。

    国内旅游人数与旅游收入回归分析的例子

     Happy Halloween

    接下来的是运用Python进行简单线性回归分析的例子。为了简单明了,我们选取图一中 国内旅游收入(亿元)与国内旅游人数(百万人次)的数据,作为我们进行回归分析的数据。

    57b34331136c1c0acdf1590dc6a19d73.png4ecfe0f46031ca0da5e78d2aa99f5344.png

    01

    引入因变量与自变量

    将国内旅游人数(百万人次)作为自变量,命名为’numpeople’,将国内旅游收入(亿元)作为因变量,命名为’income’,引入数据。(为了让大家可以直接粘贴语句,此处直接输入数据)

    import numpy as npimport pandas as pddata=pd.DataFrame({'time'[1994,1995,1996,1997,1998,1999,2000,2001,2002,2003],'income'[1023.5,1375.7,1638.4,2122.7,2391.2,2831.9,3175.5,3522.4,3878.4,3442.3],'numpeople':[524,629,639,644,695,719,744,784,878,870]}) #输入数据income和numpeople
    0aed2ad1c584c592cb5f9c906fc690b9.png

    02

    绘制散点图,确定回归模型类型

    根据数据,画出自变量与因变量的散点图。由图三可以看出,这些点有落在一条直线上的趋势,即可以说明自变量与因变量有明显的线性相关性。再求出旅游人数与旅游收入之间的相关系数(图四),为0.95,则可以确定二者之间有非常强的相关性。可以看出,国内旅游人数越多,国内旅游收入也越多。因此,我们就可以建立二者之间的简单线性回归模型。

    from matplotlib import pyplot as pltplt.scatter (data.numpeople,data.income) #画出散点图data.corr()  #求相关系数
    1f93519f40e53b603a478217a0414770.pnged70ddb89dbc97206ecde0f58c83c243.png

    03

     建立回归模型,估计模型参数

    首先由sklearn导入简单线性回归的求解类LinearRegression,然后使用该类进行建模,得到model模型变量。再引入自变量x和因变量y。调用模型的fit函数,对模型进行拟合并求得参数(可理解为模型β0β1的估计值)。

    from sklearn.linear_model import LinearRegressionmodel=LinearRegression()#建立线性回归模型’model’x = data[['numpeople']]y = data[['income']] #引入自变量x:numpeople和因变量y:incomemodel.fit(x,y) #x,y拟合线性回归模型
    b0837b12a21eb026471cb6b6214cce41.png

    04

    模型检验

    用score函数算出模型的准确率得分(此处用相关系数平方R2来表示准确率得分)。从图六可以看出得分有0.90(范围[0,1]),是一个比较高的分数,说明模型比较精确,接下来可以显示出估计参数的值。可以使用模型的intercept函数查看参数alpha(β0截距),使用coef属性查看参数beta(β1回归系数),如图七所示。

    model.score(x,y) #模型检验alpha= model.intercept_[0] #显示截距beta = model.coef_[0][0] #显示回归系数
    0639b42e66c5157905a7360499cade00.png234a5229d59919d61e1720cdf20bda55.png4ecfe0f46031ca0da5e78d2aa99f5344.png

    代码整理

     Happy Halloween

    import numpy as npimport pandas as pdfrom matplotlib import pyplot as pltfrom sklearn.linear_model import LinearRegressiondata=pd.DataFrame({'time':[1994,1995,1996,1997,1998,1999,2000,2001,2002,2003],'income':[1023.5,1375.7,1638.4,2122.7,2391.2,2831.9,3175.5,3522.4,3878.4,3442.3],'numpeople':[524,629,639,644,695,719,744,784,878,870]}) #输入数据income和numpeopleplt.scatter (data.numpeople,data.income) #画出散点图data.corr()  #求相关系数model=LinearRegression()#建立线性回归模型’model’x = data[['numpeople']]y = data[['income']] #引入自变量x:numpeople和因变量y:incomemodel.fit(x,y) #x,y拟合线性回归模型model.score(x,y) #模型检验alpha= model.intercept_[0] #显示截距beta = model.coef_[0][0] #显示回归系数

    参考网址:

    https://www.cnblogs.com/shujufenxi/p/9054439.html

    https://baike.baidu.com/item/回归分析/2625498?fr=aladdin

    https://wenku.baidu.com/view/be2e80132a160b4e767f5acfa1c7aa00b52a9d9e.html

    https://www.jianshu.com/p/6ada34655862

     Happy Halloween 

    5d6f1e0905d896c888c8f88c10f426d6.png

    数据皮皮虾带你学python

    本期作者 : 陈颖姝

    本期编辑校对:张惠宁

     Happy Halloween 

    展开全文
  • 来自烟水暖的学习笔记回归分析(Regression analysis) 回归分析... 回归分析的分类:1) 按自变量的个数,可以分为一元回归,多元回归2)按变量相关性的形状(回归线)是否为直线型,可分为线性回归,非线性回归。 ...

    来自烟水暖的学习笔记

    回归分析(Regression analysis)

    回归分析(Regression analysis),是研究因变量与自变量之间相关性的一种数学方法,并将相关性量化,即得到回归方程。我们可以通过回归方程(回归预测模型)来预测因变量的变化。

    回归分析的分类:

    1) 按自变量的个数,可以分为一元回归,多元回归

    2)按变量相关性的形状(回归线)是否为直线型,可分为线性回归,非线性回归。

    下面,我们将通过python工具来理解最简单的回归分析,即一元线性回归,并了解回归分析的步骤。

    想要更多了解回归分析包含的内容,可参考下面内容

    烟水暖:详细解读Excel回归分析:价格与需求的相关性zhuanlan.zhihu.com

    一元线性回归

    顾名思义,就是只包含一个自变量,且与因变量的关系是呈线性的回归分析,其回归方程(回归模型)可用下面的方程表示:

    y=bx+a (其中:y为因变量,x为自变量,b为回归系数或斜率,a为截距)

    简单实例

    我们将通过分析产品A的单价与销量之间的关系,来预测当产品A的定价为x,市场的需求量y将会是多少,这样我们就能知道该向供应商订购多少产品A。

    数据如下:

    表格数据来自coursera中的consumer analytic课程。

    price_demand.csv(百度云)

    4bfe71f8c83e46330ff16ee13a7bd0ec.png
    1. 确定变量,导入数据

    438dac8fd688718479c36bd4d4826b19.png

    2. 探索性数据分析,绘制散点图,观察变量之间关系及趋势变化,确定回归类型

    #绘制散点图,观察Price,demand的相关性

    1d3554beb44e4c6b26caf27d04a3e87a.png

    由图可见,Price与Demand具有较强的负相关性,即Price增加,Demand反而减少。

    我们也可通过下面函数观察Price与Demand的相关系数(相关系数R是描述变量之间的相关性,范围在[-1,1]之间,R>0,则为正相关,R<0,则为负相关;R的绝对值越接近于1,相关性越强,反之,相关性越弱)

    649cd480aa3d6b2258163bb1c2223ac3.png

    3. 建立回归模型,并进行模型训练

    在统计学中,一般我们是通过“最小二乘法”直线拟合来执行线性回归分析。

    84e773d6c90136604e26b0cec5fe935a.png

    4. 检验模型的拟合程度

    查看模型的判断系数,判断其拟合度。

    43b7e51b0f0d8be657272b3993976f73.png

    判断系数为0.8679788013877346,可见模型的拟合程度还是较高的。

    下面将拟合回归线放入散点图,直观的感受模型的拟合程度:

    72735fde49078623b77914af2c755de4.png

    最后查看回归方程的内容:

    	模型包含的内容:
    	参数:
    	fit_intercept: 默认为true,是否计算截距
    	normalize: 是否将数据归一化
    	copy_X:是否复制x的值,默认是复制,否则覆盖原来x的值
    	n_jobs:计算模型使用的作业数,也叫核数
    	
    	属性:
    	coef_:斜率
    	intercept_:截距
    	
    	方法:
    	fit() 拟合线性模型
    	get_params() 获取估计量的参数,即返回上面四个参数的内容
    	predict() 使用模型预测结果
    	score()  返回判定系数 ^2,判定系数描述的是回归方程的拟合优度,值越接近于1,拟合度越高
    	set_params()设置估计量的参数的内容
    

    这里,我们只需要拿到下面内容,即可知道回归模型的内容。

    3bc3130f184656820fbc14e98bf1ff76.png

    即Price与Demand呈负相关性,且可用 y=-0.895x+10.128 来描述其关系。接下来,我们便可用这个模型来预测需求。

    5. 使用回归模型预测

    通过模型的预测方法,我们可预测当产品A的价格为8,或8.2,对应的需求为2.96,2.78.

    53606af38e3212d0aea3a70ea980dc43.png

    总结

    通过上面的学习,我们可用了解到最简单的线性回归分析,理解其如何帮我们来分析Price和Demand之间的关系,并由此预测Demand。

    展开全文
  • 但是更多的数据之间具有非线性关系。因此对线性回归法进行改进,使用多项式回归法,可以对非线性数据进行处理。1 什么是多项式回归 研究一个因变量与一个或多个自变量间多项式的回归分析方法,称为多项式回归...
  • 但是更多的数据之间具有非线性关系。因此对线性回归法进行改进,使用多项式回归法,可以对非线性数据进行处理。0x01 什么是多项式回归 研究一个因变量与一个或多个自变量间多项式的回归分析方法,称为多项式回归...
  • (小小:机器学习的经典算法与应用)(小小:机器学习理论(一)KNN-k近邻算法)(小小:机器学习理论(二)简单线性回归)(小小:机器学习理论(三)多元线性回归)(小小:机器学习理论(四)线性回归中的梯度下降法)(小小...
  • python用fsolve、leastsq对非线性方程组求解总结背景:实现用python的optimize库的fsolve对非线性方程组进行求解。可以看到这一个问题实际上还是一个优化问题,也可以用之前拟合函数的leastsq求解。下面用这两个方法...
  • 来自烟水暖的学习笔记回归分析(Regression analysis) 回归分析... 回归分析的分类:1) 按自变量的个数,可以分为一元回归,多元回归2)按变量相关性的形状(回归线)是否为直线型,可分为线性回归,非线性回归。 ...
  • 背景:实现用python的optimize库的fsolve对非线性方程组进行求解。可以看到这一个问题实际上还是一个优化问题,也可以用之前拟合函数的leastsq求解。下面用这两个方法进行对比:代码:from scipy.optimize import ...
  • python线性拟合curve_fit

    千次阅读 2019-12-27 16:36:09
        非线性回归一般可以分为一元非线性回归和多元非线性回归。     一元非线性回归是指两个变量-----一个自变量,一个因变量之间呈现非线性关系,如双曲线、二次曲线、三(多)次曲线、幂曲线、指数曲线、对数...
  • python求解多元多次方程组或非线性方程组

    万次阅读 多人点赞 2020-02-24 18:15:05
    背景:如何使用python求解多元多次方程组或者非线性方程组。 原创内容,转载注明出处! (上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博主在文章基础上添加新内容也新发了新的更新...
  • 背景:如何使用python求解多元多次方程组或者非线性方程组。原创内容,转载注明出处!请勿用于商业用途!(上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博主在文章基础上添加新内容也...
  • 本课程主要讲述如何使用python进行线性回归与非线性回归分析,包括: 基于statsmodel的线性回归方法 基于sklearn的线性回归方法 基于Numpy的一元多项式非线性回归方法 基于sklearn的多元多项式非线性回归方法 基于...
  • 在一元线性回归中,输入特征只有一维, hθ=θ0+x1θ1h_{θ}=θ_0 + x_1θ_1, 对于多元特征,假设...对于非线性的一维数据,用线性回归拟合结果并不好,可以采用多项式回归,手动增加特征,例如如下4种多项式拟合
  • 许多强大的非线性模型的基础 结果具有很好的可解释性 蕴含机器学习中的很多重要思想 2.什么是线性回归算法? 寻找一条直线,最大程度的“拟合”样本特征和样本输出标记之间的关系。其中,房屋面积为样本特征,价格...
  • 缺点:对非线性的数据拟合不好。适用数据类型:数值型和标称型。1.2、分类一元线性回归:涉及到的变量只有一个。多元线性回归:涉及到的变量两个或两个以上。1.3、公式image.png其中????,????为矩阵:????,????为...
  • sklearn的波士顿房价数据是经典的回归数据集。在MOOC的课程《用Python玩转数据...同时使用非线性回归模型来拟合(暂时还没想好用哪个?xgboost,还是SVM?)。2、使用tensorflow建立回归模型拟合。一、使用sklearn lin...
  • sklearn的波士顿房价数据是经典的回归数据集。在MOOC的课程《用Python玩转数据》...同时使用非线性回归模型来拟合(暂时还没想好用哪个?xgboost,还是SVM?)。 2、使用tensorflow建立回归模型拟合。 一、使用...
  • 多项式回归拟合x的值与y的相应条件均值之间的非线性关系,表示为E(y | x) 为什么多项式回归: 研究人员假设的某些关系是曲线的。显然,这种类型的案例将包括多项式项。 检查残差。如果我们尝试将线性模型拟合到...
  • 一、概述1.回归:利用样本(已知数据),产生拟合方程,从而对未知数据进行预测2....非线性回归3.求解回归时需考虑的问题样本是否符合正态分布假设?误差是否满足独立性、等方差、正态分布等假设条...
  • *非线性回归 3.求解回归时需考虑的问题 1)样本是否符合正态分布假设? 2)误差是否满足独立性、等方差、正态分布等假设条件? 3)是否存在离群值导致模型产生较大误差? 4.)线性模型是否合理,是否存在拟合不足? ...
  • # 线性模型拟合 model = linear_model.LinearRegression() model.fit(x_train, y) 预测 #预测结果 result = model.predict(x_test) 二、逻辑回归 全部代码 1、代价函数 可以综合起来为: 其中: ...
  • Python机器学习应用 | 多项式回归

    千次阅读 2017-06-24 14:16:17
    在一元回归分析中,如果依变量y与自变量x的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。 多项式回归的最大优点就是可以通过增加x的高次项对实测点进行逼近,直

空空如也

空空如也

1 2 3 4 5 6
收藏数 108
精华内容 43
关键字:

python多元非线性拟合

python 订阅