多项式朴素贝叶斯分类器滑动窗口(MOA实现,weka)

时间:2015-06-04 12:46:02

标签: weka text-classification multinomial naivebayes moa

我遇到以下问题: 我试图在滑动窗口中实现MNB分类器。我实现了一个窗口大小的LinkedList,并存储了必须在其中考虑的流的所有实例。当新实例到达时,不再适合窗口,第一个实例将被删除。为了删除相应的单词计数,我实现了以下方法,它基本上与moa刚刚向后的trainOnInstanceImpl()相同:

private void removeInstance(Instance instToRemove) {

    int classIndex = instToRemove.classIndex();
    int classValue = (int) instToRemove.value(classIndex);

    double w = instToRemove.weight();
    m_probOfClass[classValue] -= w;

    m_classTotals[classValue] -= w * totalSize(instToRemove);
    double total = m_classTotals[classValue];

    for (int i = 0; i < instToRemove.numValues(); i++) {
        int index = instToRemove.index(i); 

        if (index != classIndex && !instToRemove.isMissing(i)) {

            double laplaceCorrection = 0.0;
            if (m_wordTotalForClass[classValue].getValue(index) == w*instToRemove.valueSparse(i) + this.laplaceCorrectionOption.getValue()) {
                laplaceCorrection = this.laplaceCorrectionOption.getValue(); //1.0

            }

            m_wordTotalForClass[classValue].addToValue(index,
                    (-1)*(w * instToRemove.valueSparse(i) + laplaceCorrection));
        }
    }

现在,如果我输出m_wordTotalForClass [classValue],我会从具有3000个实例2000-3000的实例获得不同的经典MNB结果,如滑动窗口MNB(见上文),窗口大小为1000。唯一的区别是它在某些点输出1而不是0,但并非总是如此。我想这与拉普拉斯校正有关。也许在if语句中舍入有问题: if(m_wordTotalForClass [classValue] .getValue(index)== w * instToRemove.valueSparse(i)+ this.laplaceCorrectionOption.getValue()) 这样我们就不会总是进入设置了拉普拉斯值的部分。

有人有想法吗? 我有点疯狂,因为我一直在思考过去三天可能出现的问题。任何帮助将不胜感激!

0 个答案:

没有答案