规范化数据并避免除以零

数据挖掘 神经网络 正常化
2021-10-13 21:52:00

我有使用 AutoEncoders(3 层神经网络)压缩的数据,我想先规范化我的数据。我想尝试使用编码的潜在向量并将其输入异常检测算法,看看会发生什么。

我想对自动编码器的数据进行规范化,因此我的值介于 0,1 或 -1,-1 之间,因为我的输出激活函数将是 sigmoid 或 tanh。这样我的算法可以训练并且输入将与 NN 的输出值在同一范围内。

但是,当我用

x(i)-xmean/(xmax-xmin) 

我最终在给出 NaN 的数据的几个特征中除以 0。是否可以对我的数据进行规范化,使其介于 -1,1 或 0,1 之间,同时避免为我的数据除以 0?

2个回答

虽然您可以手动执行此操作,但 Python 也有一个方便的小函数,称为MinMaxScaler,它将自动应用 max-min 归一化以在01之间缩放数据。

假设我们有一个包含 200 个变量值的数组st

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

mu, sigma = 20, 10 # mean and standard deviation
s = np.random.normal(mu, sigma, 200)
t = np.random.normal(mu, sigma, 200)

如有必要,重塑变量:

s=np.reshape(s,(-1,1))
t=np.reshape(t,(-1,1))

现在,您可以看到我们正在形成两个新变量snewtnew,我们正在使用MinMaxScaler 对其进行缩放。

scaler = MinMaxScaler()
print(scaler.fit(s))
print(scaler.fit(s))
snew=scaler.transform(s)
tnew=scaler.transform(t)

这是我们的新变量的示例:

>>> snew
array([[0.24896606],
       [0.63121206],
       [0.60448469],
       .......
       [0.49044733],
       [0.28131596],
       [0.32909155]

>>> tnew
array([[0.91224005],
       [0.74540598],
       [0.3938718 ],
       .......
       [0.75749275],
       [0.80709325],
       [0.19440844]

正如其他人指出的那样,您可以使用以下步骤规范化或标准化您的数据。我确信其他库也有类似的功能,但我认为这是有效的。

由于您要求标准化,我将在这篇文章中介绍该主题。正如其他人所提到的,数据规范化是研究人员或数据科学从业者使给定数据集中的所有值按比例分布在 0 和 1 之间的过程。

要实现规范化,请执行以下步骤:

from sklearn.datasets import load_iris
from sklearn import preprocessing

iris = load_iris()
print(iris.data.shape)

X_data = iris.data
y_labels = iris.target

normalized_X_data = preprocessing.normalize(X_data)