我有 200 个向量代表 200 名不同学生在不同班级的百分比分数。向量是 22 维的(因为总共有 22 个不同的班级),即使每个学生只上了 6 个班级。换句话说,学生并不都参加完全相同的课程,因此向量是稀疏的。如果向量很密集,我会使用TSNE。但是,由于它们很稀疏,我什至不确定我应该如何表示每个学生不参加的课程的价值观。
对这种稀疏向量进行降维的明智方法是什么?除了可视化之外,最终目标是将学生聚集在一起。
我有 200 个向量代表 200 名不同学生在不同班级的百分比分数。向量是 22 维的(因为总共有 22 个不同的班级),即使每个学生只上了 6 个班级。换句话说,学生并不都参加完全相同的课程,因此向量是稀疏的。如果向量很密集,我会使用TSNE。但是,由于它们很稀疏,我什至不确定我应该如何表示每个学生不参加的课程的价值观。
对这种稀疏向量进行降维的明智方法是什么?除了可视化之外,最终目标是将学生聚集在一起。
这取决于聚类的目标。
t-SNE 以及各种聚类方法(如层次聚类)可以处理距离矩阵。你的工作是构建一个距离度量来捕捉你希望达到的目标。下面举几个例子。
示例 1
如果您想根据学生获得好成绩的能力对他们进行分组,最简单的解决方案是忽略缺失的课程,并简单地比较他们取得的平均成绩。因此,两个学生之间的距离可能只是他们平均成绩的差异。
这里的一个好主意是根据每个班级的难易程度来衡量每个班级的权重(例如基于学生在该班级获得的平均成绩)
示例 2
如果学生可以自由选择他们的课程,您可能希望按照他们的兴趣对他们进行分组。在这种情况下,兴趣将反映在他们实际选择的课程类型上。在这种情况下,您将忽略他们的所有分数,并将缺失的课程编码为 0,将参加的课程编码为 1。然后根据学生重叠的课程数量计算学生之间的距离度量。
示例 3
另一种可能的情况是,如果您希望根据学生在各种科目上的能力对他们进行分组。在这里,您必须将成绩和科目选择结合起来。一个简单的(愚蠢的)解决方案是用每个学生的平均能力替换所有缺失的条目。或者每个学生在该科目上的平均能力。
这个想法是,当学生没有上课时 - 你最好的猜测是他在那堂课上是平均水平。
但经过一番思考,您可能会构建更好的指标。只需要考虑当他们的班级没有重叠时,学生之间的相似性应该是多少。
t-SNE 和聚类
上面的例子展示了如何构建学生之间的距离矩阵的一些方法。之后,您可以将该矩阵用于 t-SNE 和聚类。
奇异值分解是应用于稀疏数据类型的一种非常常见的降维策略。这是因为您可以利用专门的稀疏 SVD 求解器(例如 ARPACK),并且对于 SVD,输入不必以任何可能破坏稀疏性的特殊方式进行操作。