Как объединить функции TFIDF с другими функциями

У меня классическая проблема НЛП, я должен классифицировать новости как фальшивые или настоящие.

Я создал два набора функций:

A) Частота биграммного члена - обратная частота документа

Б) Приблизительно 20 функций, связанных с каждым документом, полученным с использованием pattern.en (https://www.clips.uantwerpen.be/pages/pattern-en) как субъективность текста, полярность, #stopwords, # глаголы, #subject, отношения, грамматика и т. д.

Как лучше всего объединить функции TFIDF с другими функциями для единого прогноза? Большое спасибо всем.


person Massifox    schedule 01.02.2018    source источник
comment
Пожалуйста, добавьте ваш скрипт там, где я сделал ‹edit›, ваш скрипт-код, как вы его используете. Ссылки на веб-страницу с кодом недостаточно. 1) Это может измениться со временем и 2) слишком много кода там затрагивает другую тему .... и вы хотите, чтобы я выбрал, какой код вы сделали на основе этого и нескольких строк в вашем вопросе .... не произойдет. !   -  person ZF007    schedule 02.02.2018
comment
Извините, возможно, я плохо объяснил. У меня вопрос теоретический, меня не интересует код скрипта.   -  person Massifox    schedule 02.02.2018
comment
.. да ... тогда ваш вопрос будет отмечен .... если вы добавили код, чтобы показать что-то, а затем высказали свою точку зрения и спросили об этом, то это будет принято без проблем (правила SO меняются со временем). Теперь он, вероятно, получит отрицательное голосование ... :-(   -  person ZF007    schedule 02.02.2018
comment
см. здесь: datascience.stackexchange.com/questions/22813/   -  person keramat    schedule 15.03.2018


Ответы (1)


Не уверен, что вы спрашиваете технически, как объединить два объекта в коде или что делать теоретически после этого, поэтому я постараюсь ответить на оба.

Технически ваш TFIDF - это просто матрица, в которой строки являются записями, а столбцы - функциями. Таким образом, для объединения вы можете добавлять свои новые функции в виде столбцов в конец матрицы. Вероятно, ваша матрица является разреженной матрицей (от Scipy), если вы сделали это с помощью sklearn, поэтому вам нужно будет убедиться, что ваши новые функции также являются разреженной матрицей (или сделать другую плотную).

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

person Usherwood    schedule 01.02.2018
comment
Большое спасибо за ответ. Затем добавьте элементы pattern.en к функциям TFIDF (в результате будет получен только один большой массив), и использование одной модели классификации в итоговой матрице, вероятно, не будет хорошей идеей. Лучше всего использовать 2 разных классификатора: классификатор A для функций TFIDF, классификатор B для функций, созданных с помощью pattern.en. Затем я объединяю два предиктора, используя третий классификатор ансамбля как случайный лес, чтобы получить окончательный результат. Верный? - person Massifox; 02.02.2018
comment
Хорошая идея. Я этого не пробовал. У вас есть доказательства, которые часто дают лучшие результаты? Я вижу, что это позволяет избежать проблемы, которую я перечислил выше, однако, распутывая функции, вы теряете связь между плотным и разреженным. Например. может быть, одна биграмма с положительной полярностью является ключевым индикатором реальных новостей, а с отрицательной - фальшивкой, но обе функции по отдельности слабо коррелированы. Один комбинированный классификатор уловил бы это, а разделение - нет. - person Usherwood; 02.02.2018
comment
Я попробую оба способа и дам вам знать. Сейчас пробовал тренировать двух классификаторов. Классификатор на основе TFIDF дал отличные результаты, тогда как классификатор на основе pattern.en дал худший результат по сравнению с предыдущими. Большое вам спасибо за ваши ответы. - person Massifox; 02.02.2018