我有一系列具有发布日期的培训文档,其中每个文档都标记为属于(或不属于)某个主题T.我想培训一个模型,该模型将预测新文档(具有发布日期)是否或它不属于T,其中出版日期可能是过去或未来。假设我已经将每个训练文档的文本分解为一组特征(例如,单词或n-gram的TF-IDF),适合于通过像Weka这样的库提供的适当二进制分类算法进行分析(例如,多项式朴素贝叶斯,随机森林或SVM)。要学习的概念表现出多重季节性;即,在给定日期发布的任意文件属于T的先验概率在很大程度上取决于日期何时落入4年周期(由于选举),其中它处于年度周期(由于假期),以及在一周的这一天。
我的研究表明,分类算法通常假定(作为其统计模型的一部分)训练数据是从模型最终应用于的相同数据池中随机抽样的。当训练数据中的类别分布与野外的已知分布大不相同时,这会导致所谓的“类别不平衡”。问题。有一些方法可以弥补这一点,包括对代表性不足的类别进行过度抽样,对代表性不足的类别进行抽样不足,以及使用成本敏感的分类。这允许模型创建者隐含地指定新文档将被正面分类的先验概率,但重要的是(并且不幸地为了我的目的),假设所有新文档的此先验概率相等。
我的模型需要更多的灵活性。由于概念的季节性,在对新文档进行分类时,在确定文档属于T的先验概率时,以及当模型计算属于T的后验概率时,模型必须明确地考虑发布日期。根据文件的特点,应该适当考虑这个先验概率。我正在寻找一种分类器实现,它可以(1)将基于日期的先验概率的复杂回归带入分类器,或者(2)可以使用用户指定的回归函数进行扩展,该函数将日期作为输入并给出先验概率作为输出。
我最熟悉Weka库,但如果它们适合这项工作,我愿意使用其他工具。完成这项任务最直接的方法是什么?
修改(响应Doxav的#2点):
我担心的是,基于日期的属性不应该用于学习关于主题何时适用的规则,而应该仅用于确定主题是否适用的先验概率。这是一个具体的例子:假设主题T是"圣诞节"。与去年12月发表的故事相比,7月发表的故事确实不太可能是圣诞节。但是关于圣诞节的故事是故事的文本内容,而不是它的发表时间。出版日期和"关于圣诞节"仅仅是相关性,因此仅用于计算任意日期关于圣诞节的任意故事的先验概率。相比之下,TF-IDF(故事文本中的某些术语)和"关于圣诞节"之间的关系。是固有的和致使的,因此值得将我们的模型纳入我们关于圣诞故事的意义。
答案 0 :(得分:2)
似乎可以将其简化为典型的ML问题:文本分类+不平衡数据+季节性识别+架构+典型批次/离线与流/在线学习:
文本分类:https://www.youtube.com/watch?v=IY29uC4uem8是Weka文本分类的一个很好的教程,涵盖了不平衡数据问题。
季节性识别:目标是使模型能够学习某些不同时间属性的规则/推理,因此我们应该通过提取最有名的有用属性来简化其工作。这意味着提取典型的日期周期(即周日,月,日,年......),如果可能,还将其与其他更具体的周期或事件(即选举,假期,任何自定义周期或频繁)合并事件)。如果您希望模型学习时间序列/序列,则应创建一些滞后数据(之前发生的属性或最近时间间隔的统计数据)。最好删除日期本身或任何会使模型构造偏向的数据。
我不知道您是否计划将此作为服务提供,但这可以带来很好的灵感:http://fr.slideshare.net/TraianRebedea/autonomous-news-clustering-and-classification-for-an-intelligent-web-portal。
典型的批量/离线与流/在线学习:显然您已经了解Weka,专注于批量/离线学习。我不知道您的数据大小,如果您计划不断处理新数据和重建模型,那么您可以考虑转向流处理和在线学习。因此,您可以转移到非常接近Weka的MOA,但专门用于流分类,或使用最新版Weka(蒸汽处理和新的在线学习者)的新流功能。
更新1;我看了你的评论,我看到了不同的解决方案: