我正在使用 mahout 0.7 进行一些分类。我有一个连续变量的编码器
ContinuousValueEncoder durationPlanEncoder = new ContinuousValueEncoder("duration_plan");
与此编码器相关的功能是天数,范围可以从大约 6 到 16。
我正在使用 OnlineLogisticRegression 模型,并使用编码器对其进行训练:
durationPlanEncoder.addToVector(null, <duration_plan double val>, trainDataVector);
为简单起见(因为我试图在学习 Mahout 的同时理解整个分类),我使用了 2 个变量:1)一个具有 6 个类别的分类变量——其中一个(“dev”)总是预测 =1 类别; 和 2) 这个“duration_plan”变量。
我期望发现的是,当我给分类器测试数据包含类别“dev”和“duration_plan”值时,分类器的准确性将随着我给它的“duration_plan”值越来越接近它训练数据的平均值。然而,这不是我所看到的。相反,随着“duration_plan”的值变为 0.0,分类器的准确性会提高。然而——没有duration_plan=0.0的训练向量!!为什么会这样?
然后我修改了我的 durationPlanEncoder 如下:
durationPlanEncoder.setProbes(2);
并且准确性提高了。当我将探头数量设置为 20 和 200 时,它变得更好了。为什么?setProbes() 在做什么,这是异常情况还是我实际上应该这样做?
我的问题的最后一部分是提到,即使在设置 setProbes(20) 之后,更改测试数据中“duration_plan”的值也不会影响分类器的准确性——我不认为是这样应该。如果我给出的 duration_plan 值甚至不存在于任何训练数据中,因此永远不会与 =1 类相关,我希望分类器将测试样本分类为 =0。正确的?这让我觉得我一定是在编码一些完全错误的东西。任何建议表示赞赏。
Mahout 文档非常稀少。
谢谢。