Для всех, кто хочет стать инженером по машинному обучению (или учеником), очевидна следующая истина: вы тратите большую часть своего времени на предварительную обработку данных. В конце концов, кодировать архитектуру просто после нескольких тренировок, а благодаря современной библиотеке, такой как Pytorch и Keras, вы можете легко кодировать сложную архитектуру без особых усилий. Однако предварительная обработка этих изображений или CSV-документов в формате данных, который вы хотите использовать, всегда проблематична. В этой статье представлен простой способ предварительной обработки CSV-документа в соответствии с вашими потребностями.
Предварительная обработка перед… Предварительной обработкой
Прежде всего, как загрузить документ csv? Один из способов — использовать pandas
. Например, следующий код загружает CSV-документ по указанному вами пути:
Далее, давайте посмотрим на набор данных, который у нас есть:
Это набор данных о жилье, который предоставляет релевантную информацию, чтобы люди могли использовать ее для обучения алгоритма прогнозирования средней стоимости дома на основе всей другой информации (обратите внимание на тот факт, что наша метка находится в нашем наборе данных, а не как отдельный набор данных). Как видите, набор данных не так уж чист для целей машинного обучения, и нам нужно предварительно обработать этот набор данных, прежде чем вводить его в наш алгоритм. Вот несколько стандартных способов сделать это:
Разделение между поездами и тестами
Первое, что вам нужно сделать, это разделить набор данных на набор поездов и набор тестов. На самом деле существует множество способов сделать это, и самый простой способ:
random_state
гарантирует, что каждый раз, когда вы снова запускаете программу, вы будете генерировать один и тот же набор поездов и набор тестов. Однако вы должны убедиться, что ваш набор данных большой, так как этот способ выборки может привести к выборке нерепрезентативного тестового случая, когда размер выборки мал.
Отдельный ярлык от набора данных
Эта часть довольно проста. Вы можете отделить метку от набора данных с помощью функции drop()
. Обратите внимание, эта функция не изменит исходный набор данных, который у вас есть, но вернет новый набор данных без удаленного столбца.
Числовая предварительная обработка
Теперь самое интересное, мы хотим обработать наши числовые значения в наборе данных. Нам нужно сделать несколько вещей: во-первых, нам нужно заменить пропущенные значения; во-вторых, нам необходимо стандартизировать наши ценности.
Замена отсутствующих значений
Иногда в наборе данных, который у нас есть, обычно будет много отсутствующих значений со значениями Nan
, и это всегда проблема для всех, кто хочет использовать набор данных по разным причинам. К счастью, sklearn
предлагает простой и эффективный способ решения такой проблемы. С помощью нескольких строк кода мы можем заменить отсутствующие значения медианой столбцов, в которых они находятся.
Совершенно просто! Сначала мы избавляемся от нечисловых атрибутов, затем просто подгоняем импутер к нашим данным и преобразуем наши данные, заменяя отсутствующие значения медианой. Наконец, мы преобразуем наш замененный набор данных обратно в фрейм данных pandas для согласованности.
Стандартизировать
Этот шаг еще проще!
Просто импортируйте StandardScaler
из sklearn.preprocessing
и fit_transform()
набора данных, который у нас есть. Сделанный!
Нечисловой предварительный процесс
Далее нам нужно обработать нечисловые атрибуты. По сути, все, что мы хотим сделать, это преобразовать нечисловые атрибуты в числовые категории, а затем закодировать их с помощью горячего кодировщика. Причина, по которой мы хотим использовать однократное кодирование, заключается в том, что числовые категории могут указывать на числовую корреляцию между различными категориями (алгоритм может думать: может быть, категория 1 похожа на категорию 2 по сравнению с категорией 5) и (в большинстве случаев) мы действительно не хочу. К счастью, у sklearn
есть отличные модули именно для этой цели:
Сделанный! Это все, что вам нужно сделать! И последнее, тип данных housing_cat_1hot
на самом деле является разреженной матрицей, и если вы хотите объединить этот массив после числового массива (помните его? массив housing_num_scaled
на предыдущем шаге), вы должны преобразовать housing_cat_1hot
в плотный массив, вызвав housing_cat_1hot.todense()
. Теперь вы можете объединить его с помощью numpy.concatenate()
и передать в свою нейронную сеть.
Одна последняя вещь! Обязательно сделайте точно такую же предварительную обработку для ваших тестовых данных, иначе вы все испортите!
И последнее. Если вы хотите узнать больше о предварительной обработке данных, посмотрите Практическое машинное обучение с помощью Scikit-Learn, Keras и Tensorflow!