Сделай Сам Свою Работу на 5

Алгоритм выявления важных признаков, основанный на TF-IDF





Был разработан алгоритм для выявления важных признаков, основанный на TF-IDF. Входными данными являются корпус, прошедший TF-IDF векторизацию, пороговое значение TF-IDF для выявления незначимых слов в контексте одного документа и порог «бесполезности» слова. Алгоритм включает следующие шаги:

1. Инициализировать словарь для подсчёта количества появлений слов в корпусе.

2. Инициализировать словарь для подсчёта количества исключений слов.

3. Для каждого документа выбрать множество слов, TF-IDF которых меньше порогового. Инкрементировать счётчики для каждого слова из выбранного множества исключённых. Инкрементировать счётчики появлений для каждого слова в документе.

4. Выполнить поэлементное деление счётчика исключений на счётчик появлений – порог «бесполезности».

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


 

  0.005 0.01 0.05 0.1 0.2 0.3 0.4 0.5 0.6
0.10
0.20
0.30
0.40
0.50
0.60
0.70
0.80
0.90
0.99

Таблица 1. Зависимость количества исключаемых признаков от пороговых значений



Было выбрано значение 39687 (пороговые значения 0.8 и 0.3 соответственно)

Алгоритм выявления важных признаков, основанный на деревьях решений

1. Построить лес решающих деревьев.

2. Для каждого дерева выполнить следующее:

1. инициализировать нулевой массив feature_importances длины n_features;

2. в процессе обхода дерева для каждого внутреннего узла, который разделяет множество объектов по признаку, вычислить произведение ошибки разбиения и количества объектов, прошедших через этот узел. Прибавить это произведение к feature_importances[i].

3. Вычислить среднее арифметическое векторов feature_importances. Следующим шагом следует расположить номера компонент вектора в порядке убывания соответствующих им значений.

Для построения леса решающих деревьев был использован класс ExtraTreeClassifier из библиотеки scikit-learn.




 

Преобразование классов

Для выполнения отбора классов было сделано следующее:

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

- Были исключены классы "Чёрная дыра" и "Я пиарюсь" как не несущие информации о содержании статьи, а также классы, названия которых начинаются с "Блог компании" по причине недостаточной частотности.

- Из-за недостаточного количества классов, соответствующих каждой из статей (1-2 для большинства) было решено дополнительно использовать тэги в качестве классов. Из-за их избыточного количества были выбраны самые популярные.

- Экспериментально было выяснено, что встречаемость класса должна превышать 60.

Зависимость количества классов от уровня встречаемости

Зависимость количества классов от уровня встречаемости

- Было выявлено, что некоторые пары (тройки) классов имеют одинаковое значение. Поэтому было решено их объединить. Для этого с помощью алгоритма FP-Growth были определены частотные наборы меток. Оказалось, что значительная их часть действительно подлежала объединению.

- Кроме этого были найдены и объединены пары классов с одинаковым названием на разных языках. Подклассы с недостаточным уровнем встречаемости были включены в соответствующие более общие классы. На этом этапе вручную было проанализировано около 3000 меток.

 


 

Вывод

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

Были получены навыки практической работы и развертывания распределённых систем обработки и хранения информации на примере решения задачи мультиклассовой классификации.



Разработана реализация классификатора Naive Bayes для решения задачи многоклассовой классификации. За основу был взят алгоритм Multinomial Naive Bayes из библиотеки MLlib. Текущая реализация отличается поддержкой разреженных структур данных, что позволяет при тех же вычислительных ресурсах строить модели на обучающих выборках большего размера.

Список литературы

1. http://habrahabr.ru/info/about/

2. https://htmlagilitypack.codeplex.com/

3. https://msdn.microsoft.com/ru-ru/library/dd460717%28v=vs.110%29.aspx

4. https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html

5. http://microsin.net/adminstuff/xnix/soft-hard-links.html

6. http://hadoop.apache.org/core/docs/current/api/

7. http://hadoop.apache.org/hdfs/version_control.html

8. http://www.infoq.com/articles/apache-spark-introduction

9. https://en.wikipedia.org/wiki/Directed_acyclic_graph

10. http://scikit-learn.org/stable/modules/naive_bayes.html

11. http://bazhenov.me/blog/2012/06/11/naive-bayes.html

12. https://en.wikipedia.org/wiki/Arithmetic_underflow

13. https://en.wikipedia.org/wiki/Additive_smoothing

14. http://www.nltk.org/

15. http://snowball.tartarus.org/algorithms/russian/stemmer.html

16. http://snowball.tartarus.org/algorithms/porter/stemmer.html

17. https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx

18. https://ru.wikipedia.org/wiki/TF-IDF

19. http://spark.apache.org/docs/latest/mllib-feature-extraction.html

20. Tom White; Hadoop: The Definitive Guide, 4th Edition,O'Reilly Media, 2015

21. H. Karau, A. Konwinski, P. Wendell, M. Zaharia; Learning Spark: Lightning-Fast Big Data Analysis

22. S. Ryza, U. Laserson, S. Owen, J. Wills; Advanced Analytics with Spark 1st Edition

23. Jacob Perkins; Python 3 Text Processing with NLTK 3 Cookbook, 2015

 


 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.