逻辑回归分类器训练次数
Logistic regression classifier training count
我想训练一个性别分类器,但遇到了一些问题..
大约有 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) 在未来。
那样的话
- 我如何构建一个最容易采用的模型?
- 没有办法建立一个模型来保证女性和男性的错误率稳定。
- 有没有办法建立一个即使男女比例发生变化也能保证误差率稳定的模型?
- 尝试 #2 是胡说八道吗?
谢谢。
这里你的问题不是关于比率,而是关于诊断你的模型是否存在高偏差(欠拟合)或高方差(过度拟合)。
你的第一个 运行:
您的 male:female 比率是 1:3,男性有 25,000 个标记观察值,女性有 75,000 个标记观察值。
对于您的测试分组 (40%),您的算法对男性的错误率似乎很高。找出你的训练分组 运行 (60%) 的错误是什么。一旦你得到这个,按照以下步骤进行:
案例 1(可能):如果您的男性训练集误差明显低于您的测试运行(我怀疑是这种情况),您的模型存在高方差(过度拟合)。换句话说,您的模型非常适合男性的训练数据,但无法概括新示例(测试数据)。解决此问题的一种方法是简单地添加更多数据。我认为这可能很难,因为您只有 25,000 个男性示例。解决此问题的另一种方法是通过 正则化 。你可以看到更多关于这个 here 的信息。简而言之,正则化会因为太高的 thetas(参数)而惩罚你的成本函数。非常高的 theta 值往往会导致过度拟合。
情况2:如果你的男性训练集误差也高(与测试接近同一水平运行 错误),你很可能有高偏差(欠拟合)问题。解决此问题的一种方法是增加模型的复杂性。也许,添加更多功能,或者使您的模型成为比当前模型更高阶的多项式函数。但要小心,你不希望你的女性分类因此而过度拟合。
关于你第二个的评论运行:
通过 将女性观察值从 75,000 减少到 25,000 来使比率 50:50 很少会产生积极的影响。事实上,正如您所经历的,它甚至可能是有害的。在这种情况下,玩弄比率并不是答案。再次诊断您的模型是否存在高方差或高偏差,并据此进行处理。
我想训练一个性别分类器,但遇到了一些问题..
大约有 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) 在未来。
那样的话
- 我如何构建一个最容易采用的模型?
- 没有办法建立一个模型来保证女性和男性的错误率稳定。
- 有没有办法建立一个即使男女比例发生变化也能保证误差率稳定的模型?
- 尝试 #2 是胡说八道吗?
谢谢。
这里你的问题不是关于比率,而是关于诊断你的模型是否存在高偏差(欠拟合)或高方差(过度拟合)。
你的第一个 运行:
您的 male:female 比率是 1:3,男性有 25,000 个标记观察值,女性有 75,000 个标记观察值。
对于您的测试分组 (40%),您的算法对男性的错误率似乎很高。找出你的训练分组 运行 (60%) 的错误是什么。一旦你得到这个,按照以下步骤进行:
案例 1(可能):如果您的男性训练集误差明显低于您的测试运行(我怀疑是这种情况),您的模型存在高方差(过度拟合)。换句话说,您的模型非常适合男性的训练数据,但无法概括新示例(测试数据)。解决此问题的一种方法是简单地添加更多数据。我认为这可能很难,因为您只有 25,000 个男性示例。解决此问题的另一种方法是通过 正则化 。你可以看到更多关于这个 here 的信息。简而言之,正则化会因为太高的 thetas(参数)而惩罚你的成本函数。非常高的 theta 值往往会导致过度拟合。
情况2:如果你的男性训练集误差也高(与测试接近同一水平运行 错误),你很可能有高偏差(欠拟合)问题。解决此问题的一种方法是增加模型的复杂性。也许,添加更多功能,或者使您的模型成为比当前模型更高阶的多项式函数。但要小心,你不希望你的女性分类因此而过度拟合。
关于你第二个的评论运行: 通过 将女性观察值从 75,000 减少到 25,000 来使比率 50:50 很少会产生积极的影响。事实上,正如您所经历的,它甚至可能是有害的。在这种情况下,玩弄比率并不是答案。再次诊断您的模型是否存在高方差或高偏差,并据此进行处理。