数学建模预测模型——回归分析预测_数学建模 预测模型 传统回归-程序员宅基地

技术标签: # matalab  学习  数学建模  python  回归  

数学建模预测模型——回归分析预测

作为预测模型的大块头,回归分析预测绝对是比较常用的预测模型的一种,下面是对该模型的学习,欢迎大家指正

1. 回归分析预测的分类

回归分析预测的分类如下

  1. 简单线性回归预测:当只有一个自变量和一个因变量时,可以使用简单线性回归进行预测。该方法假设自变量和因变量之间存在线性关系,并利用最小二乘法估计回归系数。

  2. 多元线性回归预测:当存在多个自变量和一个因变量时,可以使用多元线性回归进行预测。该方法考虑了多个自变量对因变量的影响,并通过最小二乘法来估计回归系数。

  3. 多项式回归预测:当自变量与因变量之间的关系不是严格线性时,可以使用多项式回归进行预测。该方法通过引入自变量的高次项(如平方项、立方项等)来拟合非线性关系。

  4. 逻辑回归预测 :逻辑回归主要用于预测二元或多元分类问题。它通过将回归模型的输出映射到一个概率值,进而进行分类预测。逻辑回归常用于预测概率、判断分类结果等领域。

  5. 非线性回归预测:当自变量与因变量之间的关系无法通过直线或多项式来拟合时,可以使用非线性回归进行预测。非线性回归模型可以根据具体问题选择适当的函数形式,如指数函数、对数函数等。

这些是回归分析常用的预测类型,根据实际问题的需求和数据的特点选择合适的预测方法进行分析。需要根据具体情况选择合适的回归模型,并进行模型评估和结果解释,以确保预测的准确性和可靠性。

2. 回归分析模型的数学原理

当我们使用线性回归进行预测时,假设因变量 Y 和自变量 X 之间存在一个线性关系。这个关系可以用以下的数学模型表示:
Y = β 0 + β 1 ∗ X + ε Y = β0 + β1*X + ε Y=β0+β1X+ε

其中,Y 是因变量,X 是自变量,β0 和 β1 是回归系数,ε 是误差项。

回归分析的目标是找到最佳的回归系数,使得预测值与观测值之间的误差最小化。这里使用最小二乘法来估计回归系数。

最小二乘法的思想是选择一组回归系数,使得观测值与预测值之间的残差平方和最小。具体的步骤如下:

  1. 定义预测值:根据上述线性模型,我们定义预测值为 Ŷ = β0 + β1*X。

  2. 定义残差:残差是观测值与预测值之间的差异,用 ε 表示,即 ε = Y - Ŷ。

  3. 定义残差平方和(SSE):SSE 表示所有观测值的残差平方的总和,即 SSE = Σ(ε^2)。

  4. 最小化残差平方和:通过对 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 的估计值。

  5. 计算回归方程:根据估计的回归系数,我们可以得到最终的回归方程 Y = β0 + β1*X。

通过上述步骤,我们可以得到线性回归模型的最佳拟合参数,从而进行预测。

需要注意的是,回归分析中还有一些假设条件,如误差项ε满足独立同分布的正态分布、自变量之间相互独立等。这些假设保证了估计的回归系数具有良好的统计性质,并使得回归模型在实际应用中更加可靠和有效。

总结起来,线性回归的数学原理主要包括建立线性关系的模型、定义残差、最小化残差平方和、求解最佳回归系数、计算回归方程等步骤。通过最小二乘法,我们可以求解出最佳拟合的回归系数,以进行预测和分析。

3. 建立模型的步骤

回归分析是一种统计学方法,用于建立因变量与自变量之间关系的预测模型。它的原理基于以下假设:

  1. 线性关系假设:假设因变量和自变量之间存在线性关系。

  2. 残差平稳性假设:假设残差(观测值与预测值之间的差异)在预测模型中是随机的,没有系统性的趋势。

回归分析的步骤如下

  1. 数据收集:收集自变量和因变量的数据。
  2. 模型建立:选择适当的回归模型,例如简单线性回归、多元线性回归、多项式回归等。根据已有数据拟合模型,得到回归系数。
  3. 模型评估:通过评估指标(如R方值、均方误差等)来判断模型的拟合程度和预测效果。
  4. 模型应用:使用已建立的回归模型对新的自变量数据进行预测,得到因变量的预测值。

4. 模型适用范围

  • 预测分析:回归分析可以用于预测因变量的值。例如,根据过去销售额和广告投入的数据,建立回归模型来预测未来的销售额。
  • 影响因素分析 :回归分析可以用于确定自变量对因变量的影响程度。例如,通过分析房屋价格与面积、位置、楼层等因素之间的关系,确定各个因素对房价的影响程度。
  • 决策支持:回归分析可以用于辅助决策,帮助理解和解释数据,确定最佳决策方案。例如,在市场营销中,回归分析可以用于确定广告投入对销售额的影响,以优化广告预算的分配。
  • 趋势分析:回归分析可以用于分析数据的趋势和变化规律。例如,根据过去几年的气温数据建立回归模型,分析气温随时间的变化趋势,以预测未来的气温变化。

需要注意的是,回归分析假设了因变量与自变量之间的线性关系,并且在实际应用中需要满足一些前提条件,如数据的独立性、自变量之间的独立性、残差的正态性等。同时,在使用回归模型进行预测时,也需要考虑自变量的选择和数据的质量,以确保预测结果的准确性和可靠性。

5. 该模型的优缺点

回归分析算法具有以下优点和缺点:

优点

  1. 简单易用:回归分析算法相对简单,容易理解和实现。它提供了一种可解释性强的建模方法,可以通过回归系数来解释自变量与因变量之间的关系。
  2. 预测能力:回归分析算法可以用于预测未观测到的因变量的值。通过建立回归模型,可以利用已知的自变量数据进行预测,并获得相应的预测结果。
  3. 变量筛选:回归分析可以通过回归系数的显著性检验和变量的逐步选择等方法,筛选出对因变量有重要影响的自变量,帮助我们理解问题背后的关键因素。
  4. 模型诊断:回归分析提供了一些诊断工具,如残差分析、离群值检测等,可以帮助识别模型是否合适、是否存在异常观测值等。

缺点

  1. 线性假设限制:回归分析通常基于线性假设,假设因变量和自变量之间存在线性关系。当数据的真实关系非线性时,回归模型可能会产生不准确或失效的结果。
  2. 数据要求:回归分析对数据的要求较高,需要满足一些假设条件,如自变量之间的独立性、残差的正态性等。如果数据不符合这些假设,可能导致回归模型的偏差或无法达到有效的预测效果。
  3. 过拟合风险:当自变量较多或存在高度相关性时,回归分析容易出现过拟合问题。过拟合会导致模型在训练数据上表现良好,但在新数据上的泛化能力较差。
  4. 异常值敏感:回归分析对异常值较为敏感,即少数异常值可能对模型产生较大影响。因此,在进行回归分析时,需要注意异常值的处理和识别。

综上所述,回归分析算法是一种常用且有效的分析工具,具有解释性强、预测能力好等优点。但需要注意其线性假设限制、数据要求和过拟合风险等缺点,以及对异常值的敏感性。在使用回归分析时,需要根据具体情况进行适当的模型选择、数据准备和结果解释,以提高分析的可靠性和准确性。

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()

参考博客:
多项式回归
多元线性回归

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_63831368/article/details/132468528

智能推荐

linux里面ping www.baidu.com ping不通的问题_linux桥接ping不通baidu-程序员宅基地

文章浏览阅读3.2w次,点赞16次,收藏90次。对于这个问题我也是从网上找了很久,终于解决了这个问题。首先遇到这个问题,应该确认虚拟机能不能正常的上网,就需要ping 网关,如果能ping通说明能正常上网,不过首先要用命令route -n来查看自己的网关,如下图:第一行就是默认网关。现在用命令ping 192.168.1.1来看一下结果:然后可以看一下电脑上面百度的ip是多少可以在linux里面ping 这个IP,结果如下:..._linux桥接ping不通baidu

android 横幅弹出权限,有关 android studio notification 横幅弹出的功能没有反应-程序员宅基地

文章浏览阅读512次。小妹在这里已经卡了2-3天了,研究了很多人的文章,除了低版本api 17有成功外,其他的不是channel null 就是没反应 (channel null已解决)拜托各位大大,帮小妹一下,以下是我的程式跟 gradle, 我在这里卡好久又没有人可问(哭)![image](/img/bVcL0Qo)public class MainActivity extends AppCompatActivit..._android 权限申请弹窗 横屏

CNN中padding参数分类_cnn “相同填充”(same padding)-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏6次。valid padding(有效填充):完全不使用填充。half/same padding(半填充/相同填充):保证输入和输出的feature map尺寸相同。full padding(全填充):在卷积操作过程中,每个像素在每个方向上被访问的次数相同。arbitrary padding(任意填充):人为设定填充。..._cnn “相同填充”(same padding)

Maven的基础知识,java技术栈-程序员宅基地

文章浏览阅读790次,点赞29次,收藏28次。手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长![外链图片转存中…(img-Qpoc4gOu-1712656009273)][外链图片转存中…(img-bSWbNeGN-1712656009274)]

getFullYear()和getYear()有什么区别_getyear和getfullyear-程序员宅基地

文章浏览阅读469次。Date对象取得年份有getYear和getFullYear两种方法经 测试var d=new Date;alert(d.getYear())在IE中返回 2009,在Firefox中会返回109。经查询手册,getYear在Firefox下返回的是距1900年1月1日的年份,这是一个过时而不被推荐的方法。而alert(d.getFullYear())在IE和FF中都会返回2009。因此,无论何时都应使用getFullYear来替代getYear方法。例如:2016年用 getFullYea_getyear和getfullyear

Unix传奇 (上篇)_unix传奇pdf-程序员宅基地

文章浏览阅读182次。Unix传奇(上篇) 陈皓 了解过去,我们才能知其然,更知所以然。总结过去,我们才会知道我们明天该如何去规划,该如何去走。在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道,流传至今。要知道明天怎么去选择,怎么去做,不是盲目地跟从今天各种各样琳琅满目前沿技术,而应该是去 —— 认认真真地了解和回顾历史。 Unix是目前还在存活的操作系_unix传奇pdf

随便推点

ACwing 哈希算法入门:_ac算法 哈希-程序员宅基地

文章浏览阅读308次。哈希算法:将字符串映射为数字形式,十分巧妙,一般运用为进制数,进制据前人经验,一般为131,1331时重复率很低,由于字符串的数字和会很大,所以一般为了方便,一般定义为unsigned long long,爆掉时,即为对 2^64 取模,可以对于任意子序列的值进行映射为数字进而进行判断入门题目链接:AC代码:#include<bits/stdc++.h>using na..._ac算法 哈希

VS配置Qt和MySQL_在vs中 如何装qt5sqlmysql模块-程序员宅基地

文章浏览阅读952次,点赞13次,收藏27次。由于觉得Qt的编辑界面比较丑,所以想用vs2022的编辑器写Qt加MySQL的项目。_在vs中 如何装qt5sqlmysql模块

【渝粤题库】广东开放大学 互联网营销 形成性考核_画中画广告之所以能有较高的点击率,主要由于它具有以下特点-程序员宅基地

文章浏览阅读1k次。选择题题目:下面的哪个调研内容属于经济环境调研?()题目:()的目的就是加强与客户的沟通,它是是网络媒体也是网络营销的最重要特性。题目:4Ps策略中4P是指产品、价格、顾客和促销。题目:网络市场调研是目前最为先进的市场调研手段,没有任何的缺点或不足之处。题目:市场定位的基本参数有题目:市场需求调研可以掌握()等信息。题目:在开展企业网站建设时应做好以下哪几个工作。()题目:对企业网站首页的优化中,一定要注意下面哪几个方面的优化。()题目:()的主要作用是增进顾客关系,提供顾客服务,提升企业_画中画广告之所以能有较高的点击率,主要由于它具有以下特点

爬虫学习(1):urlopen库使用_urlopen the read operation timed out-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏5次。以爬取CSDN为例子:第一步:导入请求库第二步:打开请求网址第三步:打印源码import urllib.requestresponse=urllib.request.urlopen("https://www.csdn.net/?spm=1011.2124.3001.5359")print(response.read().decode('utf-8'))结果大概就是这个样子:好的,继续,看看打印的是什么类型的:import urllib.requestresponse=urllib.r_urlopen the read operation timed out

分享读取各大主流邮箱通讯录(联系人)、MSN好友列表的的功能【升级版(3.0)】-程序员宅基地

文章浏览阅读304次。修正sina.com/sina.cn邮箱获取不到联系人,并精简修改了其他邮箱代码,以下就是升级版版本的介绍:完整版本,整合了包括读取邮箱通讯录、MSN好友列表的的功能,目前读取邮箱通讯录支持如下邮箱:gmail(Y)、hotmail(Y)、 live(Y)、tom(Y)、yahoo(Y)(有点慢)、 sina(Y)、163(Y)、126(Y)、yeah(Y)、sohu(Y) 读取后可以发送邮件(完..._通讯录 应用读取 邮件 的相关

云计算及虚拟化教程_云计算与虚拟化技术 教改-程序员宅基地

文章浏览阅读213次。云计算及虚拟化教程学习云计算、虚拟化和计算机网络的基本概念。此视频教程共2.0小时,中英双语字幕,画质清晰无水印,源码附件全课程英文名:Cloud Computing and Virtualization An Introduction百度网盘地址:https://pan.baidu.com/s/1lrak60XOGEqMOI6lXYf6TQ?pwd=ns0j课程介绍:https://www.aihorizon.cn/72云计算:概念、定义、云类型和服务部署模型。虚拟化的概念使用 Type-2 Hyperv_云计算与虚拟化技术 教改