标准化(Scale)和正则化(Normalization)是两种常用的数据预处理方法,其作用是让数据变得更加“规范”一些。在文本聚类等任务中使用的比较多。
针对某数据,如果不适用数据标准化、正则化,展示的情况如下图
1.数据标准化
公式为:(X-mean)/std 计算时对每个属性/每列分别进行。将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。经过数据标准化的数据如下图:可以看到有些特征被凸显出来了。
2.数据正则化
正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。
Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。
该方法主要应用于文本分类和聚类中。例如,对于两个TF-IDF向量的l2-norm进行点积,就可以得到这两个向量的余弦相似性。
在sklearn中有三种正则化方法,l1范数、l2范数、max范数。
使用这三种范数生成的结果如下图所示:
在肉眼上很难看出有什么区别,不过还是能看出l2范数的结果相对更好,即能尽可能的削弱“强势”特征,将一些数值较小但是比较有特点的特征“凸显”出来。
使用方法参照sklearn官方文档就可以了,非常简单:
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.scale.html#sklearn.preprocessing.scale
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.normalize.html#sklearn.preprocessing.normalize