Используйте sklearn для разработки функций автономной версии.

машинное обучение

Что такое разработка признаков? Что такое разработка признаков? Разработка признаков заключается в подготовке к обучению модели и выполнении различной предварительной обработки данных.

В отрасли широко распространена поговорка: данные и функции определяют верхний предел машинного обучения, а модели и алгоритмы лишь приближаются к этому верхнему пределу. Так что же такое фиче-инжиниринг? Как следует из названия, это, по сути, инженерная деятельность, направленная на максимальное извлечение функций из необработанных данных для использования алгоритмами и моделями. Обобщая и обобщая, считается, что разработка признаков включает в себя следующие аспекты:

image.png

sklearn предоставляет относительно полный метод обработки признаков.В этой статье используется набор данных IRIS (Iris) в sklearn для описания функции обработки признаков на примере sklearn. Набор данных IRIS был организован Фишером в 1936 году и содержит 4 признака (Sepal.Length (длина чашелистика), Sepal.Width (ширина чашелистика), Petal.Length (длина лепестка), Petal.Width (ширина лепестка)), значения признаков Оба положительные числа с плавающей запятой в сантиметрах. Целевым значением является классификация ирисов (Iris Setosa, Iris Versicolour, Iris Virginica). Код для импорта набора данных IRIS выглядит следующим образом:


#导入IRIS数据集
iris = load_iris()

#特征矩阵
iris.data

#目标向量
iris.target

Проблемы, возникающие при извлечении признаков:

Не принадлежит к одному и тому же измерению: то есть характеристики функций различны и не могут сравниваться вместе. Безразмерность может решить эту проблему. Информационная избыточность: для некоторых количественных характеристик эффективная информация, содержащаяся в них, разбита на интервалы, например, академическая успеваемость.Если вас интересует только «сдача» или «сдача», то вам необходимо преобразовать количественные оценки теста в «1». и «0» указывает на пройдено и не пройдено. Бинаризация может решить эту проблему. Качественные признаки нельзя использовать напрямую: некоторые алгоритмы и модели машинного обучения могут принимать ввод только количественных признаков, поэтому необходимо преобразовать качественные признаки в количественные. Проще всего указать количественное значение для каждого качественного значения, но этот метод слишком гибкий и увеличивает работу по настройке параметров. Фиктивное кодирование обычно используется для преобразования качественных признаков в количественные: если предположить, что имеется N видов качественных значений, этот признак расширяется до N видов признаков.Когда исходным значением признака является i-е качественное значение, расширенной функции присвоено значение 1, а другим расширенным функциям присвоено значение 0. По сравнению с прямым указанным методом метод фиктивного кодирования не требует увеличения работы по настройке параметров.Для линейных моделей использование фиктивных кодированных функций может привести к нелинейным эффектам. Этот метод также называется методом onehot. Есть пропущенные значения: Пропущенные значения необходимо дополнить. Низкое использование информации: разные алгоритмы и модели машинного обучения используют разную информацию в данных.Как упоминалось ранее, в линейной модели использование фиктивного кодирования качественных признаков может привести к нелинейным эффектам. Точно так же полиномиализация количественных переменных или другие преобразования могут привести к нелинейным эффектам. Мы используем библиотеку предварительной обработки в sklearn для предварительной обработки данных.Вышеуказанные проблемы могут быть решены в автономном случае.На самом деле, их также можно решить с помощью numpy и pandas.

1 Для стандартизации необходимо рассчитать среднее значение и стандартное отклонение признака, и формула выражается следующим образом:

X=(X-Mean)/std

Код для стандартизации данных с использованием класса StandardScaler библиотеки предварительной обработки выглядит следующим образом:

2 
3 #标准化,返回值为标准化后的数据
4 StandardScaler().fit_transform(iris.data)

2 Есть много идей для метода интервального масштабирования.Общим является использование двух максимальных значений для масштабирования.Формула выражается как:

x=(x-min)/(Max-min)

Код для интервального масштабирования данных с использованием класса MinMaxScaler библиотеки предварительной обработки выглядит следующим образом:

2 
3 #区间缩放,返回值为缩放到[0, 1]区间的数据
4 MinMaxScaler().fit_transform(iris.data)

3 Нормализация:

2 
3 #归一化,返回值为归一化后的数据
4 Normalizer().fit_transform(iris.data)

4 Суть бинаризации количественного признака заключается в установке порога, значение выше порога присваивается как 1, а значение меньше или равно порогу присваивается как 0, код выглядит следующим образом

2 
3 #二值化,阈值设置为3,返回值为二值化后的数据
4 Binarizer(threshold=3).fit_transform(iris.data)

5горячее кодирование:

2 
3 #哑编码,对IRIS数据集的目标值,返回值为哑编码后的数据
4 OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))

6 Расчет недостающих значений

from sklearn.preprocessing import Imputer

#缺失值计算,返回值为计算缺失值后的数据
#参数missing_value为缺失值的表示形式,默认为NaN
#参数strategy为缺失值填充方式,默认为mean(均值)
Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))

7 Преобразование данных

2 
3 #多项式转换
4 #参数degree为度,默认值为2
5 PolynomialFeatures().fit_transform(iris.data)

Преобразование данных на основе функции одной переменной может быть выполнено унифицированным способом.Код для логарифмического преобразования данных с использованием FunctionTransformer библиотеки предварительной обработки выглядит следующим образом:

2 from sklearn.preprocessing import FunctionTransformer
3 
4 #自定义转换函数为对数函数的数据变换
5 #第一个参数是单变元函数
6 FunctionTransformer(log1p).fit_transform(iris.data)

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

Является ли признак расходящимся: если признак не расходится, например, дисперсия близка к 0, то есть образцы практически не различаются по этому признаку, и этот признак бесполезен для различения образцов. Корреляция между функциями и целями. Очевидно, что в первую очередь следует выбирать функции с высокой корреляцией с целями. За исключением метода дисперсии, все другие методы, представленные в этой статье, рассматриваются на основе корреляции. По форме выбора признаков методы выбора признаков можно разделить на три типа:

Фильтр: метод фильтрации, оценка каждой функции в соответствии с дивергенцией или корреляцией, установка порогового значения или количества пороговых значений для выбора и выбор функций. Обертка: метод обертки в соответствии с целевой функцией (обычно оценкой эффекта прогнозирования) выбирает несколько функций одновременно или исключает несколько функций. Встроенный: встроенный метод, сначала используйте некоторые алгоритмы и модели машинного обучения для обучения, получите весовые коэффициенты каждой функции и выберите функции от больших до малых в соответствии с коэффициентами. Аналогичен методу Filter, но качество признаков определяется обучением. Мы используем библиотеку feature_selection в sklearn для выбора функций.

8Метод выбора дисперсии фильтра:

Используя метод выбора дисперсии, сначала вычислите дисперсию каждого признака, а затем выберите признаки с дисперсией, превышающей пороговое значение, в соответствии с пороговым значением. Код для выбора функций с использованием класса VarianceThreshold библиотеки feature_selection выглядит следующим образом.

2 
3 #方差选择法,返回值为特征选择后的数据
4 #参数threshold为方差的阈值
5 VarianceThreshold(threshold=3).fit_transform(iris.data)

9Метод коэффициента корреляции фильтра

Чтобы использовать метод коэффициента корреляции, сначала вычислите коэффициент корреляции каждой функции с целевым значением и значением P коэффициента корреляции. Код для выбора объектов с использованием класса SelectKBest библиотеки feature_selection в сочетании с коэффициентом корреляции выглядит следующим образом:

from scipy.stats import pearsonr

#选择K个最好的特征,返回选择特征后的数据
#第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
#参数k为选择的特征个数
SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

10. Фильтрация критерия хи-квадрат

Классический тест хи-квадрат предназначен для проверки корреляции между качественными независимыми переменными и качественными зависимыми переменными. Предполагая, что независимая переменная имеет N значений, а зависимая переменная имеет M значений, рассмотрим разницу между наблюдаемым значением и ожидаемой частотой выборки, когда независимая переменная равна i, а зависимая переменная равна j, а статистика равна Формула очень сложная, и код прямо на ней:

2 from sklearn.feature_selection import chi2
3 
4 #选择K个最好的特征,返回选择特征后的数据
5 SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

Код гораздо проще формулы, а человеческая природа гораздо больше, и формула обманчива.

11Фильтровать метод взаимной информации

Для работы с количественными данными предлагается метод максимального информационного коэффициента с использованием класса SelectKBest библиотеки feature_selection в сочетании с методом максимального информационного коэффициента для выбора признаков Код выглядит следующим образом:

from minepy import MINE

#由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5
def mic(x, y):
    m = MINE()
    m.compute_score(x, y)
    return (m.mic(), 0.5)

#选择K个最好的特征,返回特征选择后的数据
SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

Метод рекурсивного исключения 12Wrapper:

Метод рекурсивного исключения признаков использует базовую модель для нескольких раундов обучения.После каждого раунда обучения исключаются признаки нескольких весовых коэффициентов, а затем выполняется следующий раунд обучения на основе нового набора признаков. Код для выбора объектов с использованием класса RFE библиотеки feature_selection выглядит следующим образом:

from sklearn.linear_model import LogisticRegression

#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)

Здесь вы можете выбрать использование чужой модели

13Embedded использует базовую модель со штрафными условиями, помимо фильтрации признаков, она также снижает размерность. Используя класс SelectFromModel библиотеки feature_selection в сочетании с моделью логистической регрессии с условием штрафа L1, код для выбора функций выглядит следующим образом:

2 from sklearn.linear_model import LogisticRegression
3 
4 #带L1惩罚项的逻辑回归作为基模型的特征选择
5 SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)

Используя класс SelectFromModel библиотеки feature_selection в сочетании с моделью логистической регрессии с штрафными условиями L1 и L2, код для выбора функций выглядит следующим образом:

2 
3 #带L1和L2惩罚项的逻辑回归作为基模型的特征选择
4 #参数threshold为权值系数之差的阈值
5 SelectFromModel(LR(threshold=0.5, C=0.1)).fit_transform(iris.data, iris.target)

GBDT в древовидной модели также можно использовать в качестве базовой модели для выбора функций.Используя класс SelectFromModel библиотеки feature_selection в сочетании с моделью GBDT, код для выбора функций выглядит следующим образом:

2 from sklearn.ensemble import GradientBoostingClassifier
3 
4 #GBDT作为基模型的特征选择
5 SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)

14PCA уменьшение размерности:

2 
3 #主成分分析法,返回降维后的数据
4 #参数n_components为主成分数目
5 PCA(n_components=2).fit_transform(iris.data)

уменьшение размерности свд заключается в замене вышеуказанного пса на свд

15LDA уменьшение размера

2 
3 #线性判别分析法,返回降维后的数据
4 #参数n_components为降维后的维数
5 LDA(n_components=2).fit_transform(iris.data, iris.target)

Итак, как вы можете видеть, использование API всегда проще и понятнее, чем формулы, поэтому, как наука о данных, не слишком запутывайтесь в формулах, а сосредоточьтесь на инженерной практике.