既然讲到归一化和前面的标准化需要对比一下,首先二者处理的维度是不一样的,假设我们要处理的矩阵是 m*n 大小,m 个样本,n 维特征

标准化处理的方式是以列为单位,也就是处理的对象是

mkk=1..nm∗kk=1……..n

归一化处理的方式却是以行为单位,处理的对象如下:

knk=1..mk∗nk=1……..m

归一化处理对样本的特征向量处理之后使其变为单位向量,单位向量可以用于点积运算或者计算样本之间相似度

L2 归一化的计算公式如下所示:

y=xni=0x2y=x∑i=0nx2

L1 归一化的计算公式如下所示

y=xni=0xy=x∑i=0n‖x‖

sklearn 代码

  1. from sklearn.preprocessing import Normalizer
  2. tmp=Normalizer().fit_transform(irisdata.data)
  3. print tmp[0:5]

实验结果如下

  1. [[ 0.80377277 0.55160877 0.22064351 0.0315205 ]
  2. [ 0.82813287 0.50702013 0.23660939 0.03380134]
  3. [ 0.80533308 0.54831188 0.2227517 0.03426949]
  4. [ 0.80003025 0.53915082 0.26087943 0.03478392]
  5. [ 0.790965 0.5694948 0.2214702 0.0316386 ]]

spark 代码如下

  1. from pyspark.ml.feature import Normalizer
  2.  
  3. dataFrame = sqlContext.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
  4.  
  5. # p=2 则表示是 l2 归一化
  6. normalizer = Normalizer(inputCol="features", outputCol="normFeatures", p=1.0)
  7. l1NormData = normalizer.transform(dataFrame)
  8. l1NormData.show()
posted on 2018-05-08 18:57  yuluoxingkong  阅读(443)  评论(0编辑  收藏  举报