我想要训练一个性别分类器但是却遇到了一些问题..
大约有100,000个标记数据集(25,000名男性,75,000名女性)。 我将这个数据集分为本地列车(60%)和本地测试(40%)
List<LabeledPoint> males = getMales(); // <-- 25,000
List<LabeledPoint> females = getFemales(); // <-- 75,000
List<LabeledPoint> local = males.addAll(females); // <-- union
List[] splits = randomSplit(local, new double[] {0.6, 0.4});
List trainingData = splits[0];
List testData = splits[1];
LogisticRegressionModel model = new LogisticRegressionWithLBFGS()
.setNumClasses(10)
.run(trainingData);
List<LabeledPoint> predictedList = model.predict(testData);
for(LabeledPoint predict : predictedList){
if(predict.label() =="f" && predict.predictLabel()!="f"){
fErrorCount ++;
}
if(predict.label() =="m" && predict.predictLabel()!="m"){
mErrorCount ++;
}
}
本地测试数据的预测结果是
#1 (all number is based on item count)
Total prediction :36152 , error : 6619, error ratio 0.18%
F :27747.0 , error : 2916.0, error ratio 0.10%
M :8405.0 , error : 3703.0, error ratio 0.44%
正如你所看到的,预测女性是非常好的,但男性太穷了。 我预计女性和男性的错误率相同。 这个分类器看起来很适合女性定位,但对于男性定位无用。
所以我做了一个预先取样来平衡女性和男性是平等的。 现在我有50,000个带标签的数据集(25,000名男性,25,000名女性)
List<LabeledPoint> males = getMales(); // <-- 25,000
List<LabeledPoint> females = getfemales().sublist(0,25000); // <-- hard resized.
// from here is same.
预测结果是
#2
Total prediciton :16814 , error : 4369 - 0.259842987986202%
F :8407.0 , error : 2225.0 - 0.2646604020459141%
M :8407.0 , error : 2144.0 - 0.25502557392648983%
在线未标记的数据,哪个模型应该在生产中预测这一点,可能倾向于女性比例大于男性(如#1,75:25),但这个比例可能会改变(f:m = 30:70) ,(f:m = 80:20)将来。
在那种情况下
感谢。
答案 0 :(得分:1)
您的问题不是关于比率,而是关于诊断您的模型是否存在高偏差(欠拟合)或高差异(过度拟合)的问题。
第一次运行:
您的男性:女性比例为1:3,男性观察标记为25,000,女性标记为75,000。
似乎您的算法对于男性而言具有较高的错误,对于您的测试分割(40%)。找出您的训练分组错误(60%)。完成后,请按以下步骤操作:
案例1 (可能):如果您的男性训练集错误显着低而不是您的测试运行(我怀疑是这种情况),模型存在高差异(过度拟合)。换句话说,您的模型很适合男性的训练数据,但未能概括为新的例子(测试数据)。解决此问题的一种方法是简单地添加更多数据。我认为这可能很难,因为你只有25,000个男性例子。另一种解决方法是通过正规化。您可以看到有关此here的更多信息。简而言之,正规化会使您的成本函数受到过高的过高(参数)的影响。非常高的θ值往往会导致过度拟合。
案例2 :如果您的男性训练集错误也高(接近与测试运行错误相同的水平),则您很可能具有较高的偏差(不合适的)问题。解决此问题的一种方法是增加模型的复杂性。也许,添加更多功能,或使您的模型成为比目前更高阶的多项式函数。但要小心,你不希望你的女性分类因此而过度拟合。
关于第二次运行的评论: 通过减少使女性观察从75,000到25,000的比例为50:50将很少产生积极的差异。事实上,正如你所经历的那样,它甚至可能是有害的。在这种情况下,玩比率不是答案。再一次,诊断您的模型是否存在高差异或高偏差,并相应地进行。