Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.
Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
1. Работа с непрерывными функциями: бинаризация и сегментация
- sklearn.preprocessing.Binarizer
Бинаризуйте данные в соответствии с порогом (установите собственные значения на 0 или 1) для непрерывных переменных. Значения, превышающие пороговое значение, сопоставляются с 1, а значения, меньшие или равные пороговому значению, сопоставляются с 0. При пороговом значении по умолчанию 0 все положительные значения в признаке сопоставляются с 1. Бинаризация — это обычная операция над данными подсчета текста, когда аналитик может принять решение учитывать только наличие или отсутствие явления. Его также можно использовать в качестве этапа предварительной обработки для оценок, учитывающих булевы случайные величины (например, моделирование с помощью распределения Бернулли в байесовских условиях).
#将年龄二值化
data_2 = data.copy()
from sklearn.preprocessing import Binarizer
X = data_2.iloc[:,0].values.reshape(-1,1) #类为特征专用,所以不能使用一维数组
transformer = Binarizer(threshold=30).fit_transform(X)
data_2.iloc[:,0] = transformer
data_2.head()
- . preprocessing.KBinsDiscretizer
Это класс, который делит непрерывные переменные на категориальные переменные.Непрерывные переменные можно сортировать и группировать по порядку, а затем кодировать. Всего есть три важных параметра;
- n_bins
- Количество бинов в каждой функции, по умолчанию — 5, которые будут применяться ко всем импортированным методам кодирования функций одновременно, по умолчанию — «onehot».
- «onehot»: создайте фиктивную переменную, а затем верните разреженную матрицу, каждый столбец представляет собой категорию в функции, выборка, содержащая эту категорию, представлена как 1, а выборка без нее представлена как 0
- encode
- «порядковый»: каждый бин каждой функции кодируется как целое число, возвращает матрицу, в которой каждый столбец является функцией, и каждая функция содержит бины, закодированные разными целыми числами.
- "onehot-dense": создайте фиктивные переменные, а затем верните плотный массив. Способ определения ширины бина, по умолчанию — «квантиль».
- «uniform»: указывает на бинирование равной ширины, то есть разница между максимальными значениями каждого бина в каждой функции составляет
- strategy
- (features.max()-features.min))/(n_bins)
- «quantile»: указывает на равный биннинг, то есть количество выборок в каждом бине в каждой функции одинаково.
- «kmeans»: означает объединение в бины путем кластеризации, значения в каждом бине имеют одинаковое расстояние от опыта кластера до ближайшей одномерной кластеризации k-средних
from sklearn.preprocessing import KBinsDiscretizer
X = data.iloc[:,0].values.reshape(-1,1)
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
est.fit_transform(X)
#查看转换后分的箱:变成了一列中的三箱
set(est.fit_transform(X).ravel())
est = KBinsDiscretizer(n_bins=3, encode='onehot', strategy='uniform')
#查看转换后分的箱:变成了哑变量
est.fit_transform(X).toarray()
Выбор двух функций feature_selection
#导入数据,让我们使用digit recognizor数据来一展身手
import pandas as pd
data = pd.read_csv(r".\digit recognizor.csv")
X = data.iloc[:,1:]
y = data.iloc[:,0]
X.shape
"""
这个数据量相对夸张,如果使用支持向量机和神经网络,很可能会直接跑不出来。使用KNN跑一次大概需要半个小时。
用这个数据举例,能更够体现特征工程的重要性。
"""
Метод фильтрации с тремя фильтрами
Методы фильтрации часто используются в качестве этапа предварительной обработки, а выбор признаков полностью независим от какого-либо алгоритма машинного обучения. Он выбирает функции на основе результатов различных статистических тестов и показателей корреляции. 3.1 Фильтрация отклонений VarianceThreshold Это класс для фильтрации объектов по их собственной дисперсии. Например, если дисперсия самого признака очень мала, это означает, что между выборками по этому признаку в принципе нет различий, возможно, что большинство значений в признаке совпадают, или даже значение всего признака одинаков, тогда этот признак не влияет на различение выборки. Следовательно, независимо от того, что будет делать следующая разработка признаков, в первую очередь должны быть исключены признаки с нулевой дисперсией. VarianceThreshold имеет важный параметр threshold, который представляет собой порог дисперсии, что означает отбрасывание всех признаков, дисперсия которых меньше порога.Если не заполнено, значение по умолчанию равно 0, то есть удаляются все записи с одним и тем же признаком.