本关任务:利用sklearn对数据进行归一化。
为什么使用归一化
归一化是缩放单个样本以具有单位范数的过程。归一化能够加快模型训练速度,统一特征量纲,避免数值太大。值得注意的是,归一化是对每一个样本做转换,所以是对数据的每一行进行变换。而之前我们讲过的方法是对数据的每一列做变换。
L1范数归一化
L1范数就是向量各元素的绝对值之和,也被称为是"稀疏规则算子,有两个好处:
 1、特征选择
 2、可解释性
代码实现
from sklearn.preprocessing import normalize
data = np.array([[-1,0,1],
                 [1,0,1],
                 [1,2,3]])
data = normalize(data,'l1')
L2范数归一化
L2范数就是欧几里何距离,以L2范数作为正则项可以得到稠密解,即每个特征对应的参数w
代码实现:
from sklearn.preprocessing import normalize
data = np.array([[-1,0,1],
                 [1,0,1],
                 [1,2,3]])
data = normalize(data,'l2')
编程要求
根据提示,在右侧编辑器Begin-End处补充Python代码,实现数据归一化方法,我们会使用实现好的方法对数据进行处理。
测试说明
 我们会调用你实现的方法对数据进行处理,如数据为:
data = np.array([[-1,0,1],
 [1,0,1],
 [1,2,3]])
 使用L1归一化则输出为:
array([[-0.5 , 0. , 0.5 ],
 [ 0.5 , 0. , 0.5 ],
 [ 0.167, 0.333, 0.5 ]])
 使用L2归一化则输出为:
array([[-0.707, 0. , 0.707],
 [ 0.707, 0. , 0.707],
 [ 0.267, 0.535, 0.802]])
 数据处理正确则视为通关。
# -*- coding: utf-8 -*-
from sklearn.preprocessing import normalize
#实现数据归一化方法
def normalization(x,y):
    '''
    x(ndarray):待处理数据
    y(int):y等于1则使用"l1"归一化
           y等于2则使用"l2"归一化
    '''
    #********* Begin *********#
    if y==1:
           data = normalize(x,'l1')
    elif y==2:
           data = normalize(x,'l2')
    return data
    #********* End *********#










