13 数据变换 规范化方法

    技术2022-07-11  82

    # Author:Nimo_Ding ''' 数据规范化的三种方法: 1、Mix-max规范化 将数据归到[0,1]区间 2、Z-Score规范化 将数据规范到0均值,1方差的标准正态分布上,减少我们说的百分制80分,500分制80分的数据值差异问题 3、小数定标规范化 将数据转化为[-1,1]区间内。 ''' # Python的SciKit-Learn库的使用 # 使用SciKit-Learn进行数据规范化 print('\n# 1、Min-max规范化') ''' 让原始数据投射到指定的空间[min,max],在SciKit-Learn里有一个函数MinMaxScaler是专门做这个的。 默认情况范围是[0,1],会将原始数据投放到[0,1]范围中。 ''' from sklearn import preprocessing import numpy as np # 初始化数据,每一行表示一个样本,每一列表示一个特征。 x=np.array([[0.,-3.,1.], [3.,1.,2.], [0.,1.,-1.]]) # 将数据进行[1,2]规范化 min_max_scaler = preprocessing.MinMaxScaler([1,2]) minmax_x = min_max_scaler.fit_transform(x) print(minmax_x) ''' [[1. 1. 1.66666667] [2. 2. 2. ] [1. 2. 1. ]] ''' print('\n# 2、Z-Score规范化') # preprocessing.scale(x)可以直接将给定的数据进行Z-Score规范化。 # 结果是将每行每列的值减去了平均值,再除以方差的结果, # Z-Score将数据及进行规范化之后,数值都符合均值为0,方差为1的正态分布。 from sklearn import preprocessing import numpy as np x=np.array([[0.,-3.,1.], [3.,1.,2.], [0.,1.,-1.]]) scaled_x=preprocessing.scale(x) print(scaled_x) ''' [[-0.70710678 -1.41421356 0.26726124] [ 1.41421356 0.70710678 1.06904497] [-0.70710678 0.70710678 -1.33630621]] ''' print('\n# 3、小数定标规范化') from sklearn import preprocessing import numpy as np x=np.array([[0.,-3.,1.], [3.,1.,2.], [0.,1.,-1.]]) j=np.ceil(np.log10(np.max(abs(x)))) scaled_x=x/(10**j) print(scaled_x) ''' [[ 0. -0.3 0.1] [ 0.3 0.1 0.2] [ 0. 0.1 -0.1]] ''' # 数据挖掘中数据变换比算法选择更重要。 # 在考试成绩中,我们都需要让数据满足一定的规律,达到规范性的要求,便于进行挖掘。 # 这就是数据变换的作用。如果不进行变换的话,要不就是维数过多,增加了计算的成本,要不就是数据过于集中, # 很难找到数据之间的特征。 print('''\n 作业: 假设属性income的最小值和最大值分别是5000元和58000元,利用Min-Max规范化的方法将属性的值 映射到0至1的范围内,那么属性income的16000元将被转换为多少? ''') from sklearn import preprocessing import numpy as np a=np.array([[5000], [16000], [58000]]) print(a) min_max_scaler = preprocessing.MinMaxScaler([0,1]) min_max_a=min_max_scaler.fit_transform(a) print(min_max_a) ''' [[0. ] [0.20754717] [1. ]] '''

     

    Processed: 0.012, SQL: 9