本关任务:利用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 *********#