В этой статье представлено практическое введение в машинное обучение для начинающих. Это будет статья в стиле упражнений, в которой мы собираемся построить модель классификатора для классификации набора данных, и мы будем проходить сквозной процесс, такой как загрузка набора данных, очистка набора данных, выполнение разработки функций на набор данных, создать разделение обучения/тестирования, выполнить перекрестную проверку нескольких моделей, выбрать лучшую модель, подобрать лучшую модель и выполнить прогнозы с использованием этой модели.
Используемый набор данных:
Используемые алгоритмы:
- https://scikit-learn.org/stable/modules/tree.html#classification
- https://scikit-learn.org/stable/modules/svm.html#classification
Загрузить данные:
Первым шагом к построению модели машинного обучения является загрузка данных. Мы используем эти данные для обучения модели, а затем затем тестируем модель и измеряем производительность модели.
Как упоминалось выше, я скачал набор данных с kaggle. Этот набор данных содержит данные о пингвинах архипелага Палмера (Антарктида). Мы будем использовать эти данные для классификации видов пингвинов с учетом их особенностей.
Здесь мы читаем набор данных в кадр данных pandas, а ниже приведен образец кадра данных.
Очистить данные:
Как видно из приведенного выше кадра данных pandas, наш набор данных содержит некоторые значения NaN. Нам нужно очистить его перед обучением модели. Здесь я заполняю нулевые значения для столбцов медианой значений в соответствующих столбцах после их группировки по острову, к которому они принадлежат.
Я также использую random.choice() для случайного выбора значений из списка допустимых значений для столбцов, которые не могут использовать медиану для значений NaN.
Выполните проектирование функций:
Теперь, когда очистка завершена, давайте выполним разработку некоторых функций для наших функций. В нашем примере мы могли бы разделить значения столбцов (функций) на 3 категории (для простоты), чтобы лучше представить отношения и помочь повысить точность и актуальность модели для невидимых данных.
Следующий код pandas соответствующим образом классифицирует значения в столбце простым способом, а ниже кода приведен снимок экрана кадра данных после завершения категоризации.
Существует так много других вещей, которые нужно разработать с помощью функций, и многие другие вещи можно сделать с помощью функций для повышения точности и релевантности модели. Однако, чтобы сделать это упражнение простым, я сделал самую простую разработку функций выше.
Подготовьте поезд/тестовый сплит:
После очистки набора данных и выполнения разработки функций в наборе данных мы готовы разделить набор данных на обучающую часть и часть тестирования (проверки). Мы будем обучать модель с помощью обучающей части, а затем проверять обученную модель на тестовой части набора данных, чтобы увидеть, насколько хороша модель.
Мы будем использовать KFold для определения разделения поезд/тест. KFold разделит наборы данных на k последовательных сгибов, и каждый сгиб будет проверен один раз, а данные в оставшихся k-1 сгибах будут использоваться для обучения.
Перекрестная проверка различных алгоритмов:
Давайте попробуем несколько различных алгоритмов классификации, предоставленных scikit-learn, и используем перекрестную проверку, чтобы измерить их точность в наборе данных проверки. Стратегия разделения обучения/тестирования KFold будет введена в процесс перекрестной проверки.
В приведенном ниже примере, используя cross_val_score, мы сравним алгоритмы DecisionTreeClassifier и Support Vector Classification, предоставляемые библиотекой scikit-learn.
Предсказывать:
Прогнозирование — это процесс, в котором мы используем нашу обученную модель для ответа на невидимые данные.
В нашем случае из предыдущего шага модель, которую мы обучили с использованием алгоритма DecisionTreeClassifier, имела лучшие показатели точности по сравнению с моделями, обученными с использованием алгоритмов SVC. Итак, мы продолжим, построим нашу модель с использованием алгоритма DecisionTreeClassifier и подгоним данные — на этот раз без разделения набора данных. Следуя подгонке, мы можем использовать модель, чтобы предсказать виды пингвинов по невидимым данным.
Ниже я создаю кадр данных, для которого я хочу предсказать виды пингвинов, и передаю его методу predict(), вызываемому в модели. Скриншот под кодом содержит вывод прогноза.
Вот и все! Я надеюсь, что эта статья предоставила обзор высокого уровня для начала работы с машинным обучением и процессом, связанным с построением модели и ее использованием для прогнозов.
Это становится интересным, когда размер набора данных становится больше (больше, чем может вместить ОЗУ) или когда модель становится более сложной и исчерпывающей. В таких случаях нам необходимо разрабатывать с учетом масштабируемости, и существуют такие фреймворки, как Dask, которые помогают управлять вычислительными кластерами и распределять данные и обучать модели между рабочими в кластере.