Это на самом деле много вопросов в одном. Основная причина для нормализации на векторах tf-idf заключается в том, что их точечные продукты (используемые SVM в их решающей функции) легко интерпретируются как cosine similarities, являющиеся основой сравнения векторных документов при поиске информации. Нормализация гарантирует, что
"hello world" -> [1 2]
"hello hello world world" -> [2 4]
стать тем же вектором, так конкатенация документа на себя не меняет границ решения и сходство между этими двумя документами точно один (хотя и с масштабированием сублинейного, sublinear_tf
в конструкторе векторизатора , это уже не так).
Основные причины для масштабирования - avoid numerical instability issues. Нормализация берет на себя большинство из них, потому что функции уже находятся в диапазоне [0, 1]. (Я думаю, что это также связано с регуляризацией, но я не часто использую SVM).
Как вы заметили, chi² «денормализует» векторы объектов, поэтому, чтобы ответить на исходный вопрос: вы можете попробовать перенормировать их. Я сделал это, добавив выбор функции chi² в пример классификации документов scikit-learn, и это помогло некоторым оценщикам и пострадало от других. Вы также можете попробовать сделать chi² на ненормализованных векторах tf-idf (в этом случае я рекомендую вам попробовать установить sublinear_tf
) и после этого сделать либо масштабирование, либо нормализацию.
спасибо @larsmans за отличный ответ. Я буду экспериментировать с вашими предложениями. –