Прежде чем мы сможем начать применять алгоритмы машинного обучения к набору данных, нам обычно необходимо каким-то образом предварительно обработать данные. Предварительная обработка данных — это процесс подготовки данных к анализу, который обычно включает в себя сочетание импорта и очистки данных, изучения и визуализации данных, а также проектирования и масштабирования функций.

Рассмотрим подробнее каждый из этих шагов:

Импорт и очистка данных

Первым шагом в предварительной обработке данных обычно является импорт данных в среду 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. Следите за обновлениями!