0

Я хочу тренировать гендерный классификатор, но спутать с какой-либо проблемы ..Логистическая регрессия классификатор количества обучения

Есть около 100000 меченого набора данных (25 000 мужчины. 75000 женщин). Я разделим этот набор данных в локальный-поезд (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% 

Как вы можете видеть, предсказывая для женщины очень хорошая, но для мужчины слишком бедна. Я ожидал такое же соотношение ошибок как для женщин, так и для мужчин. Этот классификатор кажется хорошим для женского таргетинга, но бесполезен для мужского таргетинга.

Таким образом, я сделал предварительную выборку для баланса женщин и мужчин равными. теперь я получил 50000 меченных набора данных (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% 

Online немаркированных данные, что модель должны предсказать это в производстве, могут иметь тенденцию к женскому отношению больше чем мужчина (например, №1, 75:25), но в будущем это соотношение может быть изменено примерно как (f: m = 30: 70), (f: m = 80: 20).

В этом случае

  1. как я построить наиболее усыновлен модель?
  2. нет способа построить модель, которая гарантирует стабильное соотношение ошибок как для женщин, так и для мужчин.
  3. нет способа построить модель, которая гарантирует стабильное соотношение ошибок, даже соотношение мужчин и женщин изменилось?
  4. это попытка №2 сделать неэлемент?

спасибо.

+0

Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. Здесь используется MCVE (http://stackoverflow.com/help/mcve). Мы не можем эффективно помочь вам, пока вы не опубликуете свой код и не сможете точно описать проблему. – Prune

+0

(1) Какова ваша метрика для использования модели? Кто принимает модель и для каких целей? (2a) Каково ваше определение стабильности? (2b) Почему важна стабильность? (3) Это очень зависит от выбранного вами типа модели. – Prune

+0

Прошу прощения за плохое содержание. отредактировал некоторые. –

ответ

1

Ваша проблема здесь не в соотношении и больше о диагностике того, страдает ли ваша модель от высокого уклона (недоподготовки) или высокой дисперсии (переобучения).

Для первого запуска:

Ваш Соотношение мужчин и женщин было 1: 3, 25000 меченых наблюдений для мужчин и 75000 меченых наблюдений для женщин.

Похоже, ваш алгоритм имел высокую ошибку для мужчин, для вашего теста (40%). Узнайте, какова ваша ошибка для тренировочного раскола (60%). После того, как вы получите это, действуйте следующим образом:

Случай 1 (вероятно): Если ваша подготовка набор ошибок для мужчин значительно ниже, чем для теста (который я подозреваю, это дело), ​​ваш модель страдает от высокой дисперсии (overfitting). Другими словами, ваша модель хорошо подходит для данных обучения для мужчин, но не позволяет обобщить новые примеры (тестовые данные). Один из способов исправить это - просто добавить больше данных. Я полагаю, это может быть жестким, поскольку у вас есть только 25 000 мужских примеров.Другой способ исправить это можно с помощью регуляризации. Вы можете увидеть немного больше об этом here. В двух словах, регуляризация штрафует вашу функцию стоимости за слишком высокие значения параметров (параметров). Очень высокие значения тета, как правило, приводят к переосмыслению.

Случай 2: Если обучающее множество ошибок для мужчин также высокой (около того же уровня, что и ошибки тестового прогона), вы, скорее всего, есть проблемы высокого смещения (underfitting). Один из способов исправить это, чтобы повысить сложность вашей модели. Возможно, добавьте больше возможностей или сделайте вашу модель полиномиальной функцией более высокого порядка, чем то, что она в настоящее время. Но будьте осторожны, вы не хотите, чтобы ваша женская классификация была переоснащена в результате этого.

Комментарии о вашем втором прогоне: Making соотношение 50:50 по уменьшающихся женских наблюдений от 75 000 до 25 000 будут редко иметь положительное значение. На самом деле это может быть даже вредным, как вы пережили. Игра в соотношении, в данном случае, не является ответом. Еще раз, диагностируйте, страдает ли ваша модель от высокой дисперсии или высокого предвзятости, и действуйте соответственно.

+0

Действительно ценим ответ. Кажется, мужчины сильно различаются. Я должен искать другое решение. :) спасибо @Nikhil Bhaskar –

+0

Не беспокойтесь Jihun. Пожалуйста, поддержите, если мой ответ помог :) Надеюсь, вы найдете решение, чтобы получить низкие мужские ошибки. –

+1

Я обнаружил, что мужчины обычно распространяют слишком много приложений. с другой стороны, женщины склонны фокусировать самые популярные приложения. Поэтому я оставляю logisticregression и начал использовать данные о соотношении между мужчинами и женщинами каждого приложения. и, наконец, получил коэффициент ошибок в 20% как мужчин, так и женщин. Благодарю. –

Смежные вопросы