Проблема нормализации данных является важной проблемой при выражении векторов признаков при интеллектуальном анализе данных.Когда разные признаки группируются вместе, маленькие данные по абсолютному значению «съедаются» большими данными из-за того, как выражается сам признак. », то сейчас нам нужно нормализовать вектор извлеченных признаков, чтобы убедиться, что классификатор одинаково обрабатывает все признаки. Несколько общих из них были представлены в предыдущих статьях.Методы нормализации данных, здесь в основном рассказывается, как преобразовать эти формулы и методы в код обработки Python.
Мин-макс нормализация
Также известная как нормализация дисперсии, это линейное преобразование исходных данных, при котором результирующие значения отображаются между [0 — 1]. Функция преобразования выглядит следующим образом:
x_min представляет минимальное значение выборочных данных, а x_max представляет максимальное значение выборочных данных.
Реализация кода Python:
def max_min_normalization(x, max, min):
return (x - min) / (max - min)
или:
def max_min_normalization(x):
return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]
В дополнение к использованию max и min, которые идут со списком, рекомендуется использовать np.max и np.min для определения размера, потому что функция более мощная.
>>> a = np.array([[0, 1, 6], [2, 4, 1]])
>>> np.max(a)
6
>>> np.max(a, axis=0) # max of each column
array([2, 4, 6])
Ссылка на ссылку:stackoverflow.com/questions/3…
Если вы хотите сопоставить данные с [-1,1], замените формулу на:
x_mean представляет среднее значение.
Реализация кода Python:
import numpy as np
def normalization(x):
return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]
Недостатком этого метода стандартизации является то, что если в данных есть некоторые выбросы, которые отклоняются от нормальных данных, это приведет к неточности стандартизированных результатов.
нормализация z-показателя
Метод нормализации z-показателя подходит для ситуаций, когда максимальное и минимальное значения атрибута А неизвестны или когда имеются выбросы данных за пределами диапазона значений. Этот метод нормализует данные, давая среднее значение и стандартное отклонение исходных данных.
Обработанные данные соответствуют стандартному нормальному распределению, то есть среднее значение равно 0, стандартное отклонение равно 1, а функция преобразования:
где μ — среднее значение всех выборочных данных, а σ — стандартное отклонение всех выборочных данных.
Реализация Python:
def z_score_normalization(x,mu,sigma):
return (x - mu) / sigma
mu — это среднее значение, а sigma — разница между метками, поэтому код можно переписать так:
#定义数组:x = numpy.array(x)
#获取二维数组列方向的均值:x.mean(axis = 0)
#获取二维数组列方向的标准差:x.std(axis = 0)
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x = numpy.array(x)
def z_score(x):
return (x - np.mean(x)) / np.std(x, ddof = 1)
Метод нормализации z-оценки также влияет на выбросы. Улучшенная стандартизация z-оценки: изменено среднее значение на медиану и стандартное отклонение на абсолютное отклонение в формуле стандартной оценки.
Медиана состоит в том, чтобы отсортировать все данные и взять среднее значение.Если количество данных четное, возьмите среднее значение двух средних данных.
# 中位数 英文:median
# 对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。
# 如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。
def get_median(data):
data = sorted(data)
size = len(data)
if size % 2 == 0: # 判断列表长度为偶数
median = (data[size/2]+data[size/2-1])/2
if size % 2 == 1: # 判断列表长度为奇数
median = data[(size-1)//2]
return median
Σ1 - абсолютное отклонение всех данных образца, которое рассчитывается как:
Сигмовидная функция
Сигмовидная функция представляет собой функцию с S-образной кривой и является хорошей пороговой функцией.Она центрально-симметрична при (0, 0,5) и имеет относительно большой наклон около (0, 0,5), а когда данные стремятся к положительной бесконечности и отрицательная бесконечность Когда отображаемые значения будут бесконечно стремиться к 1 и 0, что является «методом нормализации», который мне очень нравится Причина, по которой я помещаю кавычки, заключается в том, что я думаю, что сигмовидная функция также имеет очень хорошая производительность в пороговой сегментации.Согласно формулеЕсли изменение , порог сегментации может быть изменен.Здесь, как метод нормализации, мы рассматриваем только точку (0, 0,5) в качестве порога сегментации:
Реализация Python:
def sigmoid(X,useStatus):
if useStatus:
return 1.0 / (1 + np.exp(-float(X)));
else:
return float(X);
Здесь useStatus управляет тем, использовать ли статус сигмоида, что удобно для отладки.
Нормализация в sklearn
sklearn.preprocessing предоставляет некоторые служебные функции для управления размерами данных для использования алгоритмами.
1) Масштабирование среднего стандартного отклонения
То есть наша соответствующая нормализация z-показателя выше.
from sklearn import preprocessing
import numpy as np
x_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
x_scaled = preprocessing.scale(x_train)
print(x_scaled)
# output:
# [[ 0. -1.22474487 1.33630621]
# [ 1.22474487 0. -0.26726124]
# [-1.22474487 1.22474487 -1.06904497]]
2) минимальная нормализация
from sklearn import preprocessing
import numpy as np
x_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
min_max_scaler = preprocessing.MinMaxScaler()
x_train_minmax = min_max_scaler.fit_transform(x_train)
print(x_train_minmax)
# output:
# [[ 0.5 0. 1. ]
# [ 1. 0.5 0.33333333]
# [ 0. 1. 0. ]]
3) Нормализация максимального значения (каждое значение/максимальное значение каждого измерения)
from sklearn import preprocessing
import numpy as np
x_train = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
max_abs_scaler = preprocessing.MaxAbsScaler()
x_train_maxabs = max_abs_scaler.fit_transform(x_train)
print(x_train_maxabs)
# output:
# [[ 0.5 -1. 1. ]
# [ 1. 0. 0. ]
# [ 0. 1. -0.5]]
4) Нормализация
Нормализация является основой моделей векторного пространства при классификации и кластеризации текста.
from sklearn import preprocessing
import numpy as np
x_train = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
x_normalized = preprocessing.normalize(x_train, norm='l2')
print(x_normalized)
# output:
# [[ 0.40824829 -0.40824829 0.81649658]
# [ 1. 0. 0. ]
# [ 0. 0.70710678 -0.70710678]]
норма Этот параметр является необязательным.Значением по умолчанию является l2 (сумма квадратов элементов вектора, а затем квадратный корень), который используется для нормализации каждого ненулевого вектора.Если для параметра оси установлено значение 0, это означает, что нормируется каждый ненулевой вектор размерности признака.
Для получения подробной информации см.:Регуляризация нормы L0, L1 и L2 норма
5) Бинаризация (преобразование данных в 0 и 1)
from sklearn import preprocessing
import numpy as np
x_train = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
binarizer = preprocessing.Binarizer().fit(x_train)
print(binarizer)
print(binarizer.transform(x_train))
# output:
# Binarizer(copy=True, threshold=0.0)
# [[ 1. 0. 1.]
# [ 1. 0. 0.]
# [ 0. 1. 0.]]
Ссылка на ссылку: