数学建模预测模型——回归分析预测
作为预测模型的大块头,回归分析预测绝对是比较常用的预测模型的一种,下面是对该模型的学习,欢迎大家指正😊
1. 回归分析预测的分类
回归分析预测的分类如下👇
简单线性回归预测
:当只有一个自变量和一个因变量时,可以使用简单线性回归进行预测。该方法假设自变量和因变量之间存在线性关系,并利用最小二乘法估计回归系数。
多元线性回归预测
:当存在多个自变量和一个因变量时,可以使用多元线性回归进行预测。该方法考虑了多个自变量对因变量的影响,并通过最小二乘法来估计回归系数。
多项式回归预测
:当自变量与因变量之间的关系不是严格线性时,可以使用多项式回归进行预测。该方法通过引入自变量的高次项(如平方项、立方项等)来拟合非线性关系。
逻辑回归预测
:逻辑回归主要用于预测二元或多元分类问题。它通过将回归模型的输出映射到一个概率值,进而进行分类预测。逻辑回归常用于预测概率、判断分类结果等领域。
非线性回归预测
:当自变量与因变量之间的关系无法通过直线或多项式来拟合时,可以使用非线性回归进行预测。非线性回归模型可以根据具体问题选择适当的函数形式,如指数函数、对数函数等。
这些是回归分析常用的预测类型,根据实际问题的需求和数据的特点选择合适的预测方法进行分析。需要根据具体情况选择合适的回归模型,并进行模型评估和结果解释,以确保预测的准确性和可靠性。
2. 回归分析模型的数学原理
当我们使用线性回归进行预测时,假设因变量 Y 和自变量 X 之间存在一个线性关系。这个关系可以用以下的数学模型表示:
Y
=
β
0
+
β
1
∗
X
+
ε
Y = β0 + β1*X + ε
Y=β0+β1∗X+ε
其中,Y 是因变量,X 是自变量,β0 和 β1 是回归系数,ε 是误差项。
回归分析的目标是找到最佳的回归系数,使得预测值与观测值之间的误差最小化。这里使用最小二乘法来估计回归系数。
最小二乘法的思想是选择一组回归系数,使得观测值与预测值之间的残差平方和最小。具体的步骤如下:
定义预测值:根据上述线性模型,我们定义预测值为 Ŷ = β0 + β1*X。
定义残差:残差是观测值与预测值之间的差异,用 ε 表示,即 ε = Y - Ŷ。
定义残差平方和(SSE):SSE 表示所有观测值的残差平方的总和,即 SSE = Σ(ε^2)。
最小化残差平方和:通过对 SSE 进行求导,并令导数为零,可以推导出最佳的回归系数 β0 和 β1 的估计值。
对 β0 求导:d(SSE)/d(β0) = -2Σ(Y - β0 - β1*X) = 0,> 求解得到 β0 的估计值。
对 β1 求导:d(SSE)/d(β1) = -2Σ(X (Y - β0 - β1X)) = 0,求解得到 β1 的估计值。
计算回归方程:根据估计的回归系数,我们可以得到最终的回归方程 Y = β0 + β1*X。
通过上述步骤,我们可以得到线性回归模型的最佳拟合参数,从而进行预测。
需要注意的是,回归分析中还有一些假设条件,如误差项ε满足独立同分布的正态分布、自变量之间相互独立等。这些假设保证了估计的回归系数具有良好的统计性质,并使得回归模型在实际应用中更加可靠和有效。
总结起来,线性回归的数学原理主要包括建立线性关系的模型、定义残差、最小化残差平方和、求解最佳回归系数、计算回归方程等步骤。通过最小二乘法,我们可以求解出最佳拟合的回归系数,以进行预测和分析。
3. 建立模型的步骤
回归分析是一种统计学方法,用于建立因变量与自变量之间关系的预测模型。它的原理基于以下假设:
-
线性关系假设:假设因变量和自变量之间存在线性关系。
-
残差平稳性假设:假设残差(观测值与预测值之间的差异)在预测模型中是随机的,没有系统性的趋势。
回归分析的步骤如下:
- 数据收集:收集自变量和因变量的数据。
- 模型建立:选择适当的回归模型,例如简单线性回归、多元线性回归、多项式回归等。根据已有数据拟合模型,得到回归系数。
- 模型评估:通过评估指标(如R方值、均方误差等)来判断模型的拟合程度和预测效果。
- 模型应用:使用已建立的回归模型对新的自变量数据进行预测,得到因变量的预测值。
4. 模型适用范围
预测分析
:回归分析可以用于预测因变量的值。例如,根据过去销售额和广告投入的数据,建立回归模型来预测未来的销售额。影响因素分析
:回归分析可以用于确定自变量对因变量的影响程度。例如,通过分析房屋价格与面积、位置、楼层等因素之间的关系,确定各个因素对房价的影响程度。决策支持
:回归分析可以用于辅助决策,帮助理解和解释数据,确定最佳决策方案。例如,在市场营销中,回归分析可以用于确定广告投入对销售额的影响,以优化广告预算的分配。趋势分析
:回归分析可以用于分析数据的趋势和变化规律。例如,根据过去几年的气温数据建立回归模型,分析气温随时间的变化趋势,以预测未来的气温变化。
需要注意的是,回归分析假设了因变量与自变量之间的线性关系,并且在实际应用中需要满足一些前提条件,如数据的独立性、自变量之间的独立性、残差的正态性等。同时,在使用回归模型进行预测时,也需要考虑自变量的选择和数据的质量,以确保预测结果的准确性和可靠性。
5. 该模型的优缺点
回归分析算法具有以下优点和缺点:
优点
:
- 简单易用:回归分析算法相对简单,容易理解和实现。它提供了一种可解释性强的建模方法,可以通过回归系数来解释自变量与因变量之间的关系。
- 预测能力:回归分析算法可以用于预测未观测到的因变量的值。通过建立回归模型,可以利用已知的自变量数据进行预测,并获得相应的预测结果。
- 变量筛选:回归分析可以通过回归系数的显著性检验和变量的逐步选择等方法,筛选出对因变量有重要影响的自变量,帮助我们理解问题背后的关键因素。
- 模型诊断:回归分析提供了一些诊断工具,如残差分析、离群值检测等,可以帮助识别模型是否合适、是否存在异常观测值等。
缺点
:
- 线性假设限制:回归分析通常基于线性假设,假设因变量和自变量之间存在线性关系。当数据的真实关系非线性时,回归模型可能会产生不准确或失效的结果。
- 数据要求:回归分析对数据的要求较高,需要满足一些假设条件,如自变量之间的独立性、残差的正态性等。如果数据不符合这些假设,可能导致回归模型的偏差或无法达到有效的预测效果。
- 过拟合风险:当自变量较多或存在高度相关性时,回归分析容易出现过拟合问题。过拟合会导致模型在训练数据上表现良好,但在新数据上的泛化能力较差。
- 异常值敏感:回归分析对异常值较为敏感,即少数异常值可能对模型产生较大影响。因此,在进行回归分析时,需要注意异常值的处理和识别。
综上所述,回归分析算法是一种常用且有效的分析工具,具有解释性强、预测能力好等优点。但需要注意其线性假设限制、数据要求和过拟合风险等缺点,以及对异常值的敏感性。在使用回归分析时,需要根据具体情况进行适当的模型选择、数据准备和结果解释,以提高分析的可靠性和准确性。
6. python 实现
1.简单线性回归
import numpy as np
from matplotlib import pyplot as plt
X=np.array([2,3,4,5,6]) #定义数据集
Y=2*X+np.random.normal(1,2,5) #Y是X的线性函数加上服从正态分布的随机误差
plt.scatter(X,Y)
#计算均值
x_mean=np.mean(X)
y_mean=np.mean(Y)
#计算回归系数:通过遍历X和Y的元素,计算回归系数a和截距b
n=0.0 #n为(X-x_mean)*(Y-y_mean)的累加和
d=0.0 #d为(X-x_mean)^2的累加和
for x,y in zip(X,Y):
n+=(x-x_mean)*(y-y_mean)
d+=(x-x_mean)**2
a=n/d #回归系数
b=y_mean-a*x_mean #截距
y_predict=[a*x+b for x in X] #预测Y值
plt.scatter(X,Y) #绘制回归线
plt.plot(X,y_predict,color='r')
ss_residual=sum((y_predict-Y)**2) #残差平方和
ss_total=sum((Y-y_mean)**2) #总平方和
score=1-ss_residual/ss_total
print(score)
n=5 #自由度
betal_hat=a #betal_hat为回归系数a
se_model=np.sqrt(ss_residual/(n-2)) #模型标准误差
sss=np.sqrt(sum((X-x_mean)**2)) #解释变量的离差平方和
t_val=betal_hat/(se_model/sss) #t统计量
from scipy.stats import t
p_val=2*(1-t.cdf(t_val,n-2)) # 双侧检验的p值
print(p_val)
2.多元线性回归
import numpy as np #科学计算-处理数据的库
import pandas as pd #数据分析的库
import **tplotlib.pyplot as plt #画图
from sklearn.linear_model import LinearRegression #用于机器学习
from sklearn.model_selection import train_test_split
#加载数据
data = pd.read_csv('data.csv')
#分割数据
X = data[['Height', 'Weight', 'Age']]
y = data['Pulse']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# # 可视化数据-需要根据自己的实际情况进行更改
# plt.scatter(data['Height'], data['Weight'])
# plt.xlabel('Height')
# plt.ylabel('Weight')
# plt.show()
#训练模型
model = LinearRegression()
model.fit(X_train, y_train)
#预测
y_pred = model.predict(X_test)
3.多项式线性回归
import numpy as np
import matplotlib.pyplot as plt
# 创造数据
def CreateData():
X = np.arange(0,10,0.3)
y = np.empty(X.shape[0])
for i in range(X.shape[0]):
y[i] = 1.1*X[i]**3 - 10*X[i]**2 + X[i] + np.random.uniform(-10,10)
return X[:,np.newaxis], y
X, y = CreateData()
X = np.insert(X, 0, 1, axis = 1)
# 数据可视化
plt.scatter(X[:,1], y, marker = 'x')
# 使用普通线性回归预测(一次函数)
theta = np.dot(np.linalg.inv(np.dot(X.T, X)), np.dot(X.T, y))
# 可视化回归曲线
t = np.linspace(-1, 11, 100)
plt.plot(t, theta[0] + theta[1] * t, c = 'blue')
# 使用二次函数回归
col_new = X[:,1]**2 # 新增加一列
X = np.hstack([X, col_new[:,np.newaxis]])
theta = np.dot(np.linalg.inv(np.dot(X.T, X)), np.dot(X.T, y))
# 可视化回归曲线
t = np.linspace(-1, 11, 100)
plt.plot(t, theta[0] + theta[1] * t + theta[2] * t**2, c = 'yellow')
# 使用三次函数回归
col_new = X[:,1]**3 # 新增加一列
X = np.hstack([X, col_new[:,np.newaxis]])
theta = np.dot(np.linalg.inv(np.dot(X.T, X)), np.dot(X.T, y))
# 可视化回归曲线
t = np.linspace(-1, 11, 100)
plt.plot(t, theta[0] + theta[1] * t + theta[2] * t**2 + theta[3] * t**3, c = 'red')
# 加标注
plt.legend([r"$y=\theta_0+\theta_1x$",
r"$y=\theta_0+\theta_1x+\theta_2x^2$",
r"$y=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3$"])
plt.show()