для чего необходима предварительная обработка базовой линии в информатике
ОБРАБОТКА БАЗОВЫХ ЛИНИЙ
Загрузка данных из Интернета
ПЕРЕДАЧА ДАННЫХ
Программа Trimble Business Center: полный контроль над данными съемки от начала и до конца
Процесс импорта геодезических данных в офисное программное обеспечение стал простым, как никогда прежде. Это связано с тем, что программа Trimble Business Center (TBC) автоматически импортирует GNSS измерения в файлы соответствующего формата.
При импорте данных в Trimble Business Center вы просто указываете нужный файл на вашем компьютере, а программа TBC автоматически анализирует и определяет его тип и выбирает нужный способ обработки.
Такая исключительно простая в использовании автоматизированная система позволяет вам также напрямую перетаскивать файлы из папки в открытый проект TBC, чтобы уже через несколько секунд увидеть свои данные.
Импортировать геодезические данные в программу Trimble Business Center можно также через Интернет. Эта возможность позволяет вам импортировать данные базовых станций, точные эфемериды и списки NGS за один шаг.
TBC можно настроить на получение нужных вам данных с помощью нескольких щелчков мыши: эта программа настолько умна, что может одним действием выбрать соответствующие данные, а затем разархивировать и импортировать их. При импорте вам больше не требуется самим находить данные и указывать необходимый промежуток измерений.
В программе TBC вы можете выбрать такие настройки для обработки базовых GNSS линий, какие вам требуются – простые или расширенные.
Предварительная обработка данных
Дата публикации Jun 29, 2019
В основе машинного обучения лежит обработка данных. Вашинструменты машинного обучения так же хороши, как и качество ваших данных, Этот блог посвящен различным этапамочистка данных, Ваши данные должны пройти несколько этапов, прежде чем их можно будет использовать для прогнозирования.
Шаги, вовлеченные в предварительную обработку данных:
Итак, давайте посмотрим на эти шаги один за другим.
Шаг 1: Импорт необходимых библиотек
Для продолжения вам необходимо скачать этот набор данных:data.csv
Здесь мы импортируем панды и библиотеку Numpy и назначаем ярлыки «pd» и «np» соответственно.
Шаг 2: Импорт набора данных
Шаг 3: Обработка недостающих данных
Данные, которые мы получаем, редко бывают однородными. Иногда данные могут отсутствовать, и их необходимо обрабатывать, чтобы они не снижали производительность нашей модели машинного обучения.
Для этого нам нужно заменить отсутствующие данные на Среднее или Медиана всего столбца. Для этого мы будем использовать библиотеку sklearn.preprocessing, которая содержит класс Imputer, который поможет нам позаботиться о недостающих данных.
Наше имя объектаimputer.Класс Imputer может принимать такие параметры, как:
Теперь мы подгоняем объект imputer к нашим данным.
Теперь заменим отсутствующие значения на среднее значение столбца с помощью метода преобразования.
Шаг 4: Кодирование категориальных данных
Любая переменная, которая не является количественной, является категориальной. Примеры включают в себя цвет волос, пол, область исследования, посещение колледжа, политическую принадлежность, статус заболевания.
Но почему кодирование?
Мы не можем использовать такие значения, как «мужской» и «женский» в математических уравнениях модели, поэтому нам нужно закодировать эти переменные в числа.
Для этого мы импортируем класс «LabelEncoder» из библиотеки «sklearn.preprocessing» и создаем объект labelencoder_X класса LabelEncoder. После этого мы используем метод fit_transform для категориальных функций.
После кодирования необходимо различать переменные в одном столбце, для этого мы будем использовать класс OneHotEncoder из библиотеки sklearn.preprocessing.
One-Hot Кодирование
Одно горячее кодирование преобразует категориальные признаки в формат, который лучше работает с алгоритмами классификации и регрессии.
Шаг 5: Разделение набора данных на обучающий набор и тестовый набор
Теперь мы разделим наши данные на два набора, один для обучения нашей модели, называемойОбучающий набора другой для тестирования производительности нашей модели называетсятестовый набор, Сплит, как правило, 80/20. Для этого мы импортируем метод «train_test_split» из библиотеки «sklearn.model_selection».
Шаг 6: Масштабирование функций
Большинство алгоритмов машинного обучения используютЕвклидово расстояниемежду двумя точками данных в их вычислениях. Из-за этого,особенности больших величин будут весить большев расчетах расстояниячем особенности с низкими величинами, Чтобы избежать этой функции, используется стандартизация или Z-оценка. Это делается с помощью класса «StandardScaler» «sklearn.preprocessing».
Далее мы преобразуем наш набор X_test, в то время как нам нужно будет соответствовать и преобразовать наш набор X_train.
Функция преобразования преобразует все данные в одну стандартизированную шкалу.
Итак, начнем, вы изучили основные этапы предварительной обработки данных.
Теперь вы можете попробовать применить эти методы предварительной обработки к некоторым реальным наборам данных.
AI, практический курс. Предобработка и дополнение данных с изображениями
Предобработка — это общий термин для всех манипуляций, производимых с данными перед передачей их модели, включая центрирование, нормализацию, сдвиг, вращение, обрезку и т. п. Как правило, предобработка требуется в двух случаях.
Данные
В этой и следующих статьях будет использован набор данных для анализа эмоциональной окраски изображений. Он содержит 1500 примеров изображений, разделенных на два класса — положительные и отрицательные. Рассмотрим некоторые примеры.
Отрицательные примеры
Положительные примеры
Трансформации по очистке
Теперь рассмотрим набор возможных трансформаций, обычно применяемых для очистки данных, их внедрение и влияние на изображения.
Все фрагменты кода можно найти в книге Preprocessing.ipynb.
Перемасштабирование
Изображения, как правило, хранятся в формате RGB (Red Green Blue). В этом формате изображение представлено трехмерным (или трехканальным) массивом.
RGB-разложение изображения. Диаграмма взята с Wikiwand
Одно измерение используется для каналов (красного, зеленого и синего цветов), два других представляют местоположение. Таким образом, каждый пиксель кодируется тремя числами. Каждое число обычно хранится в виде 8-битового беззнакового целого типа (от 0 до 255).
Перемасштабирование — это операция, изменяющая числовой диапазон данных простым делением на заранее определенную константу. В глубоких нейронных сетях может потребоваться ограничить входные данные диапазоном от 0 до 1 из-за возможного переполнения, вопросов оптимизации, стабильности и т. п.
Например, перемасштабируем наши данные с диапазона [0; 255] в диапазон [0; 1]. Здесь и далее будем использовать класс Keras ImageDataGenerator, позволяющий выполнять все трансформации «на лету».
Создадим два экземпляра этого класса: один для трансформированных данных, другой для исходных:
(или для данных по умолчанию). Необходимо лишь указать константу масштабирования. Более того, класс ImageDataGenerator позволяет направлять данные потоком напрямую из папки на жестком диске, используя метод flow_from_directory.
Все параметры можно найти в документации, но основными параметрами являются: путь к потоку и целевой размер изображения (если изображение не соответствует целевому размеру, генератор его просто обрезает или наращивает). Наконец, получим образец из генератора и рассмотрим результаты.
Визуально оба изображения идентичны, но причина этого в том, что инструменты Python* автоматически перемасштабируют изображения
в диапазон по умолчанию, чтобы их можно было отображать на экране. Рассмотрим сырые данные (массивы). Как видно, сырые массивы отличаются ровно в 255 раз.
Перевод в оттенки серого
Еще один вид трансформации, который может оказаться полезным — это перевод в оттенки серого, который переводит цветное RGB-изображение в изображение, в котором все цвета представлены оттенками серого. Обычная обработка изображений может использовать перевод в оттенки серого в комбинации с последующим заданием порога. Эта пара трансформаций может отбрасывать шумные пиксели и определять формы на изображении. Сегодня все эти операции выполняются сверточными нейронными сетями (Convolutional Neural Network, CNN), но перевод в оттенки серого как этап предобработки по-прежнему может быть полезным. Запустим этот шаг в Keras с тем же классом генератора.
Здесь мы создаем только один экземпляр класса и берем из него два разных генератора. Второй генератор устанавливает параметр color_mode в “grayscale” (значение по умолчанию “RGB”).
Центрирование образцов
Мы уже видели, что значения необработанных данных находятся в диапазоне от 0 до 255. Таким образом, один образец представляет собой трехмерный массив чисел от 0 до 255. В свете принципов стабильности оптимизации (избавляться от проблемы исчезающих или насыщающих значений) может потребоваться нормализовать набор данных таким образом, чтобы среднее значение каждого образца данных равнялось 0.
Для этого необходимо рассчитать среднее значение по всему образцу и вычесть его из каждого числа в данном образце.
В Keras это делается при помощи параметра samplewise_center.
Нормализация СКО образцов
Данный этап предобработки основан на той же идее, что и центрирование образцов, но вместо установки среднего в 0 от устанавливает значение среднеквадратичного отклонения в 1.
Нормализация СКО управляется параметром samplewise_std_normalization. Следует отметить, что эти два способа нормализации образцов часто используются совместно.
Данная трансформация может применяться в моделях глубокого обучения для повышения стабильности оптимизации путем снижения влияния проблемы взрывающихся градиентов.
Центрирование признаков
В двух предыдущих разделах использовалась техника нормализации, рассматривающая каждый отдельный образец данных. Существует альтернативный подход к процедуре нормализации. Рассмотрим каждое число в массиве изображения как признак. Тогда каждое изображение представляет собой вектор признаков. В наборе данных много таких векторов; следовательно, мы можем рассматривать их в виде некоторого неизвестного распределения. Это распределение является многопараметрическим, и размерность его будет равна количеству признаков, т. е. ширина × высота × 3. Хотя истинное распределение данных неизвестно, можно попытаться нормализовать его путем вычитания среднего значения распределения. Следует отметить, что среднее значение представляет собой вектор той же размерности, то есть, тоже является изображением. Другими словами, мы усредняем по всему набору данных, а не по одному образцу.
Существует специальный параметр Keras под названием featurewise_centering, но, к сожалению, по состоянию на август 2017 года в его реализации была ошибка; поэтому реализуем его самостоятельно. Сначала считаем весь набор данных в память (мы можем себе это позволить, так как имеем дело с небольшим набором данных). Мы сделали это, установив размер пакета равным размеру набора данных. Затем рассчитаем среднее изображение по всему набору данных и, наконец вычтем его из тестового изображения.
Нормализация СКО признаков
Идея нормализации среднеквадратичного отклонения в точности та же, что и идея центрирования. Единственная разница состоит в том, что вместо вычитания среднего значения мы производим деление на значение среднеквадратичного отклонения. Визуально результат не сильно отличается. То же происходило
при перемасштабировании, поскольку нормализация СКО есть не что иное как перемасштабирование с определенным образом рассчитанной константой, а при простом перемасштабировании константа указывается вручную. Заметим, что аналогичная идея нормализации пакетов данных лежит в основе современной техники глубокого обучения, называемой BatchNormalization.
Трансформации с дополнением
В данном разделе мы рассмотрим несколько трансформаций, зависимых от данных, явным образом использующих графическую природу данных. Эти типы трансформации часто используются в процедурах дополнения данных.
Вращение
Этот вид трансформации вращает изображение в определенном направлении (по или против часовой стрелки).
Параметр, позволяющий осуществлять вращение, называется rotation_range. Он указывает на диапазон в градусах, из которого случайным образом с равномерным распределением выбирается угол поворота. Следует отметить, что при вращении размер изображения не меняется. Таким образом, некоторые участки изображения могут быть обрезаны, а некоторые заполнены.
Режим заполнения устанавливается при помощи параметра fill_mode. Он поддерживает различные способы заполнения, но здесь мы в качестве примера используем метод constant.
Горизонтальный сдвиг
Этот вид трансформации сдвигает изображение в определенном направлении по горизонтальной оси (влево или вправо).
Размер сдвига может определяться при помощи параметра width_shift_range и измеряется как часть полной ширины изображения.
Вертикальный сдвиг
Сдвигает изображение по вертикальной оси (вверх или вниз). Параметр, управляющий диапазоном сдвига называется генератором height_shift и также измеряется как часть полной высоты изображения.
Обрезка
Преобразование обрезки или обрезка смещает каждую точку в вертикальном направлении на величину, пропорциональную расстоянию от этой точки до края изображения. Отметим, что в общем случае направление не обязано быть вертикальным и является произвольным.
Параметр, управляющий смещением, называется shear_range и соответствует углу отклонения (в радианах) между горизонтальной линией на исходном изображении и изображением (в математическом смысле) этой линии на трансформированном изображении.
Приближение/удаление
Этот вид трансформации осуществляет приближение или удаление исходного изображения. Параметр zoom_range управляет коэффициентом приближения.
Например, если zoom_range равен 0,5, то коэффициент приближения будет выбран из диапазона [0,5, 1,5].
Горизонтальный переворот
Переворачивает изображение относительно вертикальной оси. Его можно включить или выключить при помощи параметра horizontal_flip.
Вертикальный переворот
Переворачивает изображение относительно горизонтальной оси. Параметр vertical_flip (типа Boolean) управляет наличием или отсутствием данной трансформации.
Комбинация
Применим все описанные виды трансформаций дополнения одновременно и посмотрим, что из этого получится. Напомним, что параметры для всех трансформаций выбираются случайным образом из определенного диапазона; таким образом, мы должны получить набор образцов со значительной степенью разнообразия.
Инициируем ImageDataGenerator со всеми доступными параметрами и проверим на изображении красного гидранта.
Заметим, что режим наполнения constant использовался лишь для лучшей визуализации. Теперь будем использовать более продвинутый режим заполнения, называемый nearest; этот режим назначает пустому пикселю цвет ближайшего к нему существующего пикселя.
Предварительная обработка данных
Всем привет! Я веб-разработчик и вот уже несколько лет интересуюсь машинным обучением. Поскольку в повседневной рабочей парктике мне приходится решать менее интересные для меня задачи, не связанные с машинным обучением, время от времени я забываю то, о чем когда-то читал или использовал. Чтобы составить памятку для себя, укрепить свои знания и поделиться ими с окружающими, я решил написать несколько статей по машинному обучению. Начну с предварительной обработки данных.
В этой статье я расскажу о том, какие проблемы случаются с данными, как их решать, а также про наиболее часто используемые методы подготовки данных перед тем как их «скармливать» разным моделям.
Пропуски
Рассмотрим набор данных следующего вида. Я его честно придумал и далее в рамках этой статьи буду ссылаться на него.
ID | Имя | Спортивная дисциплина | Страна | Год рождения спортсмена | Вес спортсмена | Медаль |
---|---|---|---|---|---|---|
1 | Иван | Академическая гребля | Российская Федерация | 1985 | 265 | B |
2 | Бокс | Великобритания | 1986 | 54 | S | |
3 | Ким | Греко-римская борьба | Северная Корея | 1986 | 93 | G |
4 | Олег | Греко-римская борьба | 1984 | B | ||
5 | Педро | Академическая гребля | Бразилия | 97 | N | |
6 | Валерий | Академическая гребля | Российская Федерация | 2004 | 97 | N |
Очень часто случается так, что в наборе данных пропущены те или иные значения. Данные с пропусками чаще всего нельзя просто так взять передать в модель. Самый простой способ избавиться от пропусков в данных — просто удалить строки, в которых есть пропущенные значения. Но бывают случаи, когда такое удаление строк может привести к потере большого количества информации.
Помимо удаления строк существуют иные, более «стойкие» к потере обучающей информации, методы. Прежде чем рассмотреть эти методы, отмечу, что признаки можно поделить на категориальные и численные.
Категориальный признак — признак, значение которого можно отнести к какой-либо группе, но порядок значений в этой группе абсолютно не важен. Более того, между значениями категориальных признаков невозможно установить отношения «больше» или «меньше». Однако, никто не мешает исследователю отсортировать значения признака, например, по алфавиту для наглядности или по какому-либо другому критерию для какой-либо другой цели. Примеры категориальных признаков в моем наборе данных: Имя, Спортивная дисциплина, Страна, Год рождения спортсмена.
Значения численного признака является скаляром. Объекты в наборе данных можно упорядочить по значению такого признака в возрастающем или убывающем порядке. В качестве примеров численного признака можно привести Год рождения спортсмена и Вес спортсмена.
Я не ошибся, отнеся год рождения спортсмена как к численным так и к категориальным признакам. Дело в том, что многие признаки можно отнести одновременно к двум категориям. Но в модели такие признаки будут использоваться вполне однозначно: либо как численные, либо как категориальные. Классификация таких спорных признаков — творческий процесс и зависит от задачи, которую вы решаете.
Пропуски в категориальных признаках
Заполнить пропуски в категориальных признаках можно следующими способами:
ID | Имя | Спортивная дисциплина | Страна | Год рождения спортсмена | Вес спортсмена | Медаль |
---|---|---|---|---|---|---|
2 | Неизвестно | Бокс | Великобритания | 1986 | 54 | S |
ID | Имя | Спортивная дисциплина | Страна | Год рождения спортсмена | Вес спортсмена | Медаль |
---|---|---|---|---|---|---|
4 | Олег | Греко-римская борьба | Российская Федерация | 1984 | B |
Пропуски в численных признаках
Если имеем дело с численными признаками, можно применить следующие подходы:
ID | Имя | Спортивная дисциплина | Страна | Год рождения спортсмена | Вес спортсмена | Медаль |
---|---|---|---|---|---|---|
4 | Олег | Греко-римская борьба | 1984 | (265 + 54 + 93 + 97 + 97) / 5 = 121.2 | B |
Как видно из примера выше, выброс значения признака «Вес спортсмена» в строке с идентификатором 1 очень сильно повлиял на среднее значение.
ID | Имя | Спортивная дисциплина | Страна | Год рождения спортсмена | Вес спортсмена | Медаль |
---|---|---|---|---|---|---|
4 | Олег | Греко-римская борьба | 1984 | Медиана(54, 93, 97, 97, 265) = 97 | B |
Выбросы
В данных могут присутствовать значения, являющиеся выбросами. Это, как правило, не ошибки. Однако, своими значениями они «шокируют» модель. Пример выброса — значение веса Ивана из таблицы выше (ниже продублирована строка).
ID | Имя | Спортивная дисциплина | Страна | Год рождения спортсмена | Вес спортсмена | Медаль |
---|---|---|---|---|---|---|
1 | Иван | Академическая гребля | Российская Федерация | 1985 | 265 | B |
Для того, чтобы определить, является ли значение выбросом, пользуются характеристикой выборки, называемой интерквартильным размахом. Определяется он следующим образом:
где — первая квартиль — такое значение признака, меньше которого ровно 25% всех значений признаков.
— третья квартиль — значение, меньше которого ровно 75% всех значений признака.
Для того, чтобы понять, является ли значение выбросом, можно воспользоваться эвристикой: выбросы лежат за пределами следующего интервала:
Чаще всего от выбросов в обучающей выборке лучше всего избавляться.
Нормализация
Нормализация — это приведение всех значений признака к новому диапазону. Например, к диапазону [0, 1]. Это полезно, поскольку значения признаков могут изменяться в очень большом диапазоне. Причем, значения разных признаков могут отличаться на несколько порядков. А после нормализации они все будут находиться в узком (и, часто, едином) диапазоне.
Наиболее популярным способом нормализации является нормализация методом минимакса. Для того, чтобы применить этот метод, должно быть известно максимальное и минимальное значение признака. Проблема в том, что эти значения известны не всегда.
Также довольно популярным методом является Z-нормализация. Диапазон новых значений для Z-нормализации выглядит следующим образом:
где — среднеквадратическое отклонение признака X.
Выполняется Z-нормализация по формуле ниже.
где M[X] — математическое ожидание признака X.
Отмечу, что в случае применения Z-нормализации к нескольким признакам, диапазон значений для них будет разным.
One-hot encoding
Это способ предварительной обработки категориальных признаков. Многие модели плохо работают с категориальными признаками как таковыми. Дело в том, что слово «Российская Федерация» нельзя просто взять и умножить на какое-нибудь число. Но многие модели работают именно так: берется коэффициент и на него умножается значение признака. Аналогичная операция выполняется с остальными признаками. Все результаты суммируются. На основе значения суммы делается вывод о принадлежности объекта к тому или иному классу (такие модели называются линейными).
Однако, как поступать с признаками, значения которых нельзя выразить численно? Можно заменить их значения численным идентификатором. Например, вместо значения «Российская Федерация» использовать значение 1, а вместо «Великобритания» — 2. Тогда линейная модель будет работать. Но, если поступить таким образом, будет утеряно свойство категориальности признака. Иными словами, модель будет пытаться сравнивать идентификаторы признаков между собой. Но они не сравнимы по значению.
Чтобы бороться с этой проблемой, был придуман способ преобразовать исходный признак в несколько новых, бинарных признаков. Например, можно признак «Страна» превратить в 4 новых бинарных признака следующим образом:
ID | Имя | Страна_Российская Федерация | Страна_Великобритания | Страна_Северная Корея | Страна_Бразилия | |
---|---|---|---|---|---|---|
1 | Иван | 1 | 0 | 0 | 0 | |
2 | Майкл | 0 | 1 | 0 | 0 | |
3 | Ким | 0 | 0 | 0 | 1 | 0 |
4 | Олег | 1 | 0 | 0 | 0 | |
5 | Педро | 0 | 0 | 0 | 1 | |
6 | Валерий | 1 | 0 | 0 | 0 |
Для каждого из этих признаков линейная модель будет использовать независимый коэффициент и, таким образом, не будет сравнивать категориальные значения одного и того же признака между собой.
Заключение
Итак, мы имеем две группы методов предварительной обработки. Первая из них сфокусирована на исправлении ошибок данных. Конечно, ошибки можно не исправлять, а просто избавиться от объектов с ошибками. В некоторых случаях это будет даже лучше. Вторая группа методов сфокусирована на корректировке данных таким образом, чтобы известные модели работали лучше.
Спасибо, что дочитал или долистал до сюда. Я описал далеко не все способы предварительной обработки, да и эта статья вряд ли пригодится профессиональным data scientist-ам. Однако, если ты новичок и не знаешь что делать со своими данными, можешь смело сюда возвращаться. Удачи в обучении и интересных задач!
Список источников
Я не ученый и эта статья не претендует на звание научной. Поэтому и источники я не буду оформлять по ГОСТам. Прошу за это меня извинить.