归一化,标准化和正则化,二值化
概念和含义
数据归一化:将数据集中某一列数值特征的值缩放到0-1区间内
\[z= \frac{X-min(X)}{max(X)-min(X)} \]对不同特征维度进行伸缩变换,把有量纲表达式变为无量纲表达式;
改变原始数据的分布,使得各个特征维度对目标函数的影响权重归于一致;
最大值与最小值非常容易受异常点影响,鲁棒性较差。
数据标准化:将数据集中某一列数值特征的值缩放成平均值为0,标准差为1的状态
\[z = \frac{x_i-\bar{x}}{std(x)} \]对不同特征维度的伸缩变换使其不同度量之间的特征具有可比性;
不改变原始数据的分布,保持各个特征维度对目标函数的影响权重;
对目标函数的影响体现在几何分布上。
数据正则化:将数据集中某一个样本缩放成单位标准
正则化是缩放单个样本以具有单位范数的过程。正则化有时也叫归一化,正规化。如果你计划使用
二次形式(如点积或任何其他核函数)来量化任何样本间的相似度,则此过程将非常有用。
主要应用于文本分类和聚类中。
\[z = \frac{x_i}{||x||_p} \]标准化/归一化API实现
- StandardScaler: 缩放至0均值,1标准差。
- MinMaxScaler: 缩放至[0,1]之间,也可以指定范围feature_range。
- MaxAbsScaler: 缩放至[-1,1]之间,无偏移。
- RobustScaler:缩放有异常值的特征。
最大最小标准化
minmaxscaler = preprocessing.MinMaxScaler(feature_range = (0,1))
minmaxscaler.fit(df.values)
data = minmaxscaler.transform(df.values)
dfscaled = pd.DataFrame(data,columns = list(boston.feature_names))
dfscaled.plot(legend = False)
RobustScaler——用于有异常值的特征
此时既能保留异常值,又能防止异常值对整体的影响
x = np.array([10,1000,0,0,-30,0,20,0,10,0,0,-10])
x = x.reshape(-1,1)
robustscaler = preprocessing.RobustScaler(with_centering=True, with_scaling=True,
quantile_range=(25.0, 75.0), copy=True)
print(robustscaler.fit_transform(x))
MaxAbsScaler——缩放稀疏矩阵
此时不改变0的个数和位置,其他元素被缩放
y = np.array([0]*95+[0.0,20,0,10,-10])
y = y.reshape(-1,1)
scaler = preprocessing.MaxAbsScaler(copy=True)
z = scaler.fit_transform(y)
z[-10:]
特征的正则化
from sklearn import preprocessing
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
# 使用normalize函数
X_normalized = preprocessing.normalize(X, norm='l2')
print(X_normalized)
# 也可以使用Normalizer类
normalizer = preprocessing.Normalizer(norm = 'l1')
normalizer.fit(X)
normalizer.transform(X)
特征的二值化
特征二值化是将数值特征用阈值过滤得到布尔值的过程。
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
binarizer = preprocessing.Binarizer().fit(X) # fit does nothing
binarizer
binarizer.transform(X)
设定一个阈值
binarizer = preprocessing.Binarizer(threshold=1.1)
binarizer.transform(X)
参考博客
[1] 数据归一化、标准化、正则化_zhouhaomy的博客-CSDN博客