用sklearn.preprocessing做数据预处理(二)——Normalization

Normalization(正则化,也有部分地方叫归一化,至于哪个翻译更准确这里不做讨论,暂且称作正则化)是将样本在向量空间模型上的一个转换,经常被使用在分类与聚类中
函数normalize提供了一个快速又简单的方式在一个单向量上来实现这正则化的功能。正则化有l1,l2等,这些都可以用上

from sklearn import preprocessing
import numpy as np

x = np.array([[1.,-1.,2.],
             [2.,0.,0.],
             [0.,1.,-1.]])

x_normalized = preprocessing.normalize(x, norm='l2')
x_normalized

array([[ 0.40824829, -0.40824829,  0.81649658],
       [ 1.        ,  0.        ,  0.        ],
       [ 0.        ,  0.70710678, -0.70710678]])

x_normalized = preprocessing.normalize(x, norm='l1')
x_normalized

array([[ 0.25, -0.25,  0.5 ],
       [ 1.  ,  0.  ,  0.  ],
       [ 0.  ,  0.5 , -0.5 ]])

preprocessing这个模块还提供了一个实用类Normalizer,使用transform方法同样也可以对新的数据做同样的转换
根据训练数据创建一个正则器

normalizer = preprocessing.Normalizer().fit(x)
normalizer

Normalizer(copy=True, norm='l2')

对训练数据进行正则
normalizer.transform(x)

array([[ 0.40824829, -0.40824829,  0.81649658],
       [ 1.        ,  0.        ,  0.        ],
       [ 0.        ,  0.70710678, -0.70710678]])

对新的测试数据进行正则
normalizer.transform([[-1,1,0]])

array([[-0.70710678,  0.70710678,  0.        ]])

normalize和Normalizer都既可以用在密集数组也可以用在稀疏矩阵(scipy.sparse)中
对于稀疏的输入数据,它会被转变成维亚索的稀疏行表征(具体请见scipy.sparse.csr_matrix)

猜你喜欢

转载自blog.csdn.net/weixin_44530236/article/details/88077395