.. | ||
lab2.py | ||
rand_lasso.py | ||
readme.md |
Задание
Выполнить ранжирование признаков с помощью указанных по варианту моделей. Отобразить получившиеся значения\оценки каждого признака каждым методом\моделью и среднюю оценку. Провести анализ получившихся результатов. Определить, какие четыре признака оказались самыми важными по среднему значению.
Вариант 1. Модели:
- Линейная регрессия (LinearRegression)
- Случайное Лассо (RandomizedLasso)
- Рекурсивное сокращение признаков (Recursive Feature Elimination – RFE)
Запуск программы
Файл lab2.py содержит и запускает программу, аргументов и настройки вроде не требует,
Описание программы
Файл rand_lasso.py содержит реализацию RandomizedLasso, которая была 'устарена' со skilearn 0.19 и удалена с 0.21. Код взят с их гита, версии 0.19. Пробовались готовые решения с гита, однако они были либо совсем нерабочими, либо у их результатов не прослеживалось корреляции с остальными моделями, что говорило о их некачественности.
Файл lab2.py содержит непосредственно программу.
Программа создаёт набор данных с 10 признаками для последующего их ранжирования, и обрабатывает тремя моделями по варианту. Программа строит столбчатые диаграммы, которые показывают как распределились оценки важности признаков, и выводит в консоль отсортированные по убыванию важности признаки. Таким образом можно легко определить наиважнейшие признаки.
Сперва в качестве оценщика в модели RFE использовалась линейная регрессия. Однако тогда результаты были идентичны с результатами обычной модели линейной регрессии. Поэтому оценщик был заменён на предложенную в примерах sklearn модель SVR.
Результаты тестирования
По результатам тестирования, можно сказать следующее:
- линейная регрессия и рекурсивное сокращение признаков показывают близкие значения, которые, тем не менее, расходятся в деталях.
- случайное лассо показывает сильно завышенные результаты, однако они более-менее коррелируют с результатами других моделей.
- средние значения позволяют выявить взвешенный результат.
- определить, какая модель ближе к действительности однозначно сказать невозможно из-за разброса.
- какая модель (её реализация) дальше всего от действительности наоборот немного очевидно.
Пример консольных результатов:
Linear regression
[('x4', 1.0), ('x1', 0.73), ('x2', 0.73), ('x5', 0.38), ('x10', 0.05), ('x6', 0.03), ('x9', 0.03), ('x3', 0.01), ('x7', 0.01), ('x8', 0.0)]
Random lasso
[('x1', 1.0), ('x2', 1.0), ('x4', 1.0), ('x5', 1.0), ('x10', 0.97), ('x6', 0.89), ('x9', 0.82), ('x3', 0.55), ('x7', 0.36), ('x8', 0.0)]
RFE
[('x4', 1.0), ('x1', 0.86), ('x2', 0.8), ('x5', 0.44), ('x10', 0.08), ('x6', 0.05), ('x7', 0.04), ('x3', 0.01), ('x8', 0.01), ('x9', 0.0)]
Mean
[('x4', 1.0), ('x1', 0.86), ('x2', 0.84), ('x5', 0.61), ('x10', 0.37), ('x6', 0.32), ('x9', 0.28), ('x3', 0.19), ('x7', 0.14), ('x8', 0.0)]
По данным результатам можно заключить, что наиболее влиятельные признаки по убыванию: x4, x1, x2, x5.