✅博主简介:本人擅长建模仿真、数据分析、论文写作与指导,项目与课题经验交流。项目合作可私信或扫描文章底部二维码。
-
传统认知诊断方法存在诸多问题,如经典测量理论仅对学生成绩得分进行评价,无法深入挖掘学生认知状态;传统方法基于人工设计函数挖掘线性交互关系,难以处理学生和练习间的复杂交互;耗费人力、精力和时间,效率低下;专家标注 Q 矩阵存在主观倾向和片面性缺陷致诊断结果不精确。而在大数据驱动下,神经网络模型可从学生学习行为数据中挖掘潜在特征,为因材施教提供先决条件。
-
模型构建方法
该模型基于项目反应理论,结合三参数逻辑斯谛模型和神经认知诊断模型,在专家标注 Q 矩阵的基础上修正 Q 矩阵。通过这种方式,充分利用已有专家知识的同时,利用数据驱动的方法对 Q 矩阵进行优化,以提高诊断的准确性。 -
实验验证
- 数据集选择:在三个公开数据集上进行实验。这些数据集涵盖了不同的学科领域和学生群体,能够全面地验证模型的性能。
- 比较模型:与多个已有的认知诊断模型进行比较,包括传统的认知诊断方法和其他基于神经网络的模型。
- 评估指标:采用精度、均方根误差和曲线下面积等指标来评估模型的性能。这些指标可以从不同角度反映模型的准确性和可靠性。
- 实验结果:实验结果显示,该模型在三个公开数据集上的表现优于对比模型,在精度、均方根误差和曲线下面积等方面均取得了更好的结果,总体性能得到了提升。
二、基于超图卷积的神经认知诊断模型
-
弥补不足
基于修正 Q 矩阵的神经认知诊断模型在诊断学生长时间学习序列方面存在不足。为了解决这个问题,提出基于超图卷积的神经认知诊断模型。 -
模型特点
该模型不仅考虑了知识点之间的先决条件依赖性关系,还考虑了多个练习之间的超图结构关系,并充分提取了长时间文本信息。通过超图卷积操作,可以更好地捕捉学生学习过程中的复杂关系,提高诊断的准确性和可靠性。 -
实验验证
- 数据集选择:同样在三个公开数据集上进行实验。
- 比较模型:与多个已有的认知诊断模型进行比较。
- 评估指标:采用与基于修正 Q 矩阵的神经认知诊断模型相同的评估指标。
- 实验结果:实验结果显示,该模型在三个公开数据集上的表现优于对比模型,整体性能得到了提升。
三、在线教育平台中基于神经认知诊断模型的实践应用
-
数据收集与处理
在浙江省高等教育在线平台上收集学生答题数据,并对数据进行分析和处理。包括数据清洗、特征提取等步骤,为后续的认知诊断提供高质量的数据。 -
诊断分析
采用基于修正 Q 矩阵的神经认知诊断模型对学生的答题数据进行诊断分析,确定学生对不同知识点的掌握情况和水平。通过模型的输出,可以得到学生对每个知识点的掌握概率,以及学生的掌握模式。 -
可视化与分析
开发可视化界面,将诊断结果进行可视化。结合建构主义理论、认知诊断理论以及教育目标分类理论,对学生的知识掌握概率、掌握模式和得分相同但掌握模式不同的学生进行分析。通过可视化界面,教学者和学习者可以更直观地了解学生的学习情况,为个性化教学和学习提供依据。 -
教学改进策略
分别从学习内容和思维认知两个维度提出针对性的后期教育改进指导策略。对于学习内容方面,可以根据学生的掌握情况调整教学重点和难点;对于思维认知方面,可以通过培养学生的思维能力和学习方法,提高学生的学习效果。实践应用结果表明,该模型可以为教学者和学习者提供个性化的教学和学习指导,提升未来的教学效果和学习效果。同时,基于诊断结果所提出的教学改进策略为后期教学的改进提供了方向。
import numpy as np
import tensorflow as tf
# 数据预处理函数
def preprocess_data(data):
# 数据清洗、特征提取等预处理步骤
pass
# 构建三参数逻辑斯谛模型函数
def build_3pl_model(theta, a, b, c):
# 构建三参数逻辑斯谛模型的具体实现
pass
# 修正 Q 矩阵函数
def modify_q_matrix(expert_q_matrix, data):
# 根据数据对专家标注的 Q 矩阵进行修正的具体实现
pass
# 神经认知诊断模型函数
def neural_cognitive_diagnosis_model(data, num_concepts):
# 构建神经网络模型的具体实现
pass
# 训练模型函数
def train_model(data, num_concepts, num_epochs):
processed_data = preprocess_data(data)
expert_q_matrix = np.random.randint(2, size=(len(data), num_concepts))
modified_q_matrix = modify_q_matrix(expert_q_matrix, processed_data)
theta = tf.Variable(np.random.randn(len(data)))
a = tf.Variable(np.random.randn(len(data)))
b = tf.Variable(np.random.randn(len(data)))
c = tf.Variable(np.random.randn(len(data)))
optimizer = tf.optimizers.Adam()
for epoch in range(num_epochs):
with tf.GradientTape() as tape:
predictions = build_3pl_model(theta, a, b, c)
loss = compute_loss(predictions, processed_data)
gradients = tape.gradient(loss, [theta, a, b, c])
optimizer.apply_gradients(zip(gradients, [theta, a, b, c]))
return theta, a, b, c, modified_q_matrix
# 计算损失函数
def compute_loss(predictions, data):
# 损失函数的具体实现
pass