Контролируемое машинное обучение (ML): Ускоренный курс по обработке данных 2023
Интеграция данных и предварительная обработка данных в ML
Подробное руководство по анализу данных для любого проекта машинного обучения от Кришны Манохара Вармы Индукури, Ника Беара Брауна
Вступление
В этом посте мы собираемся изучить этапы, необходимые для успешной интеграции и предварительной обработки любых данных, которые могут быть использованы в аналитических проектах в машинном обучении.
Мы взяли реальный пример того, как предсказать погоду на озере Мичиган, взяв данные из двух разных источников.
@Chatgpturbobot -бесплатный chatgpt bot в телеграме.
Что такое Интеграция данных?
Интеграция данных объединяет различные типы и форматы данных из любого источника по всей организации в хранилище данных, обеспечивая единую базу для аналитики. Работа с этим единым набором данных позволяет компаниям принимать обоснованные решения, помогает различным специалистам мл эффективно работать и повышает качество обслуживания клиентов.
Что такое Средства интеграции данных?
Средства интеграции данных – это программные инструменты, которые принимают, консолидируют, преобразуют и перемещают данные из источника(ов) в пункт назначения, попутно выполняя сопоставления, преобразования и очистку данных. В конечном счёте, они интегрируют данные в ‘единый источник истины’, такой как озеро данных или хранилище данных. Это позволяет получать последовательные и надёжные данные для использования в аналитике и бизнес-аналитике.
Пример того, как работает человеческий мозг в отношении интеграции данных
Как люди интерпретируют то, что это маленькое животное – коала, а не белка или большая крыса?
Есть определённые атрибуты или особенности, которые отличают коал от других животных. Давайте обсудим, как человеческий мозг приходит к выводу всякий раз, когда мы видим коалу.
Нос – одна из главных особенностей, которая отличает коалу от остальных подобных видов. На языке машинного обучения особенность с наибольшим вкладом при весе 0,7/1. Остальные 0,3 или 30% приходится на оставшиеся особенности, такие как уши и глаза.
Итак, аналогично с бизнес-данными, нам нужно объединить несколько важных атрибутов, чтобы придать смысл желаемому результату. Как показано выше, наличие только носа, ушей или глаз не имеет особого смысла, но объединение в одну цельную картинку (изображение коалы) дало нам необходимые данные для получения желаемого результата под названием KOALA.
Та же теория применима и к данным, связанным с бизнесом. Но часто данные становятся фрагментированными, плохо организованными и хранятся в нескольких разных системах хранения. Будучи профессионалом в области Data Science, вы должны чётко представлять бизнес-проблему и то, чего нужно достичь с помощью данных, а также где найти и собрать все необходимые данные.
Реальная проблема в мире
- Давайте возьмём пример сценария реального мира: прогнозирование снегопада на озере Мичиган
- У нас есть два разных набора данных, поступающих из двух источников. Один из них получен с геопространственного спутника для получения широтных и продольных данных о соответствующем времени. Другой – со спутника NOAA, который делает сотни снимков земной поверхности, предварительно обрабатывает изображения и возвращает данные, собранные путём анализа изображений. Давайте импортируем данные с помощью pandas и углубимся в эту тему:
import pandas as pd
df1 = pd.read_csv('https://raw.githubusercontent.com/Varmai/Data-sets/main/Date_time.csv')
df2 = pd.read_csv('https://raw.githubusercontent.com/Varmai/Data-sets/main/Cloud%20%26%20wind.csv')
Давайте интегрируем наборы данных с помощью метода python merge(), используя общий столбец с именем ‘id’:
df = pd.merge(df1, df2, on='id')
Теперь мы успешно соединили два фрейма данных и готовы перейти к предварительной обработке.
Что такое Предварительная обработка данных?
- Предварительная обработка данных – это этап в процессе интеллектуального анализа данных, который берёт необработанные данные и преобразует их в формат, который может быть понят и проанализирован компьютерами и машинным обучением.
- Необработанные данные реального мира в виде текста, изображений, видео и т.д. – это беспорядок. Они не только могут содержать ошибки и несоответствия, но и часто являются неполными и не имеют регулярного, единообразного дизайна.
- Машинам нравится обрабатывать красивую и аккуратную информацию — они считывают данные в виде единиц и нулей. Таким образом, вычислить структурированные данные, такие как целые числа и проценты, несложно. Однако неструктурированные данные в виде текста и изображений должны быть сначала очищены и отформатированы перед анализом.
Этапы предварительной обработки данных
Давайте взглянем на установленные шаги, которые необходимо выполнить, чтобы убедиться, что данные успешно предварительно обработаны:
- Оценка качества данных
- Очистка данных
- Преобразование данных
- Сокращение объёма данных
Давайте вычислим все вышеперечисленные процессы с помощью кода:
1. Проверка наличия нулевых значений в данных является одним из важных шагов в оценке качества данных:
tabel = pd.DataFrame({
'Unique':df.nunique(),
'Null':df.isnull().sum(),
'NullPercent':df.isnull().sum() / len(df),
'NaNN':df.isna().sum(),
'Type':df.dtypes.values,
})
tabel
С помощью приведённого выше кода мы сможем определить все недостающие значения и константы во всех объектах / столбцах в датасете. Если пропущенных значений нет, мы можем пропустить шаг 2 и перейти к шагу 3.
2. Существует несколько методов вставки отсутствующих значений в зависимости от типа данных и распределений.
- Среднее или медианное заполнение
- Регрессионное заполнение
- Заполнение K-ближайшего соседа (KNN)
- Последнее перенесённое наблюдение (LOCF) заполнение
- Следующее наблюдение перенесло заполнение в обратном направлении (NOCB)
- Заполнение с максимальной вероятностью
Как только заполнение пропущенных значений выполнено, мы можем перейти к преобразованию данных и уменьшению размерности, проверив корреляцию между объектами
3. Преобразование данных:
Преобразуйте типы данных категориальных объектов в целочисленный тип, поскольку компьютеры понимают только числа. Преобразование категориальных данных в числовые может упростить анализ с использованием статистических алгоритмов и алгоритмов машинного обучения.
from sklearn.preprocessing import LabelEncoder
for column in df.columns:
fields = []
if df[column].dtype == 'object':
encoder = LabelEncoder()
df[column] = encoder.fit_transform(df[column].values)
4. Сокращение объёма данных:
Все сильно коррелированные функции будут удалены, потому что модель ожидает только одну зависимую функцию и все остальные как независимые. Но в реальном мире одно значение тем или иным образом зависит от другого значения. Таким образом, индекс корреляции может поддерживаться в пределах 60-80% в зависимости от того, насколько важным будет признак для прогнозирования.
import matplotlib.pyplot as plt
import seaborn as sns
plt.subplots(figsize=(30,20))
sns.heatmap(df.corr(), annot=True)
plt.show()
Один краткий пример:
Для расчёта индекса BMI нам нужны такие характеристики, как вес, рост, возраст, ежедневное потребление калорий, физическая активность и т.д., а выходной / зависимой функцией будет BMI. Но если мы рассчитаем корреляцию между признаками, то рост и вес зависят от возраста человека в возрасте до 18 лет. Потребление калорий зависит от физической активности. Спортсмен, потребляющий 4000-5000 калорий, вcё ещё остаётся худым, в то время как человек, ведущий сидячий образ жизни, потребляет 2500 калорий и всё ещё остаётся толстым. Итак, образ жизни имеет значение. Если мы внимательно понаблюдаем, то обнаружим корреляцию между самими независимыми функциями, что означает большее количество зависимых переменных в данных. Тем не менее, все столбцы необходимы для точного расчёта индекса массы тела человека.
Итак, вот тут-то и приходит на помощь наука о данных. Будучи специалистом по обработке данных, человек должен понимать данные, а затем вычислять их. Без понимания данных мы приведём алгоритм к ложной и предвзятой модели.
Сокращение функций
Сокращение объектов, также известное как выделение объектов или выбор переменных, – это метод, используемый в машинном обучении и анализе данных для уменьшения количества объектов или переменных в датасете. Целью сокращения функций является упрощение набора данных путём удаления избыточных или нерелевантных функций, сохраняя при этом наиболее важные функции, которые имеют отношение к анализу или моделированию.
import numpy as np
cor_matrix = df.corr().abs()
print(cor_matrix)
upper_tri = cor_matrix.where(np.triu(np.ones(cor_matrix.shape),k=1).astype(np.bool))
print(upper_tri)
to_drop = [column for column in upper_tri.columns if any(upper_tri[column] > 0.80)]
print(to_drop)
df = df.drop(columns = to_drop, axis=1)
print(df)
Все столбцы с корреляцией выше 80% должны быть удалены из набора данных в соответствии с приведённым выше кодом, который завершает сокращение данных при предварительной обработке.
На этом завершается большая часть предварительной обработки, за исключением ещё двух важных шагов. Данные часто имеют различное распределение, о котором необходимо позаботиться, иначе модель будет смещена в сторону одного признака / категории
Масштабирование данных для устранения смещения
Масштабирование данных является важным этапом предварительной обработки в процессе анализа данных и моделирования рабочих процессов. Основная причина масштабирования данных заключается в том, чтобы гарантировать, что все переменные или функции находятся в одинаковом масштабе, что может помочь повысить точность и эффективность алгоритмов машинного обучения. Масштабирование также может помочь уменьшить влияние выбросов.
from sklearn.preprocessing import MinMaxScaler
X = df.drop(columns='LES_snowfall')
y = df['LES_snowfall']
scaler = MinMaxScaler(feature_range=(0,1))
X = scaler.fit_transform(X)
Приведённый выше код преобразует все значения независимых объектов от 0 до 1. Это гарантирует отсутствие смещения в сторону какой-либо конкретной функции при вычислении алгоритма.
Балансирующая зависимая переменная
Давайте предположим, что 90% данных не показывают снегопада, и только 10% данных показывают снегопад в функции вывода. Сами по себе эти данные имеют уклон в сторону отсутствия категории снегопадов. Модель предсказывает даже отсутствие снегопада в будущих случаях, поскольку алгоритм обучен смещению (отсутствие снегопада), что хуже того, что даёт неточные прогнозы. Итак, чтобы устранить будущие сложности, мы сбалансируем данные с помощью соотношения 50 на 50.
from imblearn.over_sampling import SMOTE
smote = SMOTE()
X, y = smote.fit_resample(X, y)
ros_chd_plot=y.value_counts().plot(kind='bar')
plt.show()
На этом этапе завершается предварительная обработка данных. Теперь мы готовы подогнать эти данные под любую модель машинного обучения.
Заключение
Интеграция данных – это процесс объединения данных из нескольких источников в единое унифицированное представление. Целью интеграции данных является создание полного и точного представления данных, которые могут быть использованы для анализа и принятия решений.
Предварительная обработка данных – это процесс подготовки данных к анализу путём их очистки, преобразования и организации. Целью предварительной обработки данных является повышение качества данных и обеспечение их пригодности для анализа. Предварительная обработка данных важна, поскольку она может помочь выявить и исправить ошибки в данных, уменьшить шум и повысить точность анализа.
Подробное объяснение с кодом приведено на GitHub.
Ссылки на используемую литературу
https://monkeylearn.com/blog/data-preprocessing/