Нормализация данных с помощью Python

Python

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

Мин-макс нормализация

Также известная как нормализация дисперсии, это линейное преобразование исходных данных, при котором результирующие значения отображаются между [0 — 1]. Функция преобразования выглядит следующим образом:

\[{x}_{normalization}=\frac{x-Min}{Max-Min}\]

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}_{normalization}=\frac{x-x_{mean}}{Max-Min}\]

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, а функция преобразования:

\[{x}_{normalization}=\frac{x-\mu }{\sigma }\]

где μ — среднее значение всех выборочных данных, а σ — стандартное отклонение всех выборочных данных.

Реализация 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-оценки: изменено среднее значение на медиану и стандартное отклонение на абсолютное отклонение в формуле стандартной оценки.

\[{x}_{normalization}=\frac{x-{x}_{center} }{\sigma_1 }\]

Медиана состоит в том, чтобы отсортировать все данные и взять среднее значение.Если количество данных четное, возьмите среднее значение двух средних данных.

# 中位数 英文: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 - абсолютное отклонение всех данных образца, которое рассчитывается как:

\[\frac{1}{N} \sum_{1}^{n}|x_{i} - x_{center}|\]

Сигмовидная функция

Сигмовидная функция представляет собой функцию с S-образной кривой и является хорошей пороговой функцией.Она центрально-симметрична при (0, 0,5) и имеет относительно большой наклон около (0, 0,5), а когда данные стремятся к положительной бесконечности и отрицательная бесконечность Когда отображаемые значения будут бесконечно стремиться к 1 и 0, что является «методом нормализации», который мне очень нравится Причина, по которой я помещаю кавычки, заключается в том, что я думаю, что сигмовидная функция также имеет очень хорошая производительность в пороговой сегментации.Согласно формулеЕсли изменение , порог сегментации может быть изменен.Здесь, как метод нормализации, мы рассматриваем только точку (0, 0,5) в качестве порога сегментации:

\[{x}_{normalization}=\frac{1}{1+{e}^{-x}}\]

Реализация 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.]]

Ссылка на ссылку: