2018年2月28日 星期三

sklearn.preprocessing.Normalizer 使用

sklearn.preprocessing.Normalizer



class sklearn.preprocessing.Normalizer(norm=’l2’, copy=True)
 
這個函式在做資料標準化 

norm有三種輸入
 
l1 最大的設為0.5 其餘按比例變化
l2 預設解法 
x / norm 
 
norm 又稱為範數
計算方式為
 


 
max 最大的設為1 其餘按比例變化

code:

import pandas as pd
import numpy as np

from sklearn.preprocessing import Normalizer

data = [[1,2,3,6]
        ,[9,5,4,18]
        ,[7,6,8,21]
        ,[12,8,9,29]]

df_data = pd.DataFrame(data)

normalizer_l1 = Normalizer(norm='l1')
normalizer_l2 = Normalizer(norm='l2')
normalizer_max = Normalizer(norm='max')
#橫的一組
# l1 最大的設為0.5 其餘按比例 0.5*(4/18) = 0.111
# l2 一般解法 x / math.sqrt(sum(x[i]**2)) =  x / norm
# max 最大的設為1 其餘按比例 (4/18) = 0.222

print("Normalizer l1: \n" , normalizer_l1.fit_transform(data))
print("Normalizer l2: \n" , normalizer_l2.fit_transform(data))
print("Normalizer max: \n" , normalizer_max.fit_transform(data))

 output:
Normalizer l1:
 [[0.08333333 0.16666667 0.25       0.5       ]
 [0.25       0.13888889 0.11111111 0.5       ]
 [0.16666667 0.14285714 0.19047619 0.5       ]
 [0.20689655 0.13793103 0.15517241 0.5       ]]
Normalizer l2:
 [[0.14142136 0.28284271 0.42426407 0.84852814]
 [0.42616235 0.23675686 0.18940549 0.8523247 ]
 [0.28818544 0.24701609 0.32935479 0.86455632]
 [0.35697847 0.23798565 0.26773385 0.86269797]]
Normalizer max:
 [[0.16666667 0.33333333 0.5        1.        ]
 [0.5        0.27777778 0.22222222 1.        ]
 [0.33333333 0.28571429 0.38095238 1.        ]
 [0.4137931  0.27586207 0.31034483 1.        ]]

以第一行為例
1/sqrt(1^2 + 2^2 + 3^2 + 6^2) = 0.14142136


source code

沒有留言:

張貼留言