数据标准化处理(简单整理)
数据标准化处理
import numpy as np raw_samples = np.array([ [3,-1.5,2,-5.4], [0,4,-0.3,2.1], [1,3.3,-1.9,-4.3]]) print(raw_samples) print(raw_samples.mean(axis=0)) # 求各个列的均值 print(raw_samples.std(axis=0)) # 求各个列的标准差 print("=============方法1:对raw_samples矩阵做标准差标准化处理====================") # 标准化处理(标准正态分布):是让矩阵中的每列的均值为0,标准差为1 from sklearn.preprocessing import scale s=scale(raw_samples) # 对raw_samples矩阵做标准差标准化处理 print(s) print(s.mean(axis=0)) print(s.std(axis=0)) print("==========方法2:对raw_samples矩阵做(0,1)缩放标准化处理====================") # (0,1)缩放:是让矩阵中的每列中每行的各个特征值缩放成为0到1之间值 from sklearn.preprocessing import MinMaxScaler mms = MinMaxScaler(feature_range=(0,1)).fit_transform(raw_samples) print(mms) print(mms.min(axis=0)) print(mms.max(axis=0)) print("=========方法3:对raw_samples矩阵做归一化标准化处理====================") # 归一化:用矩阵中每行的各个特征值除以该行所有特征值之和,再对每行所得的值做绝对值之和,此时每行中 # 各个列相加得出的值都是1 from sklearn.preprocessing import normalize nor_samples = normalize(raw_samples,norm="l1") print(nor_samples) print(np.abs(nor_samples).sum(axis=1)) print("=========方法4:对raw_samples做二值化标准化处理======================") # 二值化:根据一个事先设定的阀值,将样本矩阵中不大于阀值的元素设定为0,大于阀值的元素设定为1 # 二值化信息有所损失,二值化后无法知道原始数据具体是多少 from sklearn.preprocessing import Binarizer bin = Binarizer(threshold=1.4) # 1.4的阀值是自己设定的 bin_samples = bin.transform(raw_samples) print(bin_samples) print("=========方法5:对raw_samples做独热编码标准化处理======================") raw_samples =np.array([ [1,3,2], [7,5,4], [1,8,6], [7,3,9]]) print(raw_samples) # 创建独热编码器 from sklearn.preprocessing import OneHotEncoder print("==============紧凑格式===================") ohe = OneHotEncoder(dtype=int) # sparse 表示是否采用紧缩格式(即只记录非0格式),默认为真1 ohe_samples = ohe.fit_transform(raw_samples) print(ohe_samples) # 最后出来的结果是只记录1 的结果 # (0, 5) 1 表示第0行第5列是1 # (0, 2) 1 表示第0行第2列是1 # (0, 0) 1 表示第0行第0列是1 print("==============非紧凑格式===================") ohe1 = OneHotEncoder(sparse=False,dtype=int) # sparse 表示是否采用紧缩格式,默认为真1 ohe_samples = ohe1.fit_transform(raw_samples) print(ohe_samples) print("=============方法6:将分类变量转为数值型:用标签编码============") # 标签编码:将一列字符串形式的特征值,按照字典排序,用每个字符在排序序列中的索引号表示该字符 raw_samples = np.array(["audi","ford","audi", "toyota","ford","bmw", "toyota","audi"]) from sklearn.preprocessing import LabelEncoder lbe = LabelEncoder() lbe_samples = lbe.fit_transform(raw_samples) print(lbe_samples) # 返回:[0 2 0 3 2 1 3 0] print("====用inverse_transform()将标签编码转回原始数据======") raw_samples = lbe.inverse_transform(lbe_samples) print(raw_samples) # 返回:['audi' 'ford' 'audi' 'toyota' 'ford' 'bmw' 'toyota' 'audi']