Прежде чем мы сможем начать применять алгоритмы машинного обучения к набору данных, нам обычно необходимо каким-то образом предварительно обработать данные. Предварительная обработка данных — это процесс подготовки данных к анализу, который обычно включает в себя сочетание импорта и очистки данных, изучения и визуализации данных, а также проектирования и масштабирования функций.
Рассмотрим подробнее каждый из этих шагов:
Импорт и очистка данных
Первым шагом в предварительной обработке данных обычно является импорт данных в среду Python и их очистка. Это может включать чтение данных из файла или базы данных, обработку отсутствующих значений и форматирование данных подходящим образом.
Например, допустим, мы хотим импортировать файл CSV со следующими данными:
name,age,income Alice,24,50000 Bob,,60000 Charlie,32,70000
Чтобы импортировать эти данные с помощью NumPy, мы можем использовать функцию genfromtxt
:
import numpy as np data = np.genfromtxt('data.csv', delimiter=',', dtype=None, names=True) print(data) # [('Alice', 24, 50000) ('Bob', -1, 60000) ('Charlie', 32, 70000)]
Как видите, функция genfromtxt
автоматически присвоила значение по умолчанию -1
отсутствующему значению в столбце age
. Однако мы можем захотеть обработать пропущенные значения по-другому, например, подставив среднее значение или медиану столбца или отбросив строки с пропущенными значениями.
Чтобы вычислить среднее значение столбца age
, мы можем использовать следующий код:
# Calculate the mean of the age column where the age is not -1 mean = np.mean(data['age'][data['age'] != -1]) data['age'] = np.where(data['age'] == -1, mean, data['age']) print(data) # [(b'Alice', 24, 50000) (b'Bob', 28, 60000) (b'Charlie', 32, 70000)]
Как видите, отсутствующее значение в столбце age
было заменено средним значением столбца.
Исследовательский анализ данных
Следующим шагом в предварительной обработке данных обычно является исследование и визуализация данных, чтобы лучше понять характеристики и шаблоны данных. Это известно как исследовательский анализ данных (EDA).
Существует множество инструментов и методов EDA, таких как:
- Описательная статистика: вычисление сводной статистики, такой как среднее значение, медиана, мода, стандартное отклонение и корреляции, для получения представления о распределении и взаимосвязях данных.
- Визуализация: использование графиков и диаграмм для визуализации данных и выявления закономерностей и тенденций. Например, мы можем использовать гистограммы для визуализации распределения числовой переменной, точечные диаграммы для визуализации взаимосвязи между двумя числовыми переменными и гистограммы для визуализации частоты категориальной переменной.
Вот пример использования NumPy и Matplotlib для визуализации данных:
import matplotlib.pyplot as plt plt.hist(data['age']) plt.xlabel('Age') plt.ylabel('Frequency') plt.title('Histogram of Age') plt.show()
Это выведет гистограмму столбца age
:
EDA может быть полезным способом выявления закономерностей и тенденций в данных, выявления аномалий и выбросов, а также информирования о выборе алгоритмов машинного обучения и показателей оценки.
Разработка функций
Инжиниринг признаков — это процесс создания и выбора признаков, релевантных и информативных для поставленной задачи. Функции — это входные переменные, которые алгоритм машинного обучения использует для обучения и прогнозирования.
Хорошие функции могут иметь большое значение для производительности модели машинного обучения, в то время как плохие функции могут привести к снижению производительности. Поэтому важно тщательно выбирать и проектировать функции, которые будут использоваться в модели.
Существует множество способов разработки функций, таких как:
- Извлечение функций из необработанных данных: например, мы можем извлекать функции из текстовых данных с помощью таких методов, как токенизация, создание стемминга и лемматизация.
- Объединение функций: мы можем создавать новые функции, комбинируя существующие функции, используя такие методы, как полиномиальное расширение или условия взаимодействия.
- Преобразование функций: мы можем преобразовать функции с помощью таких методов, как масштабирование, нормализация или бинаризация.
Вот пример использования scikit-learn для разработки функций из текстовых данных:
from sklearn.feature_extraction.text import CountVectorizer corpus = ['The cat sat on the mat.', 'The dog chased the cat.'] vectorizer = CountVectorizer() X = vectorizer.fit_transform(corpus) print(vectorizer.get_feature_names_out()) print(X)
Это выведет следующее:
['cat' 'chased' 'dog' 'mat' 'on' 'sat' 'the'] (0, 6) 2 (0, 0) 1 (0, 5) 1 (0, 4) 1 (0, 3) 1 (1, 6) 2 (1, 0) 1 (1, 2) 1 (1, 1) 1
Как видите, CountVectorizer
преобразовал текстовые данные в разреженную матрицу количества слов, где каждая строка представляет документ, а каждый столбец представляет слово. Это распространенный способ представления текстовых данных для машинного обучения.
Масштабирование и нормализация функций
Масштабирование и нормализация объектов — это методы преобразования объектов набора данных, чтобы они имели одинаковый масштаб и распределение. Это часто необходимо, потому что алгоритмы машинного обучения могут быть чувствительны к масштабу и распределению функций и могут плохо работать, если функции имеют очень разные масштабы или распределения.
Существует множество способов масштабирования и нормализации функций, например:
- Минимальное-максимальное масштабирование: масштабирование функций до определенного диапазона, например от 0 до 1. Это можно сделать с помощью
MinMaxScaler
из scikit-learn. - Стандартизация: масштабирование признаков так, чтобы среднее значение равнялось 0, а стандартное отклонение равнялось 1. Это можно сделать с помощью
StandardScaler
из scikit-learn. - Нормализация: масштабирование объектов до единичной нормы (величина 1). Это можно сделать с помощью функции
normalize
из scikit-learn.
На этом мы завершаем обсуждение предварительной обработки данных! В следующей части курса мы рассмотрим выбор и оценку модели, а также рассмотрим различные типы моделей, доступных в scikit-learn. Следите за обновлениями!