使用朴素贝叶斯分类器进行在线学习

时间:2011-11-11 15:51:04

标签: statistics machine-learning classification bayesian

我正在尝试预测传入网络数据包的到达间隔时间。我测量网络数据包的到达间隔时间并以二进制特征的形式表示这些数据: xi = 0,1,1,1,0,...其中 xi break-even-time ,则em> = 0,否则为1。数据必须映射到两个可能的类 C = {0,1} ,其中 C = 0 表示到达间隔时间1表示到达间隔时间。因为我想在在线特征中实现分类器,所以只要我观察到特征向量 xi = 0,1,1,0 ...,我就会计算MAP类。由于我没有事先估计条件和先验概率,我将它们初始化如下:

p(x=0|c=0)=p(x=1|c=0)=p(x=0|c=1)=p(x=1|c=1)=0.5
p(c=0)=p(c=1)=0.5

对于每个特征向量(x1 = m1,x2 = m2,...,xn = mn),当我输出类 C 时,我更新条件和先验概率如下:

p(xi=mi|y=c)=a+(1-a)*p(p(xi=mi|c)
p(y=c)=b+(1-b)*p(y=c)

问题是,我总是得到一个有偏见的预测。由于 long 到达间隔时间的数量相对小于 short short 始终保持不变高于。有没有办法改善这个?或者我做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

由于您有很长的时间序列,因此最佳路径可能是考虑多个先前的值。这样做的标准方法是使用时间窗口,即将长矢量Xi分割成恒定长度的重叠片段,将最后一个值视为类,并将它们用作训练集。这也可以通过在线方式对流数据进行,通过在新数据到达时逐步更新NB模型。

请注意,使用此方法,其他回归算法可能最终成为比NB更好的选择。

Weka(版本3.7.3及更高版本)有一个非常好的dedicated tool支持时间序列分析。或者,MOA也基于Weka,并支持流数据建模。

编辑:从二进制特征转移到实际值(可能是规范化的),并应用分类后的阈值也可能是个好主意。这可能会为回归模型(NB或其他)提供更多信息,从而提高准确性。