Роль random_state в train_test_split и классификаторах
На основе этого ответа: Случайное состояние (псевдослучайное число) в Scikit learn, если я использую то же целое число (скажем 42), что и random_state , то каждый раз, когда он выполняет разделение на обучающий тест, он должен давать одно и то же разбиение (т.е. одни и те же экземпляры данных в обучении во время каждого запуска и то же самое для тест)
Предположим, у меня есть такой код. В этом случае я меняю test_size в каждом цикле. Как это повлияет на то, что делает random_state ? Будет ли он перемешивать все в случайном порядке ИЛИ сохранять как можно больше строк и сдвигать несколько строк от поезда к тесту (или наоборот) в соответствии с размером теста?
Кроме того, random_state является параметром для некоторых классификаторов, таких как sklearn.svm.SVC и sklearn.tree.DecisionTreeClassifier . У меня такой код:
Что именно здесь делает random_state ? Потому что он используется при определении классификатора. Данных пока нет. Я получил следующее от http://scikit-learn.org /stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html:
Если int, random_state — это начальное число, используемое генератором случайных чисел; Если экземпляр RandomState, random_state является генератором случайных чисел; Если None, генератор случайных чисел — это экземпляр RandomState, используемый np.random.
Предположим, следующая строка выполняется несколько раз для каждого из нескольких размеров теста:
Если я оставлю random_state=int(test_size*100) , означает ли это, что для каждого размера теста результаты будут одинаковыми? (а для разных размеров теста они будут разные?)
(Здесь tree.DecisionTreeClassifier можно заменить другими классификаторами, которые также используют random_state , например sklearn.svm.SVC . Я предполагаю, что все классификаторы используют random_state аналогичным образом?)
2 ответа
1: Поскольку вы меняете размер теста, случайное состояние не повлияет на выбранные строки между размерами теста, и это не обязательно будет желательным поведением, поскольку вы просто пытаетесь получить оценки на основе по разным размерам выборок. Это будет делать за вас, так это позволит вам сравнивать модели, использующие входные данные, разделенные по одному и тому же случайному состоянию. Наборы тестов будут одинаковыми от одного цикла к другому. Позволяет правильно сравнивать характеристики модели на одних и тех же образцах.
2: Для таких моделей, как классификаторы дерева решений и многих других, есть параметры инициализации, которые задаются случайным образом. Случайное состояние здесь гарантирует, что эти параметры устанавливаются одинаковыми от одного запуска к другому, создавая воспроизводимое поведение.
3: Если размер теста отличается, и вы умножаете его на 100, вы будете создавать разные случайные состояния для каждого набора тестов. Но от одного полного прогона до следующего он будет воспроизводить воспроизводимое поведение. Вы можете так же легко установить здесь статическое значение.
Не все модели используют случайное состояние таким же образом, поскольку каждая из них имеет разные параметры, которые они устанавливают случайным образом. Для RandomForest он выбирает случайные функции . для нейронных сетей инициализирует случайные веса . и т. Д.
Вы можете проверить это с помощью кода:
Это дает результат 70, указывая, что он только что переместил элементы из тестового набора в обучающий набор.
train_test_split создает случайную перестановку строк и выбирает на основе первых n строк этой перестановки, где n зависит от размера теста.
Random state 42 что это
Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.
What can I do to prevent this in the future?
If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.
If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.
Another way to prevent getting this page in the future is to use Privacy Pass. You may need to download version 2.0 now from the Chrome Web Store.
Cloudflare Ray ID: 71a992bcaf9e9128 • Your IP : 82.102.23.104 • Performance & security by Cloudflare
Мультиклассификация экстремально коротких текстов классическими методами машинного обучения
В мире коммерции существует множество применений классификации текста. Например, новости часто сгруппированы по темам, контент или товары часто помечаются по категориям, а пользователей можно разделить на группы, в зависимости от того, как они отзываются о товаре в Интернете. Однако большинство статей в сети описывают бинарную классификацию, но чаще реальные задачи оказываются сложнее. В этой статье мы будем проводить мультиклассовую классификацию обращений в службу банка.

В ходе работы служб банка накапливается огромное количество текстовой информации, которую необходимо анализировать и структурировать. В нашем случае классифицировать необходимо обращения. Категории заданы заранее: “Сбой/ошибка в работе приложения”, “Неторговые операции”, “Негатив”, “Налогообложение”, “Отчётность брокера”, “Обновление анкетных данных”, “ИИС”, “Торговые операции”, “Передача выплат инвестору”, “Выбор опций”, “СМС-информирование”, “Отмена заявки”.
Для начала считаем данные:

Таким образом, исходные данные представлены 5 столбцами.
Очевидно, что сначала нужно выполнить нормализацию текста. Для этого приведем весь текст в один регистр, удалим лишние пробелы и знаки препинания, а также стоп-слова. Под стоп-словом подразумевается слово, которое не несет какой-либо смысловой нагрузки и может одинаково часто встречаться во всех категориях.

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

Самое время окунуться в специфику данных. Дело в том, что наши тексты очень короткие, и, помимо этого, пользователи часто могут писать самые разные общие фразы, которые никак не относятся к тематике обращений, например: «Добрый день», «С новым годом» и т.д. Поэтому мы игнорируем тексты, где после удаления стоп-слов остается только 2 токена. Предполагается, что таким образом наши категории станут наиболее выраженными.
Далее – обучение. В статье будет рассмотрено 2 классических метода: градиентный бустинг от CatBoost и логистическая регрессия.
Разбиваем данные на обучающую и тест выборку.
Обучение логистической регрессии.

Используется CountVectorizer на ngram с analyzer = char. Именно такой подход дал наилучшую точность на маленьких текстах. В зависимости от данных значение ngram можно корректировать. Целевая метрика – F1.
Создаем функцию с инициализацией и обучением модели.
Модель будет обучаться «на процессоре», валидационная метрика – F1. В параметрах обучения задаем валидационный пул и использование модели с наибольшим качеством.
Формируем обучающий и валидационный пулы.
Стоит отметить, что обучение CatBoost с использованием пулов, как правило дает лучшее качество.

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