【问题标题】:Logistic regression classifier training count逻辑回归分类器训练计数
【发布时间】:2016-02-01 20:50:17
【问题描述】:

我想训练一个性别分类器,但遇到了一些问题..

大约有 100,000 个标记数据集(25,000 男性。75,000 女性)。 我会将这个数据集分为 local-train(60%) 和 local-test(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) 未来。

这样的话

  1. 如何构建最适合的模型?
  2. 没有办法建立一个模型来保证女性和男性的稳定错误率。
  3. 没有办法建立一个即使女性男性比例发生变化也能保证稳定误差率的模型?
  4. 尝试 #2 是不是毫无意义?

谢谢。

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 MCVE 适用于此。在您发布代码并准确描述问题之前,我们无法有效地帮助您。
  • (1) 您衡量模型可采用性的指标是什么?谁在采用该模型,出于什么目的? (2a) 你对稳定性的定义是什么? (2b) 为什么稳定性很重要? (3) 这在很大程度上取决于您选择的模型类型。
  • 我对糟糕的内容感到抱歉。编辑了一些。
  • (1) 您衡量模型可采用性的指标是什么? ==> [我没有具体的模型选择指标,只是看到错误率。 ] 谁在采用该模型,出于什么目的? ==> [我会手动选择模型,对新注册用户进行性别分类] (2a) 你对稳定性的定义是什么? ==> [如果本地数据性别比例和在线用户性别比例之间的差异可能会产生问题。] (2b) 为什么稳定性很重要? ==> [因为我不知道真实世界的性别,新注册用户的真实世界性别比例]
  • 恐怕在您遇到明确的问题之前,我们真的无法帮助您。如果我们不知道什么定义了这项工作的成功,我们就不能轻易地朝着它前进。

标签: machine-learning statistics computer-vision mahout logistic-regression


【解决方案1】:

您的问题不是关于比率,而是更多关于诊断您的模型是否存在高偏差(欠拟合)或高方差(过拟合)。

第一次运行

您的男女比例为 1:3,男性有 25,000 个标记观察值,女性有 75,000 个标记观察值。

对于您的测试拆分,您的算法似乎对男性有很高的错误 (40%)。找出你的训练拆分运行的错误是什么 (60%)。获得此信息后,请执行以下操作:

案例 1(可能):如果您的男性训练集误差明显低于比您的测试运行(我怀疑是这种情况),您的模型存在高方差(overfitting)。换句话说,您的模型非常适合男性的训练数据,但无法概括新示例(测试数据)。解决此问题的一种方法是简单地添加更多数据。我认为这可能很难,因为您只有 25,000 个男性示例。解决此问题的另一种方法是通过正则化。你可以看到更多关于这个here。简而言之,正则化会因 thetas(参数)太高而惩罚您的成本函数。非常高的 theta 值往往会导致过度拟合。

案例 2:如果您的男性训练集误差也(与测试运行误差接近相同的水平),那么您很可能存在高偏差(欠拟合)问题。解决此问题的一种方法是增加模型的复杂性。也许,添加更多功能,或者使您的模型成为比当前更高阶的多项式函数。但请注意,您不希望您的女性分类因此而过度拟合。

关于您的第二次跑步的评论: 通过减少女性观察值从 75,000 到 25,000 使比例变为 50:50 很少会产生积极的影响。事实上,正如您所经历的那样,它甚至可能是有害的。在这种情况下,玩比率并不是答案。再次,诊断您的模型是否存在高方差或高偏差,并相应地进行。

【讨论】:

  • 非常感谢您的回答。似乎男性有不同的高度偏见。我必须寻求另一种解决方案。 :) 谢谢@Nikhil Bhaskar
  • 不用担心吉魂。如果我的回答有帮助,请点赞:) 我希望你能找到解决男性错误率低的方法
  • 我发现男性普遍分发了太多的应用程序。另一方面,女性倾向于关注最知名的应用程序。所以我离开了逻辑回归并开始使用每个应用程序的女性/男性安装率数据。最终男女错误率均低于 20%。谢谢。
猜你喜欢
  • 2015-01-07
  • 2017-08-10
  • 2015-11-11
  • 2020-02-25
  • 2019-07-11
  • 2012-01-22
  • 2016-01-31
  • 2021-01-09
  • 2020-10-26
相关资源
最近更新 更多