我想训练一个性别分类器,但遇到了一些问题…
我有一个大约100,000个标记的数据集(25,000个男性,75,000个女性)。我将这个数据集分为本地训练集(60%)和本地测试集(40%)。
List<LabeledPoint> males = getMales(); // <-- 25,000List<LabeledPoint> females = getFemales(); // <-- 75,000List<LabeledPoint> local = males.addAll(females); // <-- unionList[] 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 (所有数字基于项目计数)总预测数 :36152 , 错误数 : 6619, 错误率 0.18% 女性 :27747.0 , 错误数 : 2916.0, 错误率 0.10% 男性 :8405.0 , 错误数 : 3703.0, 错误率 0.44%
如你所见,预测女性的效果很好,但预测男性的效果很差。我希望女性的错误率和男性的错误率相同。这个分类器似乎对女性目标群体效果很好,但对男性目标群体几乎无用。
因此,我进行了一个预采样来平衡男女比例,现在我得到了50,000个标记的数据集(25,000个男性,25,000个女性)
List<LabeledPoint> males = getMales(); // <-- 25,000List<LabeledPoint> females = getfemales().sublist(0,25000); // <-- 强制调整大小。// 从这里开始与之前相同。
预测结果是
#2总预测数 :16814 , 错误数 : 4369 - 0.259842987986202% 女性 :8407.0 , 错误数 : 2225.0 - 0.2646604020459141% 男性 :8407.0 , 错误数 : 2144.0 - 0.25502557392648983%
在生产环境中,模型需要预测的在线未标记数据,可能会倾向于女性比例大于男性(如#1,75:25),但未来这个比例可能会变化,例如(女性:男性=30:70),(女性:男性=80:20)。
在这种情况下
- 我该如何构建一个最适应的模型?
- 是否没有办法构建一个能保证男女错误率稳定的模型?
- 是否没有办法构建一个即使男女比例变化也能保证错误率稳定的模型?
- 尝试#2是否毫无意义?
谢谢。
回答:
你的问题更多的是关于诊断你的模型是否存在高偏差(欠拟合)或高方差(过拟合),而不是比例问题。
关于你的第一次运行:
你的男性与女性比例是1:3,男性有25,000个标记的观察值,女性有75,000个标记的观察值。
看起来你的算法在男性上的错误率很高,针对你的测试集(40%)。找出你在训练集运行(60%)上的错误率。一旦你得到这个数据,按照以下步骤进行:
情况1(可能的):如果你的男性训练集错误率显著低于测试运行的错误率(我认为这是情况),你的模型存在高方差(过拟合)。换句话说,你的模型对男性的训练数据拟合得很好,但无法泛化到新的例子(测试数据)。解决这个问题的一种方法是简单地增加更多数据。我假设这可能很难,因为你只有25,000个男性例子。另一种解决方法是通过正则化。你可以在这里了解更多关于这个内容:这里。简而言之,正则化会因为你的成本函数中有过高的theta(参数)值而对其进行惩罚。非常高的theta值往往会导致过拟合。
情况2:如果你的男性训练集错误率也很高(接近测试运行的错误率),你很可能存在高偏差(欠拟合)问题。解决这个问题的一种方法是增加模型的复杂性。或许,可以添加更多特征,或者使你的模型成为比当前更高阶的多项式函数。但要小心,你不希望因此而使女性的分类结果过拟合。
关于你的第二次运行的评论:通过减少女性观察值从75,000到25,000来使比例达到50:50,通常不会带来积极的变化。事实上,这甚至可能是有害的,正如你所经历的。在这种情况下,调整比例不是答案。再次,诊断你的模型是否存在高方差或高偏差,并相应地进行处理。