一文看懂线性回归和非线性回归

一文看懂线性回归和非线性回归

1. 非线性回归

我们首先来看维基百科中对于非线性回归的定义:

In statistics, nonlinear regression is a form of regression analysis in which observational data are modeled by a function which is a nonlinear combination of the model parameters and depends on one or more independent variables.

这段话的意思是:非线性回归是采用一个函数模型对观测数据进行建模,并且该函数是由模型参数的非线性组合构成的,并且可以通过观测数据(自变量和因变量)对模型参数进行估计。

这里需要注意的是:非线性估计中的非线性指的是模型函数是由模型参数的非线性组合构成,而并不是描述函数和自变量之间的关系。

举个例子,我们采用如下的模型:

y ∼ f ( x , β ) \mathbf{y} \sim f(\mathbf{x},\mathbf{\beta}) yf(x,β)
其中, x = { x 1 , x 2 , ⋯   , x n } \mathbf{x}=\{x_1,x_2,\cdots,x_n\} x={x1,x2,,xn} 为自变量向量, y = { y 1 , y 2 , ⋯   , y n } \mathbf{y}=\{y_1,y_2,\cdots,y_n\} y={y1,y2,,yn}为观测因变量向量, β = { β 1 , β 2 , ⋯   , β n } \mathbf{\beta}=\{\beta_1,\beta_2,\cdots,\beta_n\} β={β1,β2,,βn}为模型参数向量。

假设某个模型由一个自变量,和两个参数构成,即:
f ( x , β ) = β 1 x β 2 + x f(\mathbf{x},\mathbf{\beta})=\frac{\beta_1x}{\beta_2+x} f(x,β)=β2+xβ1x
显然,函数模型 f f f无法表示成模型参数 β 1 \beta_1 β1 β 2 \beta_2 β2的线性组合,因此,这个函数是非线性的。

2. 线性回归

如果我们考虑如下的模型:
f ( x , β ) = β 0 + β 1 x 1 + β 2 x 2 2 + ⋯ + β n x n 2 f(\mathbf{x},\mathbf{\beta})=\beta_0+\beta_1x_1+\beta_2x_2^2+\cdots+\beta_nx_n^2 f(x,β)=β0+β1x1+β2x22++βnxn2
这看似是一个非线性函数,但是实际上,函数 f f f对于模型参数 { β 0 , β 1 , ⋯   , β n } \{\beta_0,\beta_1,\cdots,\beta_n\} {β0,β1,,βn}而言是线性的,即是由 { β 0 , β 1 , ⋯   , β n } \{\beta_0,\beta_1,\cdots,\beta_n\} {β0,β1,,βn}的线性组合构成的,系数分别为 1 , x 1 , x 2 , ⋯   , x n 1,x_1,x_2,\cdots,x_n 1,x1,x2,,xn。因此,这个函数是线性的。

3. 总结

线性还是非线性是要根据分析的目标来决定的,在线性回归和非线性回归中,我们需要求解的是模型参数,因而,线性与非线性描述的是函数模型与模型参数之间的关系,而非因变量与自变量之间的关系。

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Python中进行散点线性回归,你可以使用scikit-learn库或statsmodels库。下面是两种方法的示例代码: 使用scikit-learn库: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression # 假设你有一个名为data的DataFrame,其中包含了你的数据 X = data\['TV'\].values.reshape(-1,1) y = data\['sales'\].values.reshape(-1,1) reg = LinearRegression() reg.fit(X, y) # 打印线性模型的方程 print("The linear model is: Y = {:.5} + {:.5}X".format(reg.intercept_\[0\], reg.coef_\[0\]\[0\])) ``` 这段代码假设你的数据存储在一个名为data的DataFrame中,其中包含了一个名为'TV'的特征列和一个名为'sales'的目标变量列。它使用LinearRegression类来拟合线性回归模型,并打印出模型的方程。 使用statsmodels库: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm # 假设你有一个名为data的DataFrame,其中包含了你的数据 X = data\[\['TV', 'radio', 'newspaper'\]\] y = data\['sales'\] X = sm.add_constant(X) # 添加常数列 model = sm.OLS(y, X) results = model.fit() # 打印线性模型的方程 print("The linear model is: Y = {:.5} + {:.5}*TV + {:.5}*radio + {:.5}*newspaper".format(results.params\[0\], results.params\[1\], results.params\[2\], results.params\[3\])) ``` 这段代码假设你的数据存储在一个名为data的DataFrame中,其中包含了一个名为'TV'的特征列、一个名为'radio'的特征列和一个名为'newspaper'的特征列,以及一个名为'sales'的目标变量列。它使用OLS类来拟合线性回归模型,并打印出模型的方程。 无论你选择使用哪种方法,都需要确保你已经导入了必要的库,并且将数据正确地传递给模型。 #### 引用[.reference_title] - *1* *2* *3* [Python 散点图线性拟合_一文教你全面掌握用Python实现线性回归](https://blog.csdn.net/weixin_39574708/article/details/109911720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值