一文了解建模流程(初识建模)——以“普通高校招生规模研究”为例的全流程数学建模

一、前言

本文是博主数学建模竞赛前期所做的基础练习,主要是为了进一步熟悉数学建模各流程的表述,规范作答,初识建模还有许多不足,下文仅以第一小问为解决示例,大家在阅读过程中,如果认为有更好的模型以及可以改进的地方欢迎私信或者评论区与我讨论。

二、题目

普通高校招生规模预测

广西某普通高校成立于2012年,主要以培养理工类专业人才为主。在科教兴桂、人才强桂等战略方针的引领驱动下,该校不断加强自身专业建设,大力引进师资力量,逐年扩大招生规模,以提高高校服务经济社会发展能力。

表1数据是2012年-2023年该校每年九月份入学报到的大一新生人数。请根据提供的数据,建立数学模型,完成以下问题:

1.试建立关于该校入学报到的新生人数的数学模型,并预测该校未来三年(2024年-2026年)内每年九月份来校报到的新生人数。

2.试结合广西高校实际情况和该校的招生规模,分析和预测该校未来三年(2024年-2026年)的招生录取分数线和拟计划招生人数。

3.对上述模型进行误差分析,并指出模型的优缺点。

话不多说,接下来就开始分析和解决问题一吧!!

三、解决方案

(一)摘要

本文研究的是普通高校招生规模问题。我们通过建立合理的数学模型对广西某高校招生的录取分数线和拟计划招生人数以及新生来校报到的新生人数进行预测分析,这对今后大一新生的高考志愿填报与高校录取规模和录取分数线的确定具有重要的参考价值,同时能反映该校的自身影响力和某一时期社会发展变化。

针对问题一,我们对2012-2023年大一新生报到人数进行分析,发现2012年和2013年的新生报到人数与后续报到人数相差过大,因此我们对去除这两个离散点前后,分别建立线性回归模型与灰色预测模型,通过最小二乘法计算出线性回归方程,再对回归方程进行相关系数检验,从而得到2012年-2023年大一新生报到人数的预测值,对比去除前后的预测值与实际值的方差,得出拟合效果最好的方案,最终预测出2024-2026年九月份来校报到的新生人数分别为7949、8412、8875。

针对问题二......

针对问题三......

最后,我们对提出的模型进行全面的评价:本文的使用模型贴合实际,能合理解决提出的问题,实用性强,该模型在农作物随温度的产量分析、葡萄酒的评价等方面也能使用。

关键词: 线性回归  灰色预测  相关系数检验

(二)问题重述

广西某普通高校现有2012年至2023年的每年九月份入学报到的大一新生人数数据,要求建立数学模型预测该高校未来三年的新生报到入学情况,同时,我们还将结合广西地区高校的实际情况,分析和预测未来三年该校的招生录取分数线和招生计划。并进行模型检验和误差分析去提高模型的实用性,此预测结果可以很好的反映该学校的师资力量,以促进学校制定合理的教学计划,提高高校服务经济社会发展能力。

(三)模型假设

1. 假设单位时间内报到人数增长量与当时的报到人数成正比。

2. 假设每年考试试题难度一样,考生整体表现保持稳定。

3. 假设录取分数线和新生报到人数有一定的相关性。

4. 假设报到人数增长率随报到人数增加而减少。

5. 假设报到人数有上限。

6. 假设新生入学人数与年份之间存在线性关系。

7.新生报道人数与年份存在一定的关联性和规律性。

8.题目变量在预测时间范围内具有局部平稳性,其特性和规律不发生根本变化。

(四)符号说明

(五)问题分析

问题一的分析:

对于人数预测问题,首先,我们根据提供的数据,采用适当的回归分析方法建立了一个简单的线性回归模型。该模型的基本假设是新生报到人数与年份之间存在线性关系。我们利用历史数据进行模型参数估计,并使用此模型预测未来三年的新生报到人数。模型预测显示,未来三年,即2024年至2026年,该校九月份新生入学人数将呈现持续增长的趋势。这种增长趋势反映了该校在科教兴桂、人才强桂等战略方针推动下的发展势头

(六)模型的建立与求解

问题一:预测该校2024-2026年九月份来校报到的新生人数

1)线性回归模型的建立

根据该校2012年至2023年新生报到人数绘制散点图可知(如图1),该校新生报到人数呈正增长趋势,其中2012年至2013年与2013年至2014年上升很快,此后大致呈直线型上升。

图1  2012-2023年新生报到人数散点图

由图1可知2012年-2023年新生报到人数大致在一条直线附近上下波动,因此可建立线性回归方程。

2)线性回归模型的求解

上述线性规划模型可采用MATLAB软件进行求解,求解程序见附录1,运行结果显示见附录2。由求解结果可得的线性回归方程为:

其相关系数为:

 由相关性强弱对照表(表1)可知,其相关性很强,从而计算得到预测值与实际值的误差值如表2所示:

表1 相关性强弱对照表

相关系数的取值范围在-1到1之间,其中-1表示完全负相关,0表示无相关,1表示完全正相关。值越接近1或-1,表示相关性越强;值越接近0,表示相关性越弱或不存在。

 表2  预测值与实际值的误差表

 由表2可知,由线性回归方程求解出来的预测值和实际值的误差大致分布在0.28%-283.9%之间。其中最大误差为2012年的283.9%,说明在线性回归方程下2012年的预测值与实际值相差很大。

图2  预测值与实际值的拟合效果

由图2可知2012年的拟合效果很差,其他年份拟合效果较差。

考虑到2012年与2013年的报到人数与其他年份相差过大,拟合效果较差可能是受其影响,因此我们考虑去除2012和2013年这两个离散点来重新进行拟合,再通过对比没去除掉离散点之前的拟合效果来确定更好的方案。

去除2012年与2013年的离散点后计算出线性回归方程为:

相关系数为:

 相关系数非常接近1,说明相关关系非常强,由于,说明去除离散点后的相关关系强于去除前的,由此计算出预测值得到以下数据:

表3  去除离散点后预测值与实际值的误差表

由表3可得,其去除离散点之后的误差大致分布在0.1%-5.0%之间,最大误差为5.0%,比没去除离散点之前的最大误差低了278.9%,说明去除2012年和2013年两个离散点后预测值与实际值相差不大。

 图3  去除离散点后的预测值与实际值的拟合效果

由图3可知其拟合效果相比于去除离散点前的拟合效果(图2)要更好。

综上可知,通过对比去除2012年与2013年两个离散点前后的误差值和拟合效果图可知,去除2012年与2013年两个离散点之后的线性回归拟合效果要强于去除前的,因此,我们利用去除离散点后的线性回归方程预测三年后(2024年-2026年)的新生报到人数分别为(表4):

表4  2024年-2026年新生报到人数预测值

 3)GM模型的建立

问题一所给数据为2012年-2023年该校每年九月份入学报到的大一新生人数。根据题目,年份与报道人数已知,具体函数关系未知,只需进行未来三年短期预测,且题目所给数据量较小,无法运用神经网络预测,通过绘制的散点图可初步了解,年份与报道人数之间存在内在联系,符合灰色系统特点,因此考虑构造灰色预测模型GM(1,1)。

首先,设原始数据序列:

对原始数据进行累加,得到新的序列:

将累加后的数据序列用一阶线性微分方程描述:

对微分方程进行微分,得到表达式:

通过计算在任何一个时间点t的累加数据值,代入公式即可进行未来数据走势预测。

上述线性规划模型可采用python进行求解,求解程序见附录三,运行结果显示见附录四。由求解结果可得精度指标p为:

方差比值C为:

 通常情况下,灰色系统模型的精度由p决定,由灰色模型精度对照表(表5)可知,p>=0.95,C=<0.35,模型精度等级为一级,即模型精度好,实际值与拟合数据误差值见表6:

表5  灰色模型精度对照表

精度指标p小于0.70,方差比值小于0.65表明模型精度等级不合格;精度指标p在0.70-0.95之间,方差比值C在0.35-0.65之间表明模型精度为合格或勉强;精度指标p大于0.95,方差比值小于0.35表明模型精度好。

表6  实际值与拟合数据误差值

由表6可知,由CM(1,1)模型求解出来的拟合数据和实际值的误差值大致分布在0-1053之间。其中最大误差为2013年的1053,说明在GM模型预测下2013年的拟合数据与实际值相差很大,整体方差波动较大。

图4  拟合数据与实际值的拟合效果图 

由图4可看出,2013年的拟合效果极差,2019年与2023年拟合效果较差,其他年份拟合效果良好。

考虑到2012年与2013年的报到人数与其他年份相差过大,拟合效果不佳可能是受其影响,因此我们考虑去除2012和2013年这两个离散点来重新进行拟合,再通过对比没去除掉离散点之前的拟合效果来确定更好的方案。

去除2012年与2013年的离散点后计算出精度指标p为:

方差比值C为:

 精度指标不变,方差比值有显著降低,表明模型精度较去除离散点前有所提升,由此计算出拟合数据与实际值得到优化后的误差值:

表7  去除离散点后实际值与拟合数据误差值

由表7可知,由CM(1,1)模型求解出来的拟合数据和实际值的误差值大致分布在0-396之间。其中最大误差为2019年的396,说明去除2012与2013数据后,在GM模型预测下2013年的拟合数据与实际值相差不大,整体方差波动显著降低。

 图5  去除离散点后拟合数据与实际值的拟合效果图

由图5可知其拟合效果相比于去除离散点前的拟合效果(图4)要更好。

综上可知,通过对比去除2012年与2013年两个离散点前后的误差值和拟合效果图可知,去除2012年与2013年两个离散点之后的GM(1,1)模型拟合效果要强于去除前的,因此,我们利用去除离散点后的GM(1,1)模型预测三年后(2024年-2026年)的新生报到人数分别为(表8):

表8  2024年-2026年新生报到人数预测值

 取去除离散值的线性回归模型结果,进行拟合度的检测,详细代码及结果见附录五,得出线性回归模型的拟合度检测(图6,图7)为:

图6  拟合度检测

 图7  拟合度检测结果可视化

在线性回归模型应用中,R-squared和Adj. R-squared取值范围为0-1,它们的值越接近1,则模型拟合程度越高;P值本质上是概率值,其取值范围也为0-1,P值越接近0,则特征变量显著性越高。

拟合度检测中显示,R-squared=0.992,Adj. R-squared=0.991,接近1,说明模型拟合程度极高。通过与上文GM模型拟合数值的比对,显示线性回归模型预测结果精度更高,所以最终决定取线性回归模型预测结果作为问题一的结果,即未来三年报道人数预测为:

表9  2024年-2026年新生报到人数预测值

 (七)模型评价和模型推广

1)模型优点

线性回归模型简单易懂,容易理解和解释,并且训练效率高,能够快速得出预测结果。具有可解释性,能提供自变量与因变量之间的线性关系,模型的系数可以解释为变量对因变量的影响程度。

GM(1,1)模型简单,易于理解和应用。且计算效率高,适用于数据量较少的情况,契合问题一的数据量条件。问题一数据符合一阶线性规律,模型对于一阶线性累加序列的预测准确度较高。题目要求预测未来三年数据,而模型在短期预测中具有一定的预测能力。

2)模型缺点

由于录取分数线和计划招生人数的预测基于假设,因此这些预测结果可能存在一定的不确定性。在实际应用中,还需要考虑其他可能影响预测结果的因素,如政策、经济发展等。模型的准确性和可靠性需要通过实际数据进行验证和调整。

3)模型改进

我们可以使用更复杂的模型以更准确地捕捉数据的趋势成分,如Holt线性趋势方法。或考虑其他不确定因素的影响,收集更多数据,以提高模型的准确性。

4)模型推广

本文所用的方法模型同样也适用于中考录取招生工作。适用于特征和目标之间存在线性关系的问题。适用于需要快速得到预测结果的实时系统。在数据探索性分析中,作为初步分析工具,快速了解数据间的关系。例如:可推广至公共卫生领域,线性回归模型可以帮助预测疾病的发病率或者药物的剂量响应关系。企业可以使用线性回归模型来预测基于历史数据的未来销售额或客户需求量。

(八)参考文献

[1] 赵静,但琦,严尚安等. 数学建模与数学实验. 第5版. 北京:高等教育出版社,2020年8月.

[2] 姜启源,谢金星,叶俊. 数学建模. 第五版. 北京:高等教育出版社,2018年5月.

[3] 杨静芸,连斐豪,卢继一 & 凌巍炜.(2023).基于时间序列预测的动态生产优化模型. 数学建模及其应用(02),115-124.

[4] 肖华勇,实用数学建模与软件运用. 西北工业大学出版社,2010年8月.

[5]赵天伟,陈惠达. 基于线性回归模型、马尔萨斯人口增长模型及logistic模型的全国人口预测[J]. 广东医科大学学报,2023,41(6):623-627.

[6]  杨颖.数学建模在实践中的应用[J].长春师范学院学报(自然科学版), 2010, 29(6): 106-108.

[7]  胡雪冰,陈文宽. 基于GM模型的四川粮食产量影响因素及“十四五”供需预测分析*[J]. 中国农机化学报,2021,42(6):130-136.

(九)附录

1)附录一:

去除离散点前的matlab代码:

%计算线性回归方程
x = [2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023];
y = [416,2024,3199,3875,4234,4653,5100,5931,6102,6487,7094,7356];
% 计算线性回归方程的系数
m = (sum(x .* y) - sum(x) * sum(y) / length(x)) / (sum(x .^ 2) - (sum(x) ^ 2) / length(x));
n = (sum(y) - m * sum(x)) / length(x);
% 打印回归方程的系数
fprintf('回归方程的系数为:m = %f, n = %f\n', m, n);
% 计算预测值
y_pred = m * x + n;
% 打印预测值
fprintf('预测值为:y_pred = %f\n', y_pred);
%计算相关系数
r1=(sum(x .* y) - sum(x) * sum(y) / length(x)) / ((sum(x .^ 2) - (sum(x) ^ 2) / length(x))*(sum(y .^ 2) - (sum(y) ^ 2) / length(y)))^0.5

去除离散点后的matlab代码:

x = [2014,2015,2016,2017,2018,2019,2020,2021,2022,2023];
y = [3199,3875,4234,4653,5100,5931,6102,6487,7094,7356];
% 计算线性回归方程的系数
m = (sum(x .* y) - sum(x) * sum(y) / length(x)) / (sum(x .^ 2) - (sum(x) ^ 2) / length(x));
n = (sum(y) - m * sum(x)) / length(x);
% 打印回归方程的系数
fprintf('回归方程的系数为:m = %f, n = %f\n', m, n);
% 计算预测值
y_pred = m * x + n;
% 打印预测值
fprintf('预测值为:y_pred = %f\n', y_pred);
%计算相关系数
r2=(sum(x .* y) - sum(x) * sum(y) / length(x)) / ((sum(x .^ 2) - (sum(x) ^ 2) / length(x))*(sum(y .^ 2) - (sum(y) ^ 2) / length(y)))^0.5

2)附录二:

去除离散点前的matlab代码运行结果:

 去除离散点后的matlab代码运行结果:

3)附录三: 

去除离散点前的python代码:

import numpy as np
import matplotlib.pyplot as plt
class GM_1_1:
   
    def __init__(self):
        self.test_data = np.array(())  # 实验数据集
        self.add_data = np.array(())  # 一次累加产生数据
        self.argu_a = 0  # 参数a
        self.argu_b = 0  # 参数b
        self.MAT_B = np.array(())  # 矩阵B
        self.MAT_Y = np.array(())  # 矩阵Y
        self.modeling_result_arr = np.array(())  # 对实验数据的拟合值
        self.P = 0  # 小误差概率
        self.C = 0  # 后验方差比值

    def set_model(self, arr: list):
        self.__acq_data(arr)
        self.__compute()
        self.__modeling_result()

    def __acq_data(self, arr: list):  # 构建并计算矩阵B和矩阵Y
        self.test_data = np.array(arr).flatten()
        add_data = list()
        sum = 0
        for i in range(len(self.test_data)):
            sum = sum + self.test_data[i]
            add_data.append(sum)
        self.add_data = np.array(add_data)
        ser = list()
        for i in range(len(self.add_data) - 1):
            temp = (-1) * ((1 / 2) * self.add_data[i] + (1 / 2) * self.add_data[i + 1])
            ser.append(temp)
        B = np.vstack((np.array(ser).flatten(), np.ones(len(ser), ).flatten()))
        self.MAT_B = np.array(B).T
        Y = np.array(self.test_data[1:])
        self.MAT_Y = np.reshape(Y, (len(Y), 1))

    def __compute(self):  # 计算灰参数 a,b
        temp_1 = np.dot(self.MAT_B.T, self.MAT_B)
        temp_2 = np.matrix(temp_1).I
        temp_3 = np.dot(np.array(temp_2), self.MAT_B.T)
        vec = np.dot(temp_3, self.MAT_Y)
        self.argu_a = vec.flatten()[0]
        self.argu_b = vec.flatten()[1]

    def __predict(self, k: int) -> float:  # 定义预测计算函数
        part_1 = 1 - pow(np.e, self.argu_a)
        part_2 = self.test_data[0] - self.argu_b / self.argu_a
        part_3 = pow(np.e, (-1) * self.argu_a * k)
        return part_1 * part_2 * part_3

    def __modeling_result(self):  # 获得对实验数据的拟合值
        ls = [self.__predict(i + 1) for i in range(len(self.test_data) - 1)]
        ls.insert(0, self.test_data[0])
        self.modeling_result_arr = np.array(ls)

    def predict(self, number: int) -> list:  # 外部预测接口,预测后指定个数的数据
        prediction = [self.__predict(i + len(self.test_data)) for i in range(number)]
        return prediction

    def precision_evaluation(self):  # 模型精度评定函数
        error = [
            self.test_data[i] - self.modeling_result_arr[i]
            for i in range(len(self.test_data))
        ]
        aver_error = sum(error) / len(error)
        aver_test_data = np.sum(self.test_data) / len(self.test_data)
        temp1 = 0
        temp2 = 0
        for i in range(len(error)):
            temp1 = temp1 + pow(self.test_data[i] - aver_test_data, 2)
            temp2 = temp2 + pow(error[i] - aver_error, 2)
        square_S_1 = temp1 / len(self.test_data)
        square_S_2 = temp2 / len(error)
        self.C = np.sqrt(square_S_2) / np.sqrt(square_S_1)
        ls = [i
              for i in range(len(error))
              if np.abs(error[i] - aver_error) < (0.6745 * np.sqrt(square_S_1))
              ]
        self.P = len(ls) / len(error)
        print("精度指标P,C值为:", self.P, self.C)

    def plot(self):  # 绘制实验数据拟合情况
        plt.figure()
        plt.plot(self.test_data, marker='*', c='b', label='row value')
        plt.plot(self.modeling_result_arr, marker='^', c='r', label='fit value')
        plt.legend()
        plt.grid()
        return plt

if __name__ == "__main__":
    GM = GM_1_1()
    x = [416, 2024, 3199, 3875, 4234, 4653, 5100, 5931, 6102, 6487, 7094, 7356]
    GM.set_model(x)
    print("模型拟合数据为:", GM.modeling_result_arr)
    GM.precision_evaluation()
    print("后三个模型预测值为:", GM.predict(3))
    p = GM.plot()
p.show()

 去除离散点后的python代码(其实就是把x=[]里的范围改一下):

import numpy as np
import matplotlib.pyplot as plt

class GM_1_1:

    def __init__(self):
        self.test_data = np.array(())  # 实验数据集
        self.add_data = np.array(())  # 一次累加产生数据
        self.argu_a = 0  # 参数a
        self.argu_b = 0  # 参数b
        self.MAT_B = np.array(())  # 矩阵B
        self.MAT_Y = np.array(())  # 矩阵Y
        self.modeling_result_arr = np.array(())  # 对实验数据的拟合值
        self.P = 0  # 小误差概率
        self.C = 0  # 后验方差比值

    def set_model(self, arr: list):
        self.__acq_data(arr)
        self.__compute()
        self.__modeling_result()

    def __acq_data(self, arr: list):  # 构建并计算矩阵B和矩阵Y
        self.test_data = np.array(arr).flatten()
        add_data = list()
        sum = 0
        for i in range(len(self.test_data)):
            sum = sum + self.test_data[i]
            add_data.append(sum)
        self.add_data = np.array(add_data)
        ser = list()
        for i in range(len(self.add_data) - 1):
            temp = (-1) * ((1 / 2) * self.add_data[i] + (1 / 2) * self.add_data[i + 1])
            ser.append(temp)
        B = np.vstack((np.array(ser).flatten(), np.ones(len(ser), ).flatten()))
        self.MAT_B = np.array(B).T
        Y = np.array(self.test_data[1:])
        self.MAT_Y = np.reshape(Y, (len(Y), 1))

    def __compute(self):  # 计算灰参数 a,b
        temp_1 = np.dot(self.MAT_B.T, self.MAT_B)
        temp_2 = np.matrix(temp_1).I
        temp_3 = np.dot(np.array(temp_2), self.MAT_B.T)
        vec = np.dot(temp_3, self.MAT_Y)
        self.argu_a = vec.flatten()[0]
        self.argu_b = vec.flatten()[1]

    def __predict(self, k: int) -> float:  # 定义预测计算函数
        part_1 = 1 - pow(np.e, self.argu_a)
        part_2 = self.test_data[0] - self.argu_b / self.argu_a
        part_3 = pow(np.e, (-1) * self.argu_a * k)
        return part_1 * part_2 * part_3

    def __modeling_result(self):  # 获得对实验数据的拟合值
        ls = [self.__predict(i + 1) for i in range(len(self.test_data) - 1)]
        ls.insert(0, self.test_data[0])
        self.modeling_result_arr = np.array(ls)

    def predict(self, number: int) -> list:  # 外部预测接口,预测后指定个数的数据
        prediction = [self.__predict(i + len(self.test_data)) for i in range(number)]
        return prediction

    def precision_evaluation(self):  # 模型精度评定函数
        error = [
            self.test_data[i] - self.modeling_result_arr[i]
            for i in range(len(self.test_data))
        ]
        aver_error = sum(error) / len(error)
        aver_test_data = np.sum(self.test_data) / len(self.test_data)
        temp1 = 0
        temp2 = 0
        for i in range(len(error)):
            temp1 = temp1 + pow(self.test_data[i] - aver_test_data, 2)
            temp2 = temp2 + pow(error[i] - aver_error, 2)
        square_S_1 = temp1 / len(self.test_data)
        square_S_2 = temp2 / len(error)
        self.C = np.sqrt(square_S_2) / np.sqrt(square_S_1)
        ls = [i
              for i in range(len(error))
              if np.abs(error[i] - aver_error) < (0.6745 * np.sqrt(square_S_1))
              ]
        self.P = len(ls) / len(error)
        print("精度指标P,C值为:", self.P, self.C)

    def plot(self):  # 绘制实验数据拟合情况
        plt.figure()
        plt.plot(self.test_data, marker='*', c='b', label='row value')
        plt.plot(self.modeling_result_arr, marker='^', c='r', label='fit value')
        plt.legend()
        plt.grid()
        return plt

if __name__ == "__main__":
    GM = GM_1_1()
    x = [3199, 3875, 4234, 4653, 5100, 5931, 6102, 6487, 7094, 7356]
    GM.set_model(x)
    print("模型拟合数据为:", GM.modeling_result_arr)
    GM.precision_evaluation()
    print("后三个模型预测值为:", GM.predict(3))
    p = GM.plot()
p.show()

4)附录四

去除离散点之前的python代码运行结果:

模型拟合数据为: [ 416.0 3076.70015316 3379.58301983 3712.28290679 4077.73512271

 4479.16393994 4920.11104133 5404.46676738 5936.5044395  6520.91806225

 7162.86373705 7868.00515292]

精度指标P,C值为: 1.0 0.1934744257689315

后三个模型预测值为: [8642.563555436096, 9493.372634871504, 10427.938817741157]

 去除离散点后的python代码运行结果:

模型拟合数据为: [3199.0 4032.62448716 4364.81364947 4724.36703573 5113.53878556

 5534.76872429 5990.69765891 6484.183934   7018.3213515  7596.45856661]

精度指标P,C值为: 1.0 0.12533957441272606

后三个模型预测值为: [8222.220081440435, 8899.528967979262, 9632.631462964544]

5)附录五

去除离散值的线性回归模型拟合度检验python代码:

import matplotlib.pyplot as plt
X = [[2014], [2015], [2016], [2017], [2018], [2019], [2020], [2021], [2022], [2023]]
Y = [3199, 3875, 4234, 4653, 5100, 5931, 6102, 6487, 7094, 7356]
plt.scatter(X, Y)
# plt.show()
# 搭建线性回归模型
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X, Y)
# 模型预测
y = regr.predict([[2024], [2025], [2026]])
print(y)
print('系数a:'+str(regr.coef_[0]))
print('截距b:'+str(regr.intercept_))
import statsmodels.api as sm
X2 = sm.add_constant(X)
est = sm.OLS(Y, X2).fit()
print(est.summary())
plt.scatter(X, Y)
plt.plot(X, regr.predict(X))
plt.show()

去除离散值的线性回归模型拟合度检验python代码运行结果:

 以上就是博主数学建模练习的全部内容,希望能对广大求学者有所帮助!

未经允许,请勿转载

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值