Я занимаюсь классификацией диалектного текста. Проблема в том, что некоторые твиты могут быть отнесены как к диалекту А, так и к диалекту Б, как мне это сделать? Я хочу сделать это, а затем автоматически рассчитать точность, я не хочу делать это вручную. Когда я не классифицирую их одновременно как A и B, это дает мне много неправильно классифицированных текстов.
Однако в обучении они классифицируются не как диалект А и Б, а отдельно.
Воспользуйтесь OneHotEncoding
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# Your target will look similar to
target = ['A', 'A', 'B']
# After OneHotEncoding
[[1, 0],
[1, 0],
[0, 1]]
После обучения этой цели ваша модель будет предсказывать вероятность класса. Вы можете установить порог для классификации прогноза для обоих классов
# Sample output
[[1., 0.],
[0.5, 0.5],
[0.1, 0.9]]
predictions = ['A', 'A and B', 'B']
У меня есть несколько вопросов: 1) кто будет выводить «А и Б»? это я или наивный байесовский классификатор (я использую наивный байесовский классификатор)? 2) Можно ли автоматически использовать accit_score из scikit? потому что в моем тренировочном наборе нет меток «A и B». Как вы думаете, я могу вычислить точность автоматически? 3) Должен ли я посетить каждую метку и проверить, является ли она либо A, либо B, а затем вычислить разницу между их вероятностями и на основе этого сделать вывод? нет ли более автоматизированного способа?
1) Вывод 'A and B'
будет выполнен вручную после расчета порога. Поскольку вы используете классификатор Naive Bayes
в scikit-learn
, взгляните на метод predict_prob()
, он, вероятно, возвращает класс, поэтому вам не нужно использовать OneHotEncoder
2) accuracy_score
нельзя использовать напрямую, так как объединенный класс отсутствует в наборе данных. 3) Да! - Если под «вручную» вы подразумеваете запуск цикла для расчета выходных данных после удержания порога
Вам нужно попробовать разные вещи. Во-первых, вы можете создать новый класс в том случае, когда возможны и A, и B. Итак, теперь ваши данные будут проблемой 3-го класса. Или вы можете попробовать классификацию с несколькими метками. См. это:scikit-learn.org/stable/modules/multiclass.html