我目前正在为一大班学生教授数学高中生。在第一堂课上,我做了一个涵盖几何(G)、代数(A)、基本统计(S)和三角学(T)每一课的测试。我个人觉得一个班200个学生太多了,所以我想把他们分成每班20名学生。我的问题是,给定他们的结果向量(G、A、S、T),我如何形成 10 个组,以使每个组中的学生水平尽可能接近?
如何划分nn学生到米m分组,使他们的水平尽可能接近?
机器算法验证
机器学习
2022-04-20 03:22:32
3个回答
如果您使用 k-means 算法对学生进行聚类,它将最小化每个组内的平方和。该算法通过惩罚每个组中的技能变化来找到组。技能相对于集群平均值的差异越大,惩罚越大。因此,这应该适合您的需求。您可以在 R 中使用 kmeans() 命令轻松完成此操作。但是,此算法不强制执行相等的组大小。此处讨论了此限制的解决方案。
寻找最优类别分配的问题等价于最小化以下目标函数:
在哪里:
有很多方法可以最小化这样的函数,但在诸如此类的小问题中我通常更喜欢模拟退火。模拟退火的工作原理是采用一些最初提出的解决方案,并迭代地对其进行调整(首先是大调整,然后是逐渐较小的调整),直到最终得出一个通常接近最优的最终答案。
除了目标函数之外,模拟退火还需要了解什么构成了“调整”(更正式地说,是什么构成了一对相邻状态)。在这种情况下,这样的调整将对应于将两个随机班级中的两个随机学生相互交换。
注意:我提供的目标函数相当于对所有类内成对距离求和,如k-means wiki的描述部分所述。
你认为这会是班级的最佳作业吗?我会亲自拆分组,以便我在不同组的每个类别中都名列前茅。学生可以利用他们的技能并以这种方式提高。
我可以将问题描述为
您在没有更换的情况下进行采样。