【2023华中杯数学建模】B 题 小学数学应用题相似性度量及难度评估详细建模方案及实现代码

简介: 本文提供了2023年华中杯数学建模B题的详细建模方案和实现代码,包括设计小学数学应用题相似性度量方法、建立题目难度评估数学模型、对题库进行相似性或难度分类,以及使用TF-IDF和K-Means聚类算法进行题目难度分析和相似题目推荐。

请添加图片描述

更新时间:2023-5-1 14:00

相关链接

【2023华中杯】B题 小学教学应用题 相似性度量及难度评估 29页论文及MATLAB代码

1 题目

B 题 小学数学应用题相似性度量及难度评估

某 MOOC 在线教育平台希望能够进行个性化教学,实现用户自主学习。在用户学习时,系统从题库中随机抽取若干道与例题同步的随堂测试题,记录、分析学生的学习和答题信息,并且课后会自动生成作业题(或练习题)。此外,系统还能够定期回溯学生的易错题所涉及的内容,自动推荐题型相似、难度有层次的其他题目供用户进行拓展练习。为实现这样的功能,如何度量题目之间的相似性,如何评估题目的难度,是该产品要解决的关键问题。以小学数学应用题 1 为例,度量题目之间相似性的依据主要有以下两种:

  1. 题干文字。这种方法一般只能找到与题干文字相近的题目作为相似题目。但是,有些题目的题干文字相似,而关键字词不同,题意差异较大;有些问题的背景可能毫无关联,题干文字也几乎不同,而题目的解题思路与方法技巧却完全相同。因此,这种方法效果有限。
  2. 事先标注题目的知识点等信息。这种方法的推荐效果取决于知识点的划分方式和粒度。知识点划分太粗,推荐结果可能与例题或用户的易错题差别太大;知识点划分太细, 推荐结果可能太单一。两种情况下都无法真正达到拓展练习的目的。

评估题目难度的常见做法主要有以下两种:

  1. 根据考试的类型确定。比如,数学竞赛的试题一般比某个小学期末考试题目难。

  2. 教师根据经验主观判断。

上述判断题目相似性和评估难度的做法都有明显的局限性。该公司聘请你们团队尝试解决这些问题。以小学数学应用题为例,具体任务如下:

  1. 设计刻画两道小学数学应用题之间相似性的度量方法。

  2. 建立评估小学数学应用题难度的数学模型。

  3. 附件1是一个示例题库,包含 100 道应用题。请将附件1中的题目,按相似性或难度分类(不限制某一道题目只能属于一个分类)。如果某道题目没有相似题目,可以单独成一类。评估算法的复杂度,能否适用于更大规模的题库。

  4. 附件2中包含10道题目,请使用上述模型或方法分析这些题目的难度,并对于其中的 每一道题目,在附件 1 中找出最相似的一道或若干道题目(没有相似题目可写“无)”。评估算法的复杂度,能否适用于更大规模的题库。

注 1:题目所述小学数学应用题,是指以四则运算为主要求解方法,有一定实际背景的问题。
注 2:教学中还有一种确定题目难度的常见做法,即根据题目的实际得分率来定义题目的难度。但是,题目的实际得分率不仅与学生考前的学习情况有关,还与很多“非技术”因素有关,比如题目所用的词语、句型、语态,甚至是题目在试卷中出现的先后顺序等等;实际的得分率也只能通过采集真实的试卷信息获得,工作量大。因此,本题所关心的是题目的“技术”难度,不考虑实际的得分率。附件说明:

  1. 附件 1 为 CSV 格式文件,无标题行,共 2 列 100 行。第一列为题目编号,形如“P001”、“P002”等。第二列为题目内容。

  2. 附件 2 为 CSV 格式文件,无标题行,共 2 列 10 行。第一列为题目编号,形如“Q001”、“Q002”等。第二列为题目内容。

附件2.csv部分内容,

P001 将一批糖果分给幼儿园大班小朋友,如果每人分3颗,就余下21颗;如果每人分4颗,就余下6颗。幼儿园大班有小朋友多少人?这批糖果共有几粒?
P002 姐妹俩从家出发去上学,姐姐每分钟走50米,妹妹每分钟走45米。如果妹妹比姐姐早走5分钟,那么姐妹俩可同时到达学校。问:家到学校有多远?
P003 钢铁厂用两辆运输车从距工厂90千米的矿山运矿石回来。现有甲、乙两辆运输车,甲车自矿山、乙车自钢铁厂同时出发,相向而行,速度分别为每小时40千米和50千米,到达目的地后立即返回,如此反复进行多次。如果不计装卸时间,且两车不作任何停留,则两车在第三次相遇时,距矿山多少千米?

附件2.csv部分内容,

Q001 一列客车长150米,每秒行30米;一列货车长200米,每秒行20米。两车相向而行。当错车而过时,客车司机多久可以看到货车通过?货车司机多久能看到客车通过?
Q002 一批旅客决定分乘几辆大巴车,要使每辆车乘坐同样的人数。起先,每辆车坐22人,发现有一人坐不上车;若是开走一辆空车,那么所有的旅客刚好平均分乘余下的车。已知每辆车的容量不多于32人,问原有多少辆汽车?这些旅客有多少人?

2 数学模型

2.1 问题一

根据题目描述,我们需要设计一个算法来度量题目之间的相似性,并评估题目的难度。

首先,我们可以将每道题目转化为一个向量形式,该向量包含每个题目的关键信息(例如题目中的数字、关键词等),然后我们可以使用略。请下载完整文档来度量两个向量之间的相似性。具体地,设题目 a 和 b 分别对应的向量是 a = ( a 1 , a 2 , … , a n )和 b = ( b 1 , b 2 , … , b n ) ,则两个题目的相似性可以表示为:

。。。。略,请下载完整文档

其中a⋅b 表示向量a 和 b 的内积,$\|\boldsymbol{a}\|$和$\|\boldsymbol{b}\|$分别表示向量 a 和 b 的范数。

但是,直接使用题目中的所有关键信息作为向量可能会导致相似度计算的误差。因此,我们需要对题目的关键信息进行筛选和加权,以提高相似性度量的准确性。具体实现步骤如下

。。。略

2.2 问题二

将题目将采用KMeans聚类算法分为三类,困难、中等、简单。先聚类,再对每个类别进行数据分析,分析出哪个类别具体属于哪个难度。
TF-IDF模型用于将每个题目描述表示为一个向量,向量中的每个元素表示该单词在该题目描述中的权重,以此来表示不同描述的相似度。K-Means聚类模型用于将题目描述向量进行聚类,将相似的题目归为同一类别。聚类模型的数量可以设置为需要进行分类的类别数目。每个题目将会被分为不同的类别。
因此,可以将以上Python代码用数学模型表示为:
设题目集合为 Q Q Q,其中题目数目为 N N N。
TF-IDF模型:
定义词频矩阵$\mathbf{X} \in \mathbb{R}^{N \times M}$,其中第 i 行第 j列的元素xi,j​ 表示题目 i中单词 j 的词频。
定义倒排文档频率(IDF)向量$\mathbf{idf} \in \mathbb{R}^{M}$,其中第 j 个元素 $idf_j = \log \frac{N}{df_j}$ ​,其中dfj表示单词 j 在总题目数中出现的次数。
定义TF-IDF矩阵 $\mathbf{W} \in \mathbb{R}^{N \times M} $,其中第 i 行第 j列的元素 wi,j​ 表示通过TF-IDF模型计算的题目 i 中单词 j 的权重,即$w_{i,j} = x_{i,j} \times idf_j$。
K-Means聚类模型:
定义聚类结果向量 $\mathbf{c} \in \mathbb{R}^{N}$,其中第 i 个元素 ci​ 表示题目 i所属的类别编号,范围为[ 1 , k ],其中 k 表示聚类的类别数目。
定义聚类簇质心向量$\mathbf{\mu} \in \mathbb{R}^{k \times M}$,其中第 i行 μi​ 表示聚类中心向量,即属于第 i 类的题目描述向量的平均值。
定义样本距离度量 $ \mathrm{dist}(x_i,\mu_j)$,其中 xi​ 表示第 i 个题目描述向量, μj​ 表示第 j个聚类中心向量。可以使用欧几里得距离(Euclidean distance)或余弦相似度(Cosine similarity)作为样本距离度量。
定义损失函数$ \mathrm{J}(\{\mathbf{\mu}_j\}_1^k,\mathbf{c},\mathbf{W})$,用于衡量聚类的准确性,可以使用误差平方和(SSE)或其它聚类指标。
聚类模型的目标是最小化损失函数J,并得到最优的聚类结果 c 和聚类簇质心向量 μ。

Kmeans聚类效果的评价指标一般有轮廓系数(Silhouette Coefficient)、Calinski-Harabasz Index和Davies-Bouldin Index等。其中轮廓系数是最常用的评价指标,计算公式为:

$s(i)=\frac{b(i)-a(i)}{max\{a(i),b(i)\}}$

其中, a(i)表示第 i个样本与同一簇内其他样本的平均距离, b(i)表示第 i 个样本与距离最近的另一簇内所有样本的平均距离。

轮廓系数 s 的取值范围在[−1,1]之间,值越大代表聚类效果越好。若某个样本的 s值为负数,说明该样本更应该划分到其他簇。

2.3 问题三

采用问题二的聚类算法,或者其他聚类算法。不指定聚类数量的聚类算法有以下几种:

  1. DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
  2. OPTICS(Ordering Points To Identify the Clustering Structure)
  3. HDBSCAN(Hierarchical Density-Based Spatial Clustering of Applications with Noise)

其中,DBSCAN 比较常用,其主要思想是根据局部密度定义簇,具有对噪声数据点不敏感的特点。

注意,对于Kmeans算法,离散点对算法的影响巨大,可以首先对离散点剔除出来,单独做一个类别,或者采用DBSCAN算法。

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from pyecharts import Scatter

# 读取csv文件
df = pd.read_csv('附件1.csv',header=None)
# 将题目描述作为特征
tfidf = TfidfVectorizer()
features = tfidf.fit_transform(df[1])
# 聚类模型训练
kmeans = KMeans(n_clusters=3, random_state=0).fit(features)

# 评价聚类效果
score = silhouette_score(features, kmeans.labels_)
print('聚类效果评价指标(Silhouette Score):', score)

# 可视化聚类效果
。。。。略
# 打印聚类结果
for i in range(len(kmeans.labels_)):
    print('题目ID:{}, 题目描述:{}'.format(df[0][i], df[1][i]))
    print('题目类别:{}'.format(kmeans.labels_[i]))
    print('---------------------------')

在这里插入图片描述

可以看到聚类效果不是特别理想,还需要进一步改进。

在这里插入图片描述

2.4 问题四

用问题一的相似度计算方法。遍历附件1和附件2,依次去计算两个问题的相似度。

import pandas as pd
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 读取csv文件
data = pd.read_csv('附件1.csv')
questions = data['题目']

# 定义一个处理题目的函数,该函数将题目转换为关键词列表,并对不同关键词进行加权,最终返回一个向量:

def process_question(question):
   。。。略
    return ' '.join(key_words)  # 返回空格分隔的关键字字符串

# 将所有题目转换为关键词向量:
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform([process_question(question) for question in questions])
# 最后,计算任意两个题目之间的相似度并输出结果:
for i in range(len(questions)):
    for j in range(i+1, len(questions)):
        similarity = cosine_similarity(vectors[i], vectors[j])[0][0]
        print(f"题目{i+1} 和 题目{j+1} 的相似度为: {similarity:.4f}")

在这里插入图片描述

3 完整下载

请添加图片描述

目录
相关文章
|
2月前
|
传感器 机器学习/深度学习 数据采集
2022年第十一届认证杯数学中国数学建模国际赛小美赛:C 题 对人类活动进行分类 建模方案及代码实现
本文提供了2022年第十一届认证杯数学中国数学建模国际赛小美赛C题"对人类活动进行分类"的建模方案和Python代码实现,包括数据预处理、特征提取、LSTM网络模型构建和训练评估过程。
56 11
2022年第十一届认证杯数学中国数学建模国际赛小美赛:C 题 对人类活动进行分类 建模方案及代码实现
|
1月前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1597 17
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
2月前
|
人工智能 算法 新能源
【2023高教社杯】A题 定日镜场的优化设计 问题分析及数学模型
本文介绍了2023年高教社杯数学建模竞赛A题的定日镜场优化设计问题,涉及问题分析和数学模型构建,旨在提高太阳能光热发电效率并实现电力系统的新能源转型。
87 1
【2023高教社杯】A题 定日镜场的优化设计 问题分析及数学模型
|
2月前
|
机器学习/深度学习 算法
【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献
本文介绍了2023年高教社杯数学建模竞赛B题,聚焦于多波束测深系统的覆盖宽度和重叠率问题,包括问题分析、数学模型构建和参考文献,并针对不同场景下的测线设计提出了解决方案。
60 0
【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献
|
2月前
|
数据可视化 决策智能 Python
【江西省研究生数学建模竞赛】题目之二 国际“合作-冲突”的演化规律研究 建模方案及参考文献
本文介绍了江西省研究生数学建模竞赛题目之二“国际‘合作-冲突’的演化规律研究”的建模方案和参考文献,探讨了如何通过博弈论和决策树模型来分析和预测国家间的合作与冲突行为,并提出了评估国际环境和应对突发事件的策略。
41 0
【江西省研究生数学建模竞赛】题目之二 国际“合作-冲突”的演化规律研究 建模方案及参考文献
|
2月前
|
机器学习/深度学习 数据可视化 Python
【江西省研究生数学建模竞赛】第三题 植物的多样性 建模方案及参考文献
本文提供了江西省研究生数学建模竞赛第三题“植物的多样性”的建模方案、参考文献和可视化示例,探讨了如何通过数学模型研究植物数量变化规律并提出保持森林多样性的策略。
35 0
【江西省研究生数学建模竞赛】第三题 植物的多样性 建模方案及参考文献
|
4月前
大学物理(上)-期末知识点结合习题复习(4)——质点运动学-动能定理 力做功 保守力与非保守力 势能 机械能守恒定律 完全弹性碰撞
大学物理(上)-期末知识点结合习题复习(4)——质点运动学-动能定理 力做功 保守力与非保守力 势能 机械能守恒定律 完全弹性碰撞
69 0
|
算法
数学建模国赛/美赛常见赛题类型及建模方案(纯干货)
主客观概念主要是在指标定权时来划分的。主观评价与客观评价的区别是,主观评价算法在定权时主要以判断者的主观经验为依据,而客观评价则主要基于测量数据的基本特性来综合定权
725 0
数学建模国赛/美赛常见赛题类型及建模方案(纯干货)
高职考技能提升教程012期 阶层求和的综合运用
高职考技能提升教程012期 阶层求和的综合运用
|
机器学习/深度学习
《考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧》电子版地址
考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧
82 0
《考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧》电子版地址