2024年长三角数学建模竞赛B题论文首发+问题一二三四讲解+问题一代码分享

人工智能范式的物理化学家

随着科学技术的飞速发展,化学和物理领域的研究逐渐进入了一个复杂化和高维化的新时代。传统的研究方法,如“穷举”、“试错”和“重复”,在面对庞大的化学空间时显得捉襟见肘,往往只能达到局部最优而非全局最优。为了突破这一瓶颈,中国科技大学机器化学家平台应运而生,它凭借大数据与智能模型的双重驱动,实现了化学合成、表征和测试的全流程自动化开发,为化学研究带来了革命性的变革。

5.1 问题1模型建立与求解

5.1.1 数据预处理

数据预处理是数据分析流程中至关重要的第一步。原始数据往往包含噪声、错误、缺失值、不一致的格式以及可能的多余或无关特征,这些问题如果未经处理就直接用于建模分析,不仅可能导致分析结果失真,而且可能影响模型的准确性和可靠性。通过数据预处理,我们可以有效地识别并纠正这些问题,提高数据质量,确保后续分析的有效性。此外,数据预处理还有助于将数据转换为符合机器学习模型输入要求的格式,例如通过特征编码将分类变量转换为数值型变量,或通过特征缩放调整不同特征之间的尺度差异。这些转换不仅有助于模型更好地学习数据的内在结构和关系,还能提高模型的预测性能。因此,数据预处理是确保数据分析准确性和可靠性的必要步骤,对于任何涉及数据分析的项目都至关重要。

针对问题一,首先是要对进行预处理操作,以便分析其函数关系并进行预测。检查是否有缺失值,并采用Z-score方法判断一个数据点是否为异常值,若为异常值,则将异常值做删除处理。Z-score,也称为标准化得分或标准分数,是一种统计量,用于衡量一个数据点在其所属数据集中的位置。它表示一个数据点与数据集平均值的偏差程度,以标准差为单位。Z-score可以用来判断一个数据点是否为异常值。Z-score的计算公式如下:

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
# 加载数据
data_path = '问题一数据.xlsx'
data = pd.read_excel(data_path)

# 准备数据
X = data['id'].values.reshape(-1, 1)
y = data['y2'].values

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 创建多项式回归模型(这里使用2阶多项式)
poly_model = make_pipeline(PolynomialFeatures(degree=4), LinearRegression())

# 训练模型
poly_model.fit(X_train, y_train)

# 使用模型进行预测
poly_predicted_y = poly_model.predict(X_test)

# 评估模型
poly_mse = mean_squared_error(y_test, poly_predicted_y)
poly_r2 = r2_score(y_test, poly_predicted_y)
print(f"Mean Squared Error: {poly_mse}")
print(f"R^2 Score: {poly_r2}")

# 生成新的ID范围的预测使用改进的多项式模型
new_ids = np.arange(200001, 202581).reshape(-1, 1)
new_poly_predictions = poly_model.predict(new_ids)

# 将预测结果存入DataFrame
poly_prediction_df = pd.DataFrame({
'id': np.arange(200001, 202581),
'predicted_y2': new_poly_predictions
})

# 输出部分预测结果查看
print(poly_prediction_df.head())
print(poly_prediction_df.tail())

# 保存预测结果到CSV文件
output_path = 'predicted_y2_values_poly.csv'
poly_prediction_df.to_csv(output_path, index=False)
print(f"Predictions saved to {output_path}")
# Plotting actual vs predicted values for the test set
plt.figure(figsize=(10, 6))
plt.scatter(X_test, y_test, color='blue', label='Actual', alpha=0.5)
plt.scatter(X_test, poly_predicted_y, color='red', label='Predicted', alpha=0.5)
plt.title('Actual vs Predicted y2 on Test Data')
plt.xlabel('ID')
plt.ylabel('y2')
plt.legend()
plt.grid(True)
plt.show()

# Plotting the predicted trend for the new ID range
plt.figure(figsize=(10, 6))
plt.plot(np.arange(200001, 202581), new_poly_predictions, color='green', label='Predicted Trend')
plt.title('Predicted y2 for New IDs (200001-202580)')
plt.xlabel('ID')
plt.ylabel('y2')
plt.legend()
plt.grid(True)
plt.show()

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值