В ежедневном процессе разработки машинного обучения базовый процесс машинного обучения показан на следующем рисунке.
В этой статье объясняется часть предварительной обработки данных после извлечения признаков.
Введение
Благодаря извлечению признаков мы можем получить необработанные признаки, которые могут иметь следующие проблемы:
- Не принадлежит к одному и тому же измерению: то есть характеристики функций различны и не могут сравниваться вместе. Безразмерность может решить эту проблему.
- Информационная избыточность: для некоторых количественных характеристик эффективная информация, содержащаяся в них, разбита на интервалы, например, академическая успеваемость.Если вас интересует только «сдача» или «сдача», то вам необходимо преобразовать количественные оценки теста в «1». и «0» указывает на пройдено и не пройдено. Бинаризация может решить эту проблему.
- Качественные признаки нельзя использовать напрямую: некоторые алгоритмы и модели машинного обучения могут принимать ввод только количественных признаков, поэтому необходимо преобразовать качественные признаки в количественные. Проще всего указать количественное значение для каждого качественного значения, но этот метод слишком гибкий и увеличивает работу по настройке параметров.Фиктивное кодирование обычно используется для преобразования качественных признаков в количественные.Предполагая, что имеется N видов качественных значений, этот признак расширяется до N видов признаков.Когда исходным значением признака является i-е качественное значение, i-му расширенному признаку присваивается значение 1, а другому расширенному признаку присваивается значение 1. функциям присваивается значение 0. По сравнению с прямым указанным методом метод фиктивного кодирования не требует увеличения работы по настройке параметров.Для линейных моделей использование фиктивных кодированных функций может привести к нелинейным эффектам.
- Есть пропущенные значения: Пропущенные значения необходимо дополнить.
- Низкое использование информации: разные алгоритмы и модели машинного обучения используют разную информацию в данных.Как упоминалось ранее, в линейной модели использование фиктивного кодирования качественных признаков может привести к нелинейным эффектам. Так же,Полиномиализация количественных переменных или другие преобразования могут привести к нелинейным эффектам..
Ниже мы используем библиотеку предварительной обработки в sklearn для предварительной обработки данных, чтобы решить проблемы, возникшие выше.
Подготовка набора данных
Во-первых,Загрузите набор данных IRIS, код показан ниже.
from sklearn.datasets import load_iris # 导入IRIS数据集
import numpy as np
iris = load_iris() # 特征矩阵
print(iris.data.shape) # (150, 4)
print(iris.data[:1,:]) # [[5.1 3.5 1.4 0.2]]
print(np.unique(iris.target)) # [0 1 2]
Безразмерность
Безразмерное преобразование предназначено для преобразования данных разных спецификаций в одну и ту же спецификацию или для преобразования данных разных распределений в определенное распределение.
В градиентных и матрично-ориентированных алгоритмах, таких как логистическая регрессия, машины опорных векторов, нейронные сети, безразмерныеМожет ускорить решение; И в моделях классов расстояний, таких как K-ближайшие соседи, кластеризация K-средних, безразмерныеЭто может помочь нам повысить точность модели и избежать влияния функции с особенно большим диапазоном значений на расчет расстояния..
Общие безразмерные методы включают стандартизацию и интервальное масштабирование.
- Предпосылка стандартизации заключается в том, что собственные значения подчиняются нормальному распределению, После стандартизации они преобразуются в стандартное нормальное распределение.
- Метод интервального масштабирования использует информацию о граничных значениях для масштабирования интервала значений признака до диапазона определенного признака, например
[0, 1]
Ждать.
Разница между размерным и безразмерным
Размерность: размер физической величины связан с единицей измерения. Например, 1 доллар и 1 цент — это два разных измерения, потому что у них разные единицы измерения.
Безразмерный: размер физической величины не имеет ничего общего с единицей измерения. Например, угол, коэффициент усиления, отношение двух длин и т. д.
Стандартизация - нормализация с нулевым средним
Стандартизация заключается в обработке данных в соответствии со столбцами матрицы признаков, которая преобразует собственные значения выборок в одно и то же измерение путем вычисления метода z-оценки.
Короче говоря, стандартизация преобразует непрерывную переменную в переменную со средним значением 0 и стандартным отклонением 1. Стандартизация требует расчета среднего значения и стандартного отклонения признака Формула выражается как:
Часто используется в алгоритмах, основанных на нормальном распределении, таких как регрессия.
Использование библиотеки предварительной обработкиStandardScaler
(На основе столбцов матрицы признаков значения атрибутов преобразуются в соответствии с нормальным распределением) класса для стандартизации данных код выглядит следующим образом:
from sklearn.preprocessing import StandardScaler
# 标准化,返回值为标准化后的数据
standard = StandardScaler().fit_transform(iris.data)
print(standard[:1,:]) # [[-0.90068117, 1.01900435, -1.34022653, -1.3154443 ]]
масштабирование интервала нормализации
Существует много идей для метода интервального масштабирования.Общий из них заключается в использовании двух максимальных значений для масштабирования и преобразовании исходной непрерывной переменной в диапазон в[a,b]
или[0,1]
Переменная между , формула выражается как:
Интервальное масштабирование может улучшить скорость сходимости модели и ее точность.
Обычно используется в нейронных сетях.
Использование библиотеки предварительной обработкиMinMaxScaler
(На основе максимального и минимального значений преобразовать данные в[0,1]
Класс на интервале масштабирует интервал данных, код выглядит следующим образом:
# 区间缩放,返回值为缩放到[0, 1]区间的数据
from sklearn.preprocessing import MinMaxScaler
min_max = MinMaxScaler().fit_transform(iris.data)
print(min_max[:1,:]) # [[0.22222222, 0.625 , 0.06779661, 0.04166667]]
Регуляризация (нормализация)
Процесс регуляризации заключается в масштабировании каждой выборки до единичной нормы (норма каждой выборки равна 1).Цель регуляризации состоит в том, чтобы иметь единый стандарт для выборочных векторов при вычислении сходства в операциях скалярного произведения или других функциях ядра. Например, взяв скалярное произведение l2-нормы двух векторов TF-IDF, можно получить косинусное сходство двух векторов.
Обычно используется для классификации текста и кластеризации.
Основная идея Нормализации состоит в том, чтобы вычислить ее p-норму для каждой выборки, а затем разделить каждый элемент в выборке на норму, чтобы результат этой обработки былp-норма каждого обработанного образца(l1-норма, l2-норма) равно 1. То есть процесс нормализации заключается в масштабировании каждой выборки до единичной нормы (понимаемой в сочетании с единичным вектором,время - единичный вектор, другое - единичная норма)
Формула расчета нормы выглядит следующим образом:
видимый,Норма — это евклидово расстояние, тогда правилоФормула нормализации выглядит следующим образом:
Можно видеть, что он преобразует каждую строку (полосу) данных в соответствующий «единичный вектор».
Использование библиотеки предварительной обработкиNormalizer
(Основываясь на строках матрицы, преобразуйте вектор выборки в единичный вектор) класс для нормализации данных, его код выглядит следующим образом:
from sklearn.preprocessing import Normalizer
norm = Normalizer(norm='l2').fit_transform(iris.data)
print(norm[:1,:]) # [[0.22222222, 0.625 , 0.06779661, 0.04166667]
Описание параметра:
norm
: Может быть l1, l2 или max, по умолчанию l2.
- Если это l1, каждое собственное значение выборки делится на сумму абсолютных значений каждого собственного значения
- Если это l2, каждое собственное значение выборки делится на сумму квадратов каждого собственного значения
- Если оно равно max, каждое собственное значение выборки делится на значение с наибольшим собственным значением в выборке.
Разница между нормализацией, нормализацией и регуляризацией
- Стандартизация: преобразуйте переменную объекта в стандартное нормальное распределение со средним значением 0 и дисперсией 1.
- Нормализация: преобразуйте переменную объекта в интервал с минимальным значением 0 и максимальным значением 1.
- Регуляризация: масштабирование значения каждой выборки по всем переменным до единичной нормы (т. е. значение каждой выборки по всем переменным имеет норму 1).
Разница между качественными характеристиками и количественными характеристиками
Как правило, качественные описания будут иметь связанные дескрипторы, а количественные описания могут быть количественно определены числами. Например:
- Качественный: блогер толстый, блогер худой
- Количество: 80кг для блогеров, 60кг для блогеров
Бинаризовать количественные признаки
Суть бинаризации количественных признаков заключается в установке порога.Значению, превышающему порог, присваивается 1, а значению, меньшему или равному порогу, присваивается 0. Формула выражается следующим образом:
Использование библиотеки предварительной обработкиBinarizer
Класс бинаризирует данные, код выглядит следующим образом:
from sklearn.preprocessing import Binarizer
# 二值化,阈值设置为3,返回值为二值化后的数据
binary = Binarizer(threshold=3).fit_transform(iris.data)
print(binary[:1,:]) # [[1., 1., 0., 0.]]
Горячее кодирование качественных признаков
Когда ваши переменные не являются количественными признаками, вы не можете использовать их для обучения модели. Горячее кодирование в основном имеет дело с качественными признаками, а затем получает признаки, которые можно использовать для обучения.
Поскольку все функции набора данных IRIS являются количественными, их целевые значения используются для одноразового кодирования (которое на самом деле не требуется).
Использование библиотеки предварительной обработкиOneHotEncoder
Класс выполняет горячее кодирование данных, код выглядит следующим образом:
# 独热编码,对IRIS数据集的目标值,返回值为独热编码后的数据
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
print(iris.target.reshape(-1,1).shape) # (150, 1)
one_hot = OneHotEncoder().fit_transform(iris.target.reshape(-1,1))
print(one_hot.shape) # (150, 3)
dummy = pd.get_dummies(iris.target)
print(dummy.shape) # (150, 3)
Дополнение недостающих собственных значений
Поскольку в наборе данных IRIS нет пропущенных значений, в набор данных добавляется новая выборка, и всем четырем функциям присваивается значение NaN, что указывает на отсутствие данных.
Использование библиотеки предварительной обработкиSimpleImputer
Класс выполняет завершение отсутствующих значений данных, код выглядит следующим образом:
from numpy import vstack, array, nan
# 缺失值计算,返回值为计算缺失值后的数据
from sklearn.impute import SimpleImputer
# 参数missing_value为缺失值的表示形式,默认为NaN
# 参数strategy为缺失值填充方式,默认为mean(均值)
imputer = SimpleImputer(missing_values=nan, strategy = "mean")
data = vstack((array([nan, nan, nan, nan]), iris.data))
print(data[0:1,:]) # [[nan nan nan nan]]
result = imputer.fit_transform(data)
print(result[0:1,:]) # [[5.84333333 3.05733333 3.758 1.19933333]]
преобразование данных
Общие преобразования данных основаны на полиномах, экспоненциальных функциях и логарифмических функциях.
Полиномиальное преобразование данных
Преобразуйте несколько функций в дополнительные, чтобы увеличить сложность модели.
2 особенности (), формула преобразования полинома степени полинома 2 выглядит следующим образом:
Использование библиотеки предварительной обработкиPolynomialFeatures
Класс выполняет полиномиальное преобразование данных, код выглядит следующим образом:
from sklearn.preprocessing import PolynomialFeatures # 多项式转换
# 参数degree,默认值为2
ploy = PolynomialFeatures().fit_transform(iris.data)
print(ploy.shape) # (150, 15)
print(ploy[:1,:]) # [[ 1. 5.1 3.5 1.4 0.2 26.01 17.85 7.14 1.02 12.25 4.9 0.7 1.96 0.28 0.04]]
PolynomialFeatures
Описание параметра класса:
- степень: контролирует степень многочлена;
- interaction_only: По умолчанию False.Если указать True, то не будет элементов, объединяющих саму функцию и саму себя, и нет элемента, аналогичного объединенной функции. и предмет;
- include_bias: По умолчанию True, если True, то в результате будет 0-й элемент мощности, то есть столбец из всех 1.
еслиinteraction_only=True
, 3 функции, формула преобразования полинома степени полинома 2 выглядит следующим образом:
Преобразование данных на основе логарифмической функции
Преобразование данных логарифмической функции — это преобразование данных, основанное на функции одной переменной.
Использование библиотеки предварительной обработкиFunctionTransformer
Логарифмическая функция преобразования данных, код выглядит следующим образом:
from numpy import log1p
from sklearn.preprocessing import FunctionTransformer
# FunctionTransformer:自定义预处理函数,进行特征映射
# 这里使用自定义转换函数进行对数函数的数据变换
# 第一个参数是单变元函数
log_one = FunctionTransformer(log1p).fit_transform(iris.data)
print(log_one.shape) # (150, 4)
print(log_one[:1,:]) # [[1.80828877 1.5040774 0.87546874 0.18232156]]
Суммировать
Предварительная обработка данных предназначена для получения чистых данных, чтобы модель могла лучше понимать и изучать данные, но процесс предварительной обработки - это не только вышеуказанное содержание, многие процессы обработки тесно интегрированы с целью анализа данных, эта статья является лишь краткой. введение Некоторые распространенные методы предварительной обработки данных. Как показано в следующей таблице:
своего рода | Функции | инструкция |
---|---|---|
StandardScaler | стандартизация | Преобразуйте собственные значения, чтобы следовать стандартному нормальному распределению на основе столбцов собственной матрицы |
MinMaxScaler | Нормализованный | Интервальное масштабирование, преобразование собственных значений на основе максимального и минимального значений[0, 1] интервал |
Normalizer | Регуляризация | Преобразование выборочного вектора в «единичную норму» на основе строк матрицы признаков. |
Binarizer | Бинаризация | Разделить количественные признаки порогом на основе заданного порога |
OneHotEncoder | однократное кодирование | Кодирование качественных данных в количественные данные |
SimpleImputer | Завершение пропущенного значения | Вменение отсутствующих значений, отсутствующие значения могут быть заполнены средним значением и т. д. |
PolynomialFeatures | Полиномиальное преобразование данных | Полиномиальное преобразование данных |
FunctionTransformer | Пользовательское преобразование данных ячеек | Преобразование данных с помощью функций одной переменной |