数据流分类(一)——什么是数据流分类
分类是当前热门的机器学习任务之一,在华为极客大赛的用户属性预测、日常生活中的天气预测、以及点击率预估等各式各样的应用和研究中,随处可见数据分类的踪影,分类的成就什么的这里不会过多讨论,下面步入正题。
为区别与数据流分类,这里将传统分类问题称为静态分类问题。
在静态分类问题中,学习数据集样本可以表示为{x,y},其中x是属性值向量,y是类别标签。在训练数据中,类别y已知,学习算法通过训练数据构造一个分类器模型,通过该模型我们可以给待分类数据预测类别。
而在数据流分类问题中,学习数据集样本表示为{xt,yt},或许你会对此感到疑惑,xt与x有什么区别,是因为加入了时间信息么?然而并不是,t的出现只是意味着研究者将分类问题按时间顺序纵向分解,为什么要分解,这样的分解具有什么意义,这些问题我后面会讨论,现在我们先描述数据流分类问题。
在数据流分类问题中将学习数据集样本表示为{xt,yt},训练数据和待分类数据并不是一次性获得,而是按照时间顺序数据流S的形式连续地到达。在每个时间点(step)t,我们得到训练数据At及待分类数据at,如果仅仅通过At构建模型,你会发现这与上述静态分类过程并无不同,你甚至可以将A1到At的所有训练数据结合起来构造分类器(在一些任务中这样的操作或许很有意义,但这在数据流分类任务中是不被允许的,甚至是没有意义的),一味的将数据累计并不是非常理智的做法。因此在数据流分类中有一个非常重要的限制:仅可使用当前或有限step的训练数据来训练(调整)模型(这里为什么要加调整,会在以后说到)。
可能你会想这两个东西根本还是没区别呀,为什么要搞数据流分类这样一个东西出来,这东西有必要么?下面我们引入数据流分类中最重要的一个东西:概念漂移(concept drift)。如果觉得这个概念很生疏,请不要着急。众所周知,数据由产生数据的源产生(为什么众所周知,因为打的顺手),我们定义这样一个假设,定义产生数据的源为母鸡,这个母鸡就是概念(concept),母鸡生蛋(数据)。今天你家母鸡心情好,生了3个蛋;第二天母鸡心情不好,只生了2个蛋;结果第三天母鸡生病了,勉强生了1个蛋。这里并不是要讨论母鸡生蛋的问题,在这三天过程中,产生蛋的源(母鸡)状态是不同的,那么它生的蛋就有可能不同(请勿想到鸭蛋),母鸡的这种状态的变化可以理解为概念漂移。由于两个状态不同的源产生的数据是有差别的,如过你用源P1产生的数据训练分类器,然后去预测P2产生的数据,那就有可能面临最坏的情况。或许你会觉得源P1与源P2的差别影响并不巨大,仅隔几天的母鸡生的蛋差距不大,那么我们将这个源的时间差距拉大到一年,这只母鸡一岁时生的蛋与两岁时生的蛋应该足够说明问题。联想到现实,如果你用十年前的数据构造分类器来预测下个月的数据与你用一年前的数据构造分类器来预测下个月的数据作对比,其差距是显而易见的。
好比人们审美观念的变化,唐朝的审美和清朝的审美以及今天的审美是不一样的,若是你用唐朝的美女数据训练一个模型来判断今天的美女,人们一定会认为你是脑子出了问题。同时也解释了上面的一个说法,为什么将A1到At的所有训练数据结合起来构造分类器是由可能没有意义的,大量的训练数据在浪费大量时间的同时并不会对分类器性能的提升作出积极影响。而且如果你长时间不对你的模型进行调整的话,你的模型迟早会出问题。虽然很多文献都讨论了数据流分类的必要性,但从笔者角度来看这才是最重要的一点。数据流分类中对概念变化的应对和处理,将会是数据流分类成为未来热点研究方向的核心。
附:然而现实是很残酷的,数据流分类并不能适用于任何问题,如果你已经针对此问题做过一定研究的话,你会发现现实中大部分问题的概念并不会发生很大变化,十年前的分类器依旧可用。