精华内容
下载资源
问答
  • 多元非线性回归原理
    万次阅读 多人点赞
    2020-01-10 14:05:50

    在matlab中常使用 nlinfit函数 进行多元非线性回归。

    1. 基本语法

    语法参数说明
    beta = nlinfit(X, Y, modelfun, beta0)X -> 预测变量
    Y -> 响应值
    modelfun -> 指定的模型
    beta0 -> 参数初始值
    beta = nlinfit(X, Y, modelfun, beta0, options)options -> 评估算法的选择,默认为缺省,详见 options参考内容
    beta = nlinfit(___, Name, Value)指定可选的逗号分隔的名称、值参数对。
    Name是参数名,Value是对应的值,参数名必须出现在引号内。
    可以以任何顺序指定几个名称和值对参数,如Name1, Value1, …, NameN, ValueN。例如:‘ErrorModel’, ‘proportional’, ‘ErrorParameters’, 0.5…
    [beta, R, J, CovB, MSE, ErrorModelInfo] = nlinfit(___)R -> 残差
    J -> 雅可比矩阵
    CovB -> 估计方差-协方差矩阵
    MSE -> 均方差
    ErrorModelInfo -> 误差模型拟合信息

    2. 示例

    X = 1 : 10;
    Y = [0 4 8 17 29 34 54 62 80 99];
    mymodel = inline('beta(1) * X .^ beta(2)', 'beta', 'X');
    beta0 = [1, 2];
    beta = nlinfit(X, Y, mymodel, beta0);
    

    输出结果: beta = 1.203177103441870 1.913267782105321

    X = 1 : 10;
    Y = [0 4 8 17 29 34 54 62 80 99];
    mymodel = inline('beta(1) * X .^ beta(2)', 'beta', 'X');
    beta0 = [1, 2];
    [beta, R, J, CovB, MSE, ErrorModelInfo] = nlinfit(X, Y, mymodel, beta0);
    

    输出结果:

    beta =
    
       1.203177103441870   1.913267782105321
    
    
    R =
    
      -1.203177103441870
      -0.531902426953979
      -1.844423386925135
      -0.069922248918235
       2.839481428235956
      -3.080132352538584
       4.200106803860550
      -2.295789744078874
      -0.547303920433009
       0.463452664946701
    
    
    J =
    
       1.0e+02 *
    
       0.009999999999931                   0
       0.037666127981753   0.031412881732651
       0.081820231121898   0.108152737129980
       0.141873719717092   0.236641274909903
       0.217428643531115   0.421041233755697
       0.308185129687587   0.664393679618334
       0.413903226770619   0.969072093923712
       0.534383368398917   1.337009450489727
       0.669455022058049   1.769827653002497
       0.818969511416963   2.268918061872248
    
    
    CovB =
    
       0.036203997364694  -0.013926635931111
      -0.013926635931111   0.005406465988118
    
    
    MSE =
    
       5.764136230306152
    
    
    ErrorModelInfo = 
    
                  ErrorModel: 'constant'
             ErrorParameters: 2.400861560004273
               ErrorVariance: @(x)mse*ones(size(x,1),1)
                         MSE: 5.764136230306152
              ScheffeSimPred: 3
              WeightFunction: 0
                FixedWeights: 0
        RobustWeightFunction: 0
    

    欢迎大家批评指正。

    更多相关内容
  • 线性逻辑回归 本文用代码实现怎么利用sklearn来进行线性逻辑回归的计算,下面先来看看用到的数据。 这是有两行特征的数据,然后第三行是数据的...非线性逻辑回归意味着决策边界是曲线,和线性逻辑回归原理是差不
  • MATLAB实现多元非线性回归

    万次阅读 多人点赞 2019-01-10 16:25:36
    简单多元非线性回归算例 现有以下数据 i x1 x2 x3 y 1 1.1 2 3.2 10.1 2 1 2 3.2 10.2 3 1.2 1.8 3 10 4 1.1 1.9 2.9 10.1 5 0.9 2.1 2.9 10 假如有以下模型: y=ax1+bx2+cx32y=ax_1+bx_2+cx_3^2y...

    简单多元非线性回归算例

    现有以下数据

    ix1x2x3y
    11.123.210.1
    2123.210.2
    31.21.8310
    41.11.92.910.1
    50.92.12.910

    假如有以下模型:

    y = a x 1 + b x 2 + c x 3 2 y=ax_1+bx_2+cx_3^2 y=ax1+bx2+cx32

    可以基于最小二乘法原理建立如下法方程组,其解则是上述系数.
    ∑ j = 0 n ( φ j , φ k ) a j = ( f , φ k ) , k = 0 , 1 , … n \sum_{j=0}^{n}(φ_j,φ_k ) a_j=(f,φ_k ),k=0,1,…n j=0n(φj,φk)aj=(f,φk),k=0,1,n
    其中 n = 2 , φ 0 = x 1 , φ 1 = x 2 , φ 2 = x 3 , f = y n=2, φ_0=x1,φ_1=x2,φ_2=x3,f=y n=2,φ0=x1φ1=x2φ2=x3,f=y.
    MATLAB代码如下

    x1=[1.1 1 1.2 1.1 0.9]';
    x2=[2 2 1.8 1.9 2.1]';
    x3=[3.2 3.2 3 2.9 2.9]';
    y=[10.1 10.2 10 10.1 10]';
    G=[x1,x2,x3.^2];
    z=G\y;
    

    得到 z = ( 3.296 , 3.4404 , − 0.0141 ) T z=(3.296, 3.4404, -0.0141)^T z=(3.296,3.4404,0.0141)T
    所以有所以有
    y = 3.296 x 1 + 3.4404 x 2 − 0.0141 x 3 2 y=3.296x_1+3.4404x_2-0.0141x_3^2 y=3.296x1+3.4404x20.0141x32

    或者可以调用MATLAB中的nlinfit函数。

    [beta,r]=nlinfit(X,y,myfun,beta0);
    

    其中输入参数X是自变量,y是因变量,myfun 是函数模型,beta0是初始迭代系数向量,返回值beta是模型的系数向量,r是每个点的残差。
    先定义myfun

    function y=myfun(beta,x)
    y=beta(1)*x(:,1)+beta(2)*x(:,2)+beta(3)*x(:,3).^2;
    

    然后主程序

    x1=[1.1 1 1.2 1.1 0.9]';
    x2=[2 2 1.8 1.9 2.1]';
    x3=[3.2 3.2 3 2.9 2.9]';
    y=[10.1 10.2 10 10.1 10]';
    X=[x1,x2,x3];
    beta0=[1,1,1];
    [beta,r]=nlinfit(X,y,'myfun',beta0);
    

    得到 b e t a = ( 3.296 , 3.4404 , − 0.0141 ) T beta=(3.296, 3.4404, -0.0141)^T beta=(3.296,3.4404,0.0141)T
    所以有
    y = 3.296 x 1 + 3.4404 x 2 − 0.0141 x 3 2 y=3.296x_1+3.4404x_2-0.0141x_3^2 y=3.296x1+3.4404x20.0141x32
    这边只涉及到如何获得回归方程中的系数,至于回归方程的优劣性判断,暂不做讨论。

    展开全文
  • 对实验获得的离散点进行拟合,采用最小二乘原理多元非线性回归模型线性化理论计算并确定模型参数,建立半焦分选特性的多元非线性回归模型,模型计算结果与实验数据吻合较好,相对误差均在9%以内。
  • 主要介绍了Python利用神经网络解决非线性回归问题,结合实例形式详细分析了Python使用神经网络解决非线性回归问题的相关原理与实现技巧,需要的朋友可以参考下
  • 1.原理 原理其实很简单,对目标函数求梯度,然后使用梯度下降即可。目标函数如下: f(x)=3.2∗x4+1.5∗x3+4.3∗x2+9.03∗x−15f(x) = 3.2 * {x}^4 + 1.5 * {x}^3 + 4.3 * {x}^2 + 9.03 * {x} - 15f(x)=3.2∗x4+1.5∗...

    1.梯度下降拟合四次函数

    1.原理

    原理其实很简单,对目标函数求梯度,然后使用梯度下降即可。目标函数如下:
    f ( x ) = 3.2 ∗ x 4 + 1.5 ∗ x 3 + 4.3 ∗ x 2 + 9.03 ∗ x − 15 f(x) = 3.2 * {x}^4 + 1.5 * {x}^3 + 4.3 * {x}^2 + 9.03 * {x} - 15 f(x)=3.2x4+1.5x3+4.3x2+9.03x15
    那么该函数的损失函数则是:
    L ( x ) = 1 / n ∗ ∑ i = 1 n ( f ( x i ) − y ( x i ) ) 2 L(x)=1/n*\sum_{i=1}^{n} ({f(x_{i})-y(x_{i})})^2 L(x)=1/ni=1n(f(xi)y(xi))2
    但是我们不知道这些x的系数,所以要求的函数形式是这样的:
    f ( x ) = a ∗ x 4 + b ∗ x 3 + c ∗ x 2 + d ∗ x − e f(x) = a * {x}^4 + b * {x}^3 + c * {x}^2 + d * {x} - e f(x)=ax4+bx3+cx2+dxe
    由上面的式子可以知道该函数中各个参数的梯度是:
    a 的 梯 度 是 : x 4 a的梯度是:{x}^4 ax4 b 的 梯 度 是 : x 3 b的梯度是:{x}^3 bx3 c 的 梯 度 是 : x 2 c的梯度是:{x}^2 cx2 d 的 梯 度 是 : x d的梯度是:{x} dx e 的 梯 度 是 : 1 e的梯度是:1 e1
    然后基于下面的语法产生了99组数据:

    def ge_Func():
        num_data = 99
        x = np.array(np.linspace(-5, 5, num_data)).reshape(num_data, 1)  # 产生包含噪声的数据
        mid, sigma = -1, 1
        y = 3.2 * x ** 4 + 1.5 * x ** 3 + 4.3 * x ** 2 + 9.03 * x - 15
        return x, y
    

    2.代码实现

    实现该函数梯度下降的完整python如下所示,其中学习率是alpha = 0.000033

    import numpy as np
    import math as ma
    import pandas as pd
    import matplotlib.pyplot as plt
    
    
    def my_Func(params, x):
        return params[0] * x ** 4 + params[1] * x ** 3 + params[2] * x ** 2 + params[1] * x - params[4]
    
    
    def ge_Func():
        num_data = 99
        x = np.array(np.linspace(-5, 5, num_data)).reshape(num_data, 1)  # 产生包含噪声的数据
        mid, sigma = -1, 1
        y = 3.2 * x ** 4 + 1.5 * x ** 3 + 4.3 * x ** 2 + 9.03 * x - 15
        return x, y
    
    
    def get_Gradient(x, y, y_):
        l = len(x)
        gradient = np.array([0.0, 0.0, 0.0, 0.0, 0.0])
        for i in range(0, l):
            gradient[0] += (x[i] ** 4) * (y[i] - y_[i])
            gradient[1] += (x[i] ** 3) * (y[i] - y_[i])
            gradient[2] += (x[i] ** 2) * (y[i] - y_[i])
            gradient[3] += x[i] * (y[i] - y_[i])
            gradient[4] += -1 * (y[i] - y_[i])
    
        alpha = 0.000033
        gradient = alpha * gradient / l
        return gradient
    
    
    def gra_D():
        x, y = ge_Func()
        params = np.array([0.0, 0.0, 0.0, 0.0, 0.0])
        y_ = my_Func(params, x)
        #参数数组
        error = 1E-3
        iteration = 100
        e = np.linalg.norm(y - y_, ord=2, axis=None, keepdims=False)
        e_print = []
        e_print.append(e)
        it = 0
        lt = [it]
        while e >= error and it < iteration:
            it += 1
            params = params + get_Gradient(x, y, y_)
            print(params)
            y_ = my_Func(params, x)
            e = np.linalg.norm((y - y_), ord=2, axis=None, keepdims=False) / len(x)
            lt.append(it)
            e_print.append(e)
    
        print('迭代次数:%d' % it, 'params:', params, 'error:%f' % e)
        fig, ax = plt.subplots(2, 2)
        ax[0][0].plot(x, my_Func(params, x), c = 'r')
        ax[0][0].scatter(x, y, c = 'b')
        ax[0][1].plot(lt, e_print, color='r', linestyle='-')
        plt.show()
    
    
    if __name__ == '__main__':
        gra_D()
    
    

    3.结果展示

    拟合结果显示:
    在这里插入图片描述
    误差下降结果展示:
    在这里插入图片描述
    最终各个参数的结果是:
    **
    迭代次数:100 params: [ 3.364306 1.89157033 0.21767033 0.13579867 -0.00515967] error:122.753908
    迭代次数:1000 params: [3.34636433 1.89195267 0.57632267 0.41676533 0.04719133] error:119.048848
    **
    从上述结果来说,虽然曲线极度贴近散点图,但最终输出的误差还是很大的,这一定程度说明了梯度下降方法的局限性,不过我只随便调整了几次学习率。同时需要注意的是,这里面学习率这个参数十分关键,过大过小,最终的结果都会很拉跨。

    2.随机梯度下降拟合四次函数

    1.原理及代码

    所谓的随机梯度下降,其实还是基于梯度下降,不过这时候更新梯度的时候是随机的从所有数据中选择一组来进行更新,代码如下(这里的学习率是alpha = 0.00033):

    import numpy as np
    from random import randint
    import matplotlib.pyplot as plt
    
    
    def my_Func(params, x):
        return params[0] * x ** 4 + params[1] * x ** 3 + params[2] * x ** 2 + params[1] * x - params[4]
    
    
    def ge_Func():
        num_data = 99
        x = np.array(np.linspace(-5, 5, num_data)).reshape(num_data, 1)  # 产生包含噪声的数据
        mid, sigma = -1, 1
        y = 3.2 * x ** 4 + 1.5 * x ** 3 + 4.3 * x ** 2 + 9.03 * x - 15 + np.random.normal(mid, sigma, num_data).reshape(num_data, 1)
        return x, y
    
    
    def get_Gradient(x, y, y_):
        l = len(x)
        i = randint(0, l - 1)
        #print('stochastic num:%d' % i)
        gradient = np.array([0.0, 0.0, 0.0, 0.0, 0.0])
        #for i in range(0, l):
        gradient[0] += (x[i] ** 4) * (y[i] - y_[i])
        gradient[1] += (x[i] ** 3) * (y[i] - y_[i])
        gradient[2] += (x[i] ** 2) * (y[i] - y_[i])
        gradient[3] += x[i] * (y[i] - y_[i])
        gradient[4] += -1 * (y[i] - y_[i])
    
        alpha = 0.00033
        gradient = alpha * gradient / l
        return gradient
    
    
    def gra_D():
        x, y = ge_Func()
        params = np.array([0.0, 0.0, 0.0, 0.0, 0.0])
        y_ = my_Func(params, x)
        #参数数组
        error = 1E-3
        iteration = 1000
        e = np.linalg.norm(y - y_, ord=2, axis=None, keepdims=False) / len(x)
        e_print = []
        e_print.append(e)
        it = 0
        lt = [it]
        while e >= error and it < iteration:
            it += 1
            params = params + get_Gradient(x, y, y_)
            print(params)
            y_ = my_Func(params, x)
            e = np.linalg.norm((y - y_), ord=2, axis=None, keepdims=False)
            lt.append(it)
            e_print.append(e)
    
        print('迭代次数:%d' % it, 'params:', params, 'error:%f' % e)
        fig, ax = plt.subplots(2, 2)
        ax[0][0].plot(x, my_Func(params, x), c = 'r')
        ax[0][0].scatter(x, y, c = 'b')
        ax[0][1].plot(lt, e_print, color='r', linestyle='-')
        plt.show()
    
    
    if __name__ == '__main__':
        gra_D()
    

    2.结果展示

    拟合结果和误差结果如下所示:
    在这里插入图片描述
    最终各个参数的结果是:
    **
    迭代次数:100 params: [ 3.47926000e+00 9.29853333e-01 1.27576667e-01 6.08400000e-02 -2.46666667e-03] error:565.784604
    迭代次数:1000 params: [ 3.36503667e+00 1.86765000e+00 2.14086667e-01 1.32340000e-01 -2.87000000e-03] error:126.629509
    迭代次数:10000 params: [3.37485 1.90446 0.52301333 0.41242667 0.07194667] error:135.041033
    **

    3.mini-batch梯度下降拟合四次函数

    1.代码

    这个跟之前的相比改动不大,代码如下(这里的学习率是alpha = 0.000343

    import numpy as np
    import random
    import matplotlib.pyplot as plt
    
    
    def my_Func(params, x):
        return params[0] * x ** 4 + params[1] * x ** 3 + params[2] * x ** 2 + params[1] * x - params[4]
    
    
    def ge_Func():
        num_data = 99
        x = np.array(np.linspace(-5, 5, num_data)).reshape(num_data, 1)  # 产生包含噪声的数据
        mid, sigma = -1, 1
        y = 3.2 * x ** 4 + 1.5 * x ** 3 + 4.3 * x ** 2 + 9.03 * x - 15 + np.random.normal(mid, sigma, num_data).reshape(num_data, 1)
        return x, y
    
    
    def get_Gradient(x, y, y_):
        bet_nums = range(1, len(x) - 1)
        for i in range(1000):
            bet_num = random.sample(bet_nums, 10)
        gradient = np.array([0.0, 0.0, 0.0, 0.0, 0.0])
        for i in bet_num:
            gradient[0] += (x[i] ** 4) * (y[i] - y_[i])
            gradient[1] += (x[i] ** 3) * (y[i] - y_[i])
            gradient[2] += (x[i] ** 2) * (y[i] - y_[i])
            gradient[3] += x[i] * (y[i] - y_[i])
            gradient[4] += -1 * (y[i] - y_[i])
        alpha = 0.000343
        gradient = alpha * gradient / len(x)
        return gradient
    
    
    def gra_D():
        x, y = ge_Func()
        params = np.array([0.0, 0.0, 0.0, 0.0, 0.0])
        y_ = my_Func(params, x)
        #参数数组
        error = 1E-3
        iteration = 100
        e = np.linalg.norm(y - y_, ord=2, axis=None, keepdims=False) / len(x)
        e_print = []
        e_print.append(e)
        it = 0
        lt = [it]
        while e >= error and it < iteration:
            it += 1
            params = params + get_Gradient(x, y, y_)
            print(params)
            y_ = my_Func(params, x)
            e = np.linalg.norm((y - y_), ord=2, axis=None, keepdims=False)
            lt.append(it)
            e_print.append(e)
    
        print('迭代次数:%d' % it, 'params:', params, 'error:%f' % e)
        fig, ax = plt.subplots(2, 2)
        ax[0][0].plot(x, my_Func(params, x), c = 'r')
        ax[0][0].scatter(x, y, c = 'b')
        ax[0][1].plot(lt, e_print, color='r', linestyle='-')
        plt.show()
    
    
    if __name__ == '__main__':
        gra_D()
    

    其中代码表示的是,使用随机函数,在给定的数据范围(1, 22)之内产生一组不重复的随机列表:

    import random
    bet_nums = range(1, 22)
    for i in range(1000):
        bet_num = random.sample(bet_nums, 10)
    print(bet_num)
    

    结果:[14, 13, 11, 8, 17, 3, 19, 12, 6, 20]

    2.结果

    在这里插入图片描述
    **
    迭代次数:100 params: [3.37411525e+00 1.89231368e+00 1.73409020e-01 1.32072323e-01 1.66649495e-03] error:127.789139
    迭代次数:1000 params: [3.38260364 1.88971519 0.52689997 0.42848322 0.0789974 ] error:143.568243
    **

    展开全文
  • 数据回归-基于行政村尺度的南昌县血吸虫病疫情多元非线性回归分析.pdf
  • 手写算法-Python代码实现非线性回归

    千次阅读 2020-12-08 14:28:50
    生成非线性数据集前面我们介绍了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、大家有什么问题需要交流,我一定知无不言,期待一起进步。

    展开全文
  • 关于回归和拟合,从它们的求解过程以及结果来看,两者似乎没有太大差别,事实也的确如此。从本质上说,回归属于数理统计问题,...并且拟合可以分为线性拟合与非线性拟合,非线性拟合比较常用的是多项式拟合。根据自变
  • 12一、线性回归的理论1)线性回归的基本概念线性回归是一种有监督的学习算法,它介绍的自变量的和因变量的之间的线性的相关关系,分为一元线性回归多元线性回归。一元线性回归是一个自变量和一个因变量间的回归,...
  • 线性回归1.1 基本形式1.2 最小二乘法推导2. Sklearn 实现参考资料 相关文章:机器学习 | 回归评估指标 1. 线性回归 线性回归,又称普通最小二乘法(Ordinary Least Squares, OLS),是回归问题最简单也最经典的...
  •   在统计学中, 非线性回归是回归分析的一种形式,其中观测数据由函数建模,该函数是模型参数的非线性组合并且取决于一个或多个独立变量。 通过逐次逼近的方法拟合数据。   在非线性回归中,形式的统计模型 , f...
  • 多元线性回归详解

    2022-07-15 16:23:51
    2、L2正则化——岭回归 六、线性回归的变化与应用 七、python实现 1、多元线性回归 2、岭回归 3、lasso回归 八、线性模型——回归问题分类问题 一、问题描述 我们现在手头上有一个数据集D:每一个样本都由d个属性来...
  • 一、公式推导,矩阵最小二乘法(参考高等代数) 这部分知识可以参考: 高等代数9 7 向量到子空间的距离 最小二乘法 - ...如果是实现非线性 这部分知识可以参考周志华西瓜书 二、代码实现。 ...
  • 非线性回归 从这一步开始进入了两层神经网络的学习,从而解决非线性问题。 在两层神经网络之间,必须有激活函数连接,从而加入非线性因素,提高神经网络的能力。所以,我们先从激活函数学起,一类是挤压型的激活函数...
  • 第29卷第2期2009年3月云南师范大学学报JournalofYunnanNormalUniversityV01.29No.2Mar.2009基于MATLAB的多元非线性回归模型‘董大校(临沧师范高等...
  • 请在页面菜单里查找。...其他章节都以这个定义为基础,后面每一章里介绍的机器学习模型都是按照这个思路解决...介绍线性回归模型,一种解释变量和模型参数与连续的响应变量相关的模型。本章介绍成本函数的定义,通过最...
  • 机器学习之非线性回归算法(Non-linear Regression)属于有监督的回归(Regression)学习算法。很多场合线性模型无法很好的拟合目标数据曲线,这就需要引入非线性回归模式。非线性回归(Non-linear Regression)算法就是将...
  • 机器学习算法(8)之多元线性回归分析理论详解

    万次阅读 多人点赞 2018-08-29 16:28:27
    前言:当影响因变量的因素是多个时候,这种一个变量同时与多个变量的回归问题就是多元回归,分为:多元线性回归和多元非线性回归。线性回归(Linear regressions)和逻辑回归(Logistic regressions)是人们学习算法的第...
  • 多元线性回归

    千次阅读 2021-09-04 15:26:54
    多元线性回归通俗理解就是一个因变量与多个自变量之间的相关关系 scikit-learn中的线性回归使用 from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from...
  • 基于spss的非线性回归一、简介1、非线性回归2、非线性回归模型二、基于spss的操作1、分析步骤(1)做散点图(2)估计初始值(3)参数设置(4)损失函数设置(5)参数约束设置(6)保存设置(7)算法设置2、结果解释 ...
  • 数学建模-多元线性回归

    千次阅读 2021-08-07 12:17:01
    回归的思想 通过研究自变量X和因变量Y的相关关系,尝试...线性回归 OLS、GLS(最小二乘) 连续数值型变量 GDP、产量、收入 0-1回归 logistic回归 二值变量(0‐1) 是否违约、是否得病 定序回归 probit定序回归 定
  • 作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN...2.3多元线性回归的几何原理 2.5 多元线性回归与深度学习的神经元 第3章 最小二乘法求解多维线性拟合的参数 3.1 什么最小二..
  • 全网及其少见的不调用pymc3等贝叶斯库进行贝叶斯线性回归示例的python代码
  • 多元线性回归的基础理解

    万次阅读 多人点赞 2018-11-19 01:09:28
    多元线性回归  Multivarate Linear Regression Multiple Feature 前面我们学习了一元线性回归,也动手亲自从底层编写了梯度下降算法来实现一元线性回归。相信大家已经对梯度下降和线性回归有了很清晰的理解了。 ...
  • 但实际房子价格和多种特征要素有关,比如与房子的大小,房子的卧室个数,房子的楼层数,房龄等等,因此本篇博客将在一元线性回归算法之上理解多元线性回归算法,其实他们直接本质是一样的原理,我们也就是使用了从从...
  • 多元线性回归算法预测房价

    千次阅读 2021-10-25 16:35:35
    多元线性回归算法预测房价一、理论学习(一)背景(二)线性回归检验二、数据清洗(一)数值数据处理(二)数值型数据转换三、Excel多元线性回归四、多元线性回归模型预测房价(一)基础包与数据导入(二)变量探索...
  • 1、使用scatter_matrix判断个特征的数据分布及其关系散步矩阵(scatter_matrix)Pandas中散步矩阵的函数原理1 def scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, diagonal='hist', marker='.', density_...
  • SPSS数据分析_非线性回归分析

    千次阅读 2020-06-02 12:17:21
    题目: ...7.4 非线性回归分析 7.4.2 SPSS中实现过程 下面是我的操作: 分析->回归->曲线估算 确定 7.5 曲线估计 下面是我的操作: 分析->回归->曲线估算

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,573
精华内容 2,229
关键字:

多元非线性回归原理