Создание DataSet'a

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


В этой статье мы разберём, как создать DataSet на основе имеющегося .csv файла. Я считаю,что просто .csv файл нельзя назвать датасетом, потому что датасет является уже готовыми к использованию выборками данных(отчасти это неверно, так что тут сугубо моё личное мнение).

В Excel он выглядит так:

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

Загрузка

Для чтения .csv файла отлично подходит функция read_csv из модуля Pandas. Также импортируем NumPy, он нам в дальнейшем пригодится.

Я указал свой путь к файлу, вы указываете тот путь, по которому сохранили этот файл.(его можно найти в https://t.me/notes_of_yound_data_scientist)

Результатом выполнения данного фрагмента кода есть:

Не обращайте внимания на warning, он возникает из-за того, что в одном столбце присутствуют значения разных типов, позже мы это исправим.

Пролистываем вниз и видим, что для последних столбцов все числовые значения равняются нулю. Возможно создатель файла просто не заполнил эти ячейки, а мы же их просто откинем. Воспользуемся срезом:

Так мы отбираем 120000 строк, которые полностью нам подходят.

Загрузку файла мы совершили, теперь будем с ним работать.

Работа со значениями

Давайте узнаем, значения каких полей у нас есть:

Отлично. Немного посмотрев, что хранится во всех столбцах, можем заметить, что некоторые из них не помогут нам обучить систему. Это имя сотрудника, заметки, порядковый номер в таблице, статус и город, в котором работает сотрудник(все они из Сан-Франциско). Тогда давайте очистим нашу "таблицу" от этих столбцов:

Немного отвлечемся. Переменная file является экземпляром класса DataFrame - класса из библиотеки Pandas, где и хранятся все данные. В дальнейшем мы будем пользоваться методами именно этого класса.

Теперь к делу. Мы используем метод .drop(), где указываем список названий столбцов, которые надо удалить, ось - 1, т.к. удаляем мы столбцы и игнорирование ошибок при удалении.

Отлично. Из прошлой статьи мы знаем, что нам нужны следующие поля:

target_names - имена "целей" прогнозирования
target - правильные значения для обучения
DESCR - описание датасета, сегодня мы оставим его пустым.
data - выборки данных
feature_names - имена признаков

Также нам нужно привести все значения к одному типу. Такие у нас остались только в столбце Benefit, а сами эти значения NaN. Для простоты заменим их на нули.

Метод .fillna() заменяет NaN на указанное значение.

После того, как все значения в некотором столбце имеют один тип, начинаем формировать "тело" датасета.

Сначала выберем target и feature_names.

Т.к. определять мы будем именно должность, то значениями ответов будут сами должности. Далее откидываем места работы для дальнейшего упрощения работы. Имена признаков узнаем с помощью такой конструкции, которая возвращает list с названиями столбцов.

Достаём значения признаков:

data должен принадлежать классу np.array, поскольку только с ним работает модель обучения.

Теперь перед нами встаёт вопрос: как представить места работы в числовом виде? Очень просто: закодировать. В ML это имеет своё название: "категориальные признаки". Мы могли бы воспользоваться методом DataFrame, однако давайте всё сделаем "руками":

Отлично. Из 120000 выборок у нас 1341 профессия. В среднем это 89 сотрудников, имеющих одинаковую профессию. Также пишем название "цели":

Оформление

Для того, чтобы облегчить свою работу с DataSet'ом, для хранения значений я выбрал класс NamedTuple из модуля стандартной библиотеки collections.

Конструктор класса довольно прост - мы задаем имя "класса", и в следующей строке через пробел его поля. А дальше задаем им значения. Хотя, согласно PEP8, имена переменных пишутся с маленькой буквы, имена переменных, которые ссылаются на объект, который является экземпляром класса NamedTuple задаются как класс(с заглавной буквы в CamelCase).

Вот и всё, датасет готов!

Предлагаю загрузить его куда-то с помощью модуля pickle:

Примечание: согласно РЕР8 модули стандартной библиотеки импортируются в начале файла. Я сделал иначе только для того, чтобы не "раскрывать все карты".

Опять же, путь к файлу Вы указываете свой.

Вот и всё! Дальше мы создадим модель обучения на основе алгоритма "дерево".

Подписывайтесь на телеграмм канал, там будем много интересного.

Весь код из статьи здесь.

Также рекомендую прочитать статью Понятие машинного обучения и его основные термины

Также рекомендую ознакомиться с другими материалами посвященными Машинному обучению и языку программирования Python. Поставь лайк и поделись статьей с друзьями — это лучший способ помочь развитию сообщества.


Источник: m.vk.com

Комментарии: