铛铛!小秘籍来咯!
小秘籍希望大家都能轻松建模呀,数维杯也会持续给大家放送思路滴~
抓紧小秘籍,我们出发吧~
来看看 数维杯国际大学生数学建模挑战赛的B题!
完整版内容在文末领取噢~
问题重述
问题一:针对催化剂(脱硫灰)在棉秆(cotton stalk)和模型化合物(CE和LG)的催化热解实验,通过数学建模分析,探讨催化剂在不同混合比例下对产物(焦油、水、焦渣、合成气)产量的影响,并判断脱硫灰是否在催化棉秆、纤维素和木质素的热解过程中发挥显著作用。
问题二:基于实验数据,对三种热解组合(脱硫灰-棉秆、脱硫灰-CE、脱硫灰-LG)进行深入分析,关注混合比例对热解气体产物(H2、CO、CO2、CH4等)产量的影响,通过图形化呈现和解释结果。
问题三:在相同脱硫灰催化比例下,探讨纤维素(CE)和木质素(LG)的热解产物产量以及热解气体组分的差异,并提供解释。
问题四:建立脱硫灰对模型化合物(CE和LG)的催化反应机理模型,进行反应动力学分析,通过最小二乘法和统计检验验证模型的可靠性。
问题五:使用机器学习方法(如支持向量回归),基于给定数据,建立模型预测催化剂在不同条件下对产物产量的影响,实现对热解产物的定量预测。
问题一
问题一要求对每个热解组合分析与其对应的热解产物(焦油、水、焦渣、合成气)的产量之间的关系,以及判断脱硫灰作为催化剂是否在促进棉秆、纤维素和木质素的热解过程中发挥了显著的作用。以下是问题一的建模思路:
-
数据理解与预处理:
- 理解并检查附带的热解组合产物数据表格。
- 处理任何缺失值或异常值。
- 确保数据集分为训练集和测试集。
-
选择适当的模型:
- 由于问题涉及多个因素对多个产物的影响,可以考虑使用多元回归模型。
- 对于多元回归,可以分别建立焦油、水、焦渣和合成气的产量模型。
-
特征选择与工程:
- 选择作为输入特征的热解组合的相关参数,如脱硫灰的混合比例。
- 可以进行特征工程,如变量的归一化或标准化。
-
建立多元回归模型:
- 对于每个产物(焦油、水、焦渣、合成气),建立相应的多元回归模型。
- 在Python中,可以使用Scikit-Learn等库的线性回归模型。
from sklearn.linear_model import LinearRegression # 假设 X 是热解组合的相关参数,y 是对应产物的产量 model_tar = LinearRegression() model_water = LinearRegression() model_coke = LinearRegression() model_syngas = LinearRegression() # 训练模型 model_tar.fit(X, y_tar) model_water.fit(X, y_water) model_coke.fit(X, y_coke) model_syngas.fit(X, y_syngas)
-
模型评估:
- 使用测试集数据对每个模型进行评估,检查模型的预测性能。
- 可以使用各种回归指标,如均方误差(MSE)等。
-
统计检验:
- 对每个模型进行统计检验,验证模型参数的显著性。
- 这可以通过 t 检验等方法来实现。
-
结果解释:
- 解释每个模型的系数,了解各个热解组合参数对产物产量的影响程度。
- 比较脱硫灰的混合比例在促进热解产物生成方面的作用。
-
可视化:
- 制作图表,将模型预测值与实际观测值进行比较,以直观展示模型性能。
-
模型应用与验证:
- 将建立的模型应用于新的热解组合数据,验证模型的泛化能力。
- 确保模型在未见过的数据上表现良好。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import statsmodels.api as sm
# 读取数据
data = pd.read_excel('热解组合产物数据.xlsx')
# 数据预处理
X = data[['脱硫灰混合比例', '其他相关参数']] # 输入特征
y_tar = data['焦油产量'] # 目标变量:焦油产量
y_water = data['水产量'] # 目标变量:水产量
y_coke = data['焦渣产量'] # 目标变量:焦渣产量
y_syngas = data['合成气产量'] # 目标变量:合成气产量
# 分割数据集为训练集和测试集
X_train, X_test, y_tar_train, y_tar_test, y_water_train, y_water_test, y_coke_train, y_coke_test, y_syngas_train, y_syngas_test = train_test_split(
X, y_tar, y_water, y_coke, y_syngas, test_size=0.2, random_state=42)
# 创建并训练多元回归模型
model_tar = LinearRegression()
model_tar.fit(X_train, y_tar_train)
model_water = LinearRegression()
model_water.fit(X_train, y_water_train)
model_coke = LinearRegression()
model_coke.fit(X_train, y_coke_train)
model_syngas = LinearRegression()
model_syngas.fit(X_train, y_syngas_train)
# 预测测试集
y_tar_pred = model_tar.predict(X_test)
y_water_pred = model_water.predict(X_test)
y_coke_pred = model_coke.predict(X_test)
y_syngas_pred = model_syngas.predict(X_test)
# 评估模型性能
mse_tar = mean_squared_error(y_tar_test, y_tar_pred)
mse_water = mean_squared_error(y_water_test, y_water_pred)
mse_coke = mean_squared_error(y_coke_test, y_coke_pred)
mse_syngas = mean_squared_error(y_syngas_test, y_syngas_pred)
print(f'Mean Squared Error (Tar): {mse_tar}')
print(f'Mean Squared Error (Water): {mse_water}')
print(f'Mean Squared Error (Coke): {mse_coke}')
print(f'Mean Squared Error (Syngas): {mse_syngas}')
# 统计检验
X_train = sm.add_constant(X_train) # 添加截距项
model_tar_stats = sm.OLS(y_tar_train, X_train).fit()
model_water_stats = sm.OLS(y_water_train, X_train).fit()
model_coke_stats = sm.OLS(y_coke_train, X_train).fit()
model_syngas_stats = sm.OLS(y_syngas_train, X_train).fit()
# 打印模型统计信息
print(model_tar_stats.summary())
#见完整代码
问题二
-
数据理解与预处理:
- 读取并理解附带的热解组合产物数据表格。
- 处理任何缺失值或异常值。
- 将数据集分为训练集和测试集。
-
选择适当的模型:
- 由于问题涉及混合比例对产物产量的影响,选择多项式回归模型。
- 多项式回归可以通过添加混合比例的高次项来捕捉非线性关系。
-
特征选择与工程:
- 选择混合比例作为输入特征。
- 考虑添加混合比例的高次项,以捕捉可能存在的非线性关系。
- 对特征进行必要的预处理,如归一化或标准化。
-
建立多项式回归模型:
- 对于每个产物(焦油、水、焦渣、合成气),建立相应的多项式回归模型。
- 在Python中,可以使用Scikit-Learn等库的
PolynomialFeatures
进行特征的多项式转换,并使用LinearRegression
进行多项式回归。
from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression # 假设 X 是混合比例,y 是对应产物的产量 degree = 2 # 多项式次数 poly = PolynomialFeatures(degree) X_poly = poly.fit_transform(X_train) model_tar = LinearRegression() model_water = LinearRegression() model_coke = LinearRegression() model_syngas = LinearRegression() # 训练模型 model_tar.fit(X_poly, y_tar_train) model_water.fit(X_poly, y_water_train) model_coke.fit(X_poly, y_coke_train) model_syngas.fit(X_poly, y_syngas_train)
-
模型评估:
- 使用测试集数据对每个模型进行评估,检查模型的预测性能。
- 可以使用各种回归指标,如均方误差(MSE)等。
from sklearn.metrics import mean_squared_error X_poly_test = poly.transform(X_test) y_tar_pred = model_tar.predict(X_poly_test) y_water_pred = model_water.predict(X_poly_test) y_coke_pred = model_coke.predict(X_poly_test) y_syngas_pred = model_syngas.predict(X_poly_test) mse_tar = mean_squared_error(y_tar_test, y_tar_pred) mse_water = mean_squared_error(y_water_test, y_water_pred) mse_coke = mean_squared_error(y_coke_test, y_coke_pred) mse_syngas = mean_squared_error(y_syngas_test, y_syngas_pred) print(f'Mean Squared Error (Tar): {mse_tar}') print(f'Mean Squared Error (Water): {mse_water}') print(f'Mean Squared Error (Coke): {mse_coke}') print(f'Mean Squared Error (Syngas): {mse_syngas}')
-
结果可视化:
- 制作图表,将混合比例与模型预测的产物产量进行可视化比较。
- 可以创建多个子图,每个子图代表一个产物。
import matplotlib.pyplot as plt plt.scatter(X_test, y_tar_test, color='black', label='Actual') plt.scatter(X_test, y_tar_pred, color='red', label='Predicted') plt.title('Tar Production Prediction') plt.xlabel('Mixture Ratio') plt.ylabel('Tar Production') plt.legend() plt.show()
-
统计检验(可选):
- 对模型的系数进行统计检验,验证混合比例及其高次项对产物产量的显著性。
import statsmodels.api as sm X_poly_stats = sm.add_constant(X_poly) # 添加截距项 model_tar_stats = sm.OLS(y_tar_train, X_poly_stats).fit() # 进行其他产物的统计检验... print(model_tar_stats.summary())
-
模型解释与应用:
- 解释每个模型的系数,了解混合比例及其高次项对于产物产量的影响。
- 可以使用模型进行预测,并根据需要应用到新的混合比例数据。
问题三
对于问题三,我们可以采用多元回归分析来建模,以研究脱硫灰催化下纤维素(CE)和木质素(LG)的热解产物产量及热解气体组分之间的关系。以下是更详细的建模思路:
-
数据理解与预处理:
- 理解附带的热解组合产物数据表格,特别关注纤维素(CE)和木质素(LG)的相关列。
- 处理缺失值或异常值。
- 将数据集分为训练集和测试集。
-
选择适当的模型:
- 由于我们关心多个因变量(产物产量和热解气体组分),可以使用多元线性回归模型。这样的模型可以同时考虑多个因变量之间的关系。
-
特征选择与工程:
- 选择脱硫灰的催化比例作为输入特征,以及纤维素(CE)和木质素(LG)的产物产量及热解气体组分作为目标变量。
- 进行必要的特征工程,如数据标准化。
-
建立多元回归模型:
- 对于每个目标变量(例如焦油、水、焦渣、合成气及其组分),建立相应的多元回归模型。
- 在Python中,可以使用Scikit-Learn库的
LinearRegression
。
from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 选择特征和目标变量 X = data[['催化比例']] y_tar = data[['CE_tar_production', 'LG_tar_production']] y_gas = data[['CE_H2', 'CE_CO', 'LG_H2', 'LG_CO']] # 以此类推... # 分割数据集 X_train, X_test, y_tar_train, y_tar_test, y_gas_train, y_gas_test = train_test_split( X, y_tar, y_gas, test_size=0.2, random_state=42 ) # 创建并训练多元回归模型 model_tar = LinearRegression() model_tar.fit(X_train, y_tar_train) model_gas = LinearRegression() model_gas.fit(X_train, y_gas_train)
-
模型评估:
- 使用测试集数据对每个模型进行评估,检查模型的预测性能。
- 评估可以使用各种回归指标,如均方误差(MSE)等。
# 预测测试集 y_tar_pred = model_tar.predict(X_test) y_gas_pred = model_gas.predict(X_test) # 评估模型性能 mse_tar = mean_squared_error(y_tar_test, y_tar_pred) mse_gas = mean_squared_error(y_gas_test, y_gas_pred) print(f'Mean Squared Error (Tar): {mse_tar}') print(f'Mean Squared Error (Gas): {mse_gas}')
-
解释结果:
- 解释每个模型的系数,了解催化比例对于纤维素(CE)和木质素(LG)热解产物产量及热解气体组分的影响。
- 检查模型系数的显著性,可以通过 t 检验或 p 值来判断。
import statsmodels.api as sm X_train_stats = sm.add_constant(X_train) # 添加截距项 model_tar_stats = sm.OLS(y_tar_train, X_train_stats).fit() model_gas_stats = sm.OLS(y_gas_train, X_train_stats).fit() print(model_tar_stats.summary()) print(model_gas_stats.summary())
-
统计检验:
- 对模型的系数进行统计检验,验证催化比例的显著性。
-
模型解释与应用:
- 根据模型结果解释催化比例对于纤维素(CE)和木质素(LG)的热解产物产量及热解气体组分的影响。
- 模型可以用于预测新的催化比例下的产物产量及热解气体组分。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import statsmodels.api as sm
# 读取数据
data = pd.read_excel('热解组合产物数据.xlsx')
# 数据预处理
# 选择特征和目标变量
X = data[['催化比例']]
y_tar = data[['CE_tar_production', 'LG_tar_production']]
y_gas = data[['CE_H2', 'CE_CO', 'LG_H2', 'LG_CO']] # 以此类推...
# 分割数据集
X_train, X_test, y_tar_train, y_tar_test, y_gas_train, y_gas_test = train_test_split(
X, y_tar, y_gas, test_size=0.2, random_state=42
)
# 创建并训练多元回归模型 - 产物产量
model_tar = LinearRegression()
model_tar.fit(X_train, y_tar_train)
# 创建并训练多元回归模型 - 热解气体组分
model_gas = LinearRegression()
model_gas.fit(X_train, y_gas_train)
# 预测测试集
y_tar_pred = model_tar.predict(X_test)
y_gas_pred = model_gas.predict(X_test)
# 评估模型性能
mse_tar = mean_squared_error(y_tar_test, y_tar_pred)
mse_gas = mean_squared_error(y_gas_test, y_gas_pred)
print(f'Mean Squared Error (Tar): {mse_tar}')
print(f'Mean Squared Error (Gas): {mse_gas}')
# 模型统计检验
X_train_stats = sm.add_constant(X_train) # 添加截距项
model_tar_stats = sm.OLS(y_tar_train, X_train_stats).fit()
问题四
问题四需要建立脱硫灰对模型化合物(如纤维素和木质素)的催化反应机理模型,并对反应动力学进行分析。以下是一个建模思路:
-
机理模型的构建:
- 首先,我们需要了解脱硫灰对纤维素(CE)和木质素(LG)的催化机理。这可能涉及到催化剂与生物质组分之间的反应路径、中间产物等。
- 基于已有的化学知识,建立脱硫灰催化纤维素和木质素热解的反应机理模型。这可以是一组差分方程或基于反应速率的模型。
-
动力学参数的估计:
- 使用实验数据,通过拟合模型参数,估计脱硫灰对纤维素和木质素催化反应的动力学参数。
- 选择适当的参数拟合方法,如最小二乘法,以获得最佳拟合。
-
模型验证:
- 使用估计的动力学参数对模型进行验证,比较模型预测与实验数据的吻合程度。
- 可以使用各种统计指标来评估模型的准确性,如均方根误差(RMSE)等。
-
模型应用与解释:
- 基于建立的催化反应机理模型,可以进行不同条件下的模拟,预测纤维素和木质素的催化热解行为。
- 解释模型参数的物理意义,了解脱硫灰对生物质组分热解的影响。
-
敏感性分析:
- 进行敏感性分析,评估模型对于参数变化的敏感性。这有助于确定哪些参数对模型的输出影响最大,以及在什么条件下模型可能失效。
-
模型改进:
- 根据验证和敏感性分析的结果,对模型进行改进。可能需要调整催化反应机理的复杂度,引入更多的影响因素或修正模型方程。
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
# 定义一阶反应模型
def first_order_reaction(C, t, k):
return -k * C
# 生成模拟数据
t_data = np.linspace(0, 10, 50)
k_true = 0.2 # 真实的反应速率常数
C_true = odeint(first_order_reaction, 1.0, t_data, args=(k_true,)).flatten()
# 添加噪声模拟实验数据
np.random.seed(42)
C_noisy = C_true + 0.05 * np.random.normal(size=len(t_data))
# 定义拟合函数
def fit_function(t, k):
return odeint(first_order_reaction, 1.0, t, args=(k,)).flatten()
问题五
使用支持向量回归(Support Vector Regression,SVR方法。SVR 是一种回归分析的机器学习算法,适用于非线性关系的建模。
-
数据预处理:
- 处理缺失值,处理异常值,将数据集分为训练集和测试集。
-
选择特征和目标变量:
- 选择适当的特征作为输入,包括催化比例和其他可能影响反应的因素。
- 选择产物产量或其他相关的输出作为目标变量。
-
支持向量回归模型:
- 使用支持向量回归模型进行建模。SVR 是一种非常适用于复杂非线性关系的算法。
-
模型训练:
- 将数据输入到 SVR 模型中,进行模型的训练。
-
模型评估:
- 使用测试集数据对模型进行评估,考察模型的泛化性能。可以使用均方误差(MSE)等指标进行评估。
-
调整模型参数:
- 根据评估结果调整 SVR 模型的参数,以优化模型性能。SVR 有一些关键的参数,如 kernel 类型、惩罚系数(C)等。
-
特征重要性分析(可选):
- 虽然 SVR 不像随机森林那样直接提供特征的重要性分数,但可以通过观察模型的权重来了解输入特征对于模型的相对重要性。
-
模型解释:
- 解释 SVR 模型对于催化反应产物产量的预测结果,了解模型认为哪些因素对于影响产物产量较大。
-
模型应用:
- 使用训练好的 SVR 模型进行新的预测,例如在不同的催化条件下预测产物产量。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_excel('你的数据文件.xlsx')
# 数据预处理
# 选择特征和目标变量
X = data[['催化比例', '其他特征1', '其他特征2', ...]] # 添加其他可能的影响因素
y = data['产物产量']
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 支持向量回归模型
# 这里可以根据需要调整SVR的参数,如kernel类型、C值等
model = SVR(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train, y_train)
# 模型预测
y_pred = model.predict(X_test)
# 模型评估
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
# 绘制真实值与预测值的对比图
plt.scatter(y_test, y_pred)
plt.xlabel('真实值')
plt.ylabel('预测值')
完整内容点击下方名片详细了解噢~
一起来关注数学建模小秘籍冲刺数位杯最强王者!