是否有任何分类算法针对具有一对多(1:n)关系的数据?

时间:2011-01-21 22:06:11

标签: algorithm machine-learning data-mining classification database-relations

数据挖掘领域是否有关于对具有一对多关系的数据进行分类的研究?

例如,像这样的问题,说我试图根据他们的班级成绩和个人信息来预测哪些学生将退学。显然,学生的个人信息与他们在课堂上取得的成绩之间存在一对多的关系。

明显的方法包括:

  1. 聚合 - 可以通过某种方式将多个记录聚合在一起,将问题简化为基本分类问题。在学生分类的情况下,他们的成绩的平均值可以与他们的个人数据相结合。虽然这种解决方案很简单,但通常会丢失关键信息。例如,如果大多数接受有机化学并且低于C-的学生即使他们的平均水平高于B +等级也会辍学。

  2. 投票 - 创建多个分类器(通常是弱分类器)并让他们投票以确定相关数据的整体类别。这就像是建立了两个分类器,一个用于学生的课程数据,一个用于他们的个人数据。每个课程记录将被传递到课程分类器,并根据成绩和课程名称,分类器将预测学生是否会单独使用该课程记录退学。将使用个人数据分类器对个人数据记录进行分类。然后,所有课堂记录预测以及个人信息记录预测将被一起投票。这种投票可以通过多种不同的方式进行,但很可能会考虑分类器的准确程度以及分类器的确定性。显然,该方案允许比聚合更复杂的分类模式,但是涉及许多额外的复杂性。此外,如果投票表现不佳,准确性很容易受到影响。

  3. 所以我正在寻找具有一对多关系的数据分类的其他可能解决方案。

4 个答案:

答案 0 :(得分:2)

为什么不将每个年级视为同一模特的单独特征?

student['age'] = 23
student['gender'] = 'male'
 ... 
student['grade_in_organic_chemistry'] = 'B+'
student['grade_in_classical_physics'] = 'A-'

我想我不明白为什么当成绩只是不同的功能时你想要“聚合”或联合多个分类器?

(请原谅上面的蹩脚的伪代码,但只是试图证明我的观点)

答案 1 :(得分:1)

虽然与专业方法相比,这可能是次优的,但您可以使用SVM对非平衡类进行校正,如下例所示(使用Python库scikit-learn):

http://scikit-learn.sourceforge.net/auto_examples/svm/plot_weighted_classes.html

在实践中,我在课程相当不平衡方面取得了不错的成绩。

答案 2 :(得分:0)

如果不了解更多内容很难说,但从贝叶斯的角度来看,您可能会对缺少功能的情况感兴趣。我将概括地讨论。有关更多信息,请参阅[Duda and Hart,第2版,第54-55页]。

对于任何分类器,贝叶斯决策规则是选择类 i ,这样可以最大化类 i 发生的概率,因为数据 x 观察到,即 max P(i | x)。向量 x 包含特征,例如学生的成绩,年龄等。

并非所有学生都使用相同的课程,因此特征向量 x 可能包含空元素,即“缺少要素”。在这种情况下,您必须边缘化覆盖缺失的要素,即只是对缺失的要素进行求和,然后对好的剩余特征做出决定。

实施例。假设一个学生采用生物学,而不是化学:

P(student drops out | A+ in biology) 
= P(student drops out, A+ in biology)/P(A+ in biology) 
= P(student drops out, A+ in biology, A in chemistry)
  ---------------------------------------------------
  P(A+ in biology, A in chemistry) 
  + 
  P(student drops out, A+ in biology, B in chemistry)
  ---------------------------------------------------
  P(A+ in biology, B in chemistry) 
  + ... + 
  P(student drops out, A+ in biology, F in chemistry)
  ---------------------------------------------------
  P(A+ in biology, F in chemistry)

答案 3 :(得分:0)

我设想了两条基本路径:

  1. 正如你所说的那样,“聚合”解决方案,它将利用每个学生的情况的各种摘要:参加了多少课程,介绍101课程的班级百分比,平均成绩,最低四分位数等等

  2. 某种类型的证据累加器,例如朴素贝叶斯模型(如史蒂夫已经建议的)或模糊逻辑规则库。这种解决方案自然地处理不同数量的输入数据我想这可以用足够的数据来实现,使用一个巨大的传统模型(神经网络等)和一组非常大的输入(其中大部分将设置为“缺失”的中性值),但我怀疑它和其他选择一样有效。

  3. 很抱歉,但我认为在这种特殊情况下,“一帮简单的解决方案”会很弱。这并不是说它不起作用,而是从其他地方开始。