摘要
python3.65 名词替换:每一个样本为每一行;每一个特征为每一列 。 归一化,标准化,标准化代码实现都在代码片中。
前言
问:数据为什么要归一化或者标准化? 答:当一组数据中,所有特征对数据分析的作用都是一样,但是数值大小却差别很大的时候 ,就需要用到归一化或者标准化。
归一化
特点:通过对原数据的处理,转换数据范围在0-1之间 实现公式:
x
1
=
x
−
m
i
n
m
a
x
−
m
i
n
x
2
=
x
1
×
(
m
x
−
m
i
)
+
m
i
x1=\frac{x-min}{max-min} \qquad \qquad x2=x1\times(mx-mi)+mi
x 1 = m a x − m i n x − m i n x 2 = x 1 × ( m x − m i ) + m i 公式介绍:x2:最终值;x:每个特征的每个数据;max:该特征最大值;min:该特征最小值;mx:生成数据范围最大值;mi:生成数据最小值。mi,mx=0,1 (默认) 作用域:每一个特征(也就是每一列) 缺点:异常值对最大值和最小值影响很大,它对异常点处理不好,鲁棒性差。 适用场景:适合传统精确小数据场景(场景较少)
标准化
特点:通过对原始数据进行变换,把数据变为均值为0,方差为1的范围 实现公式:
x
1
=
x
−
m
e
a
n
δ
x1=\frac{x-mean}{\delta}
x 1 = δ x − m e a n 公式介绍:x1:最终值;x:该特征的每个数据;mean:该特征的平均值;
δ
\delta
δ :该特征的标准差。 作用域:每一个特征(也就是每一列) 补充:如果出现异常点的话,由于具有一定的数据量,少量的异常点对平均值的影响不大,方差改变较小,进而x1的值影响较小。
代码片
from sklearn. preprocessing import MinMaxScaler, StandardScaler
import numpy as np
def be_one ( ) :
"""
归一化处理
:return: None
"""
test_list = [ [ - 1 , - 1 , 2 ] , [ 2 , 4 , 2 ] , [ 6 , 6 , - 1 ] ]
mm = MinMaxScaler( feature_range= ( 2 , 3 ) )
data = mm. fit_transform( test_list)
print ( data)
return None
def stand ( ) :
"""
标准化处理
:return: None
"""
std = StandardScaler( )
data = std. fit_transform( [ [ - 1 , - 1 , 2 ] ,
[ 2 , 4 , 2 ] ,
[ 6 , 6 , - 1 ] ] )
print ( data)
return None
def transform ( dem_array) :
"""
标准化算法实现
:param dem_array: array数组
:return: 标准化后的arry数组
"""
mean = np. array( [ np. mean( dem_array[ : , i] ) for i in range ( dem_array. shape[ 1 ] ) ] )
scale = np. array( [ np. std( dem_array[ : , i] ) for i in range ( dem_array. shape[ 1 ] ) ] )
res_array = np. empty( shape= dem_array. shape, dtype= float )
for col in range ( dem_array. shape[ 1 ] ) :
res_array[ : , col] = ( dem_array[ : , col] - mean[ col] ) / scale[ col]
return res_array
if __name__ == '__main__' :
print ( transform( np. array( [ [ - 1 , - 1 , 2 ] ,
[ 2 , 4 , 2 ] ,
[ 6 , 6 , - 1 ] ] ) ) )