总结一下近期了解到的数据分析预处理的方法。
1、均值移除
统一样本矩阵中不同特征的基准值和分散度,将各个特征的平均值调整为0,标准差调整为1。
例如某矩阵的一列值分别是a,b,c,m表示均值,s表示标准差,均值移除后的对应数据是 (a-m)/s,(b-m)/s,(c-m)/s。
使用情况:某样本有些特征的数值比较大,而有的特征的数值比较小,在分析时大的数值可能会覆盖小的数值,就可以使用均值移除来解决。
在python中方法:sklearn.preprocessing.scale(原始样本矩阵) -> 均值移除后的样本矩阵
示例:
import numpy as np
import sklearn.preprocessing as sp
raw_samples = np.array([
[3, 20, 200, -5400],
[0, 40, -100, 2100],
[1, 30, 190, -4300]
], dtype='float')
std_sample = sp.scale(raw_samples)
print(std_sample)
输出结果为:
# [[ 1.33630621 -1.22474487 0.74274138 -0.86687558]
# [-1.06904497 1.22474487 -1.41360456 1.40111286]
# [-0.26726124 0. 0.67086318 -0.53423728]]
2、范围缩放
统一样本矩阵中不同特征的最大值和最小值的范围。
请问考试成绩100分和90分哪个分高?那如果考100分的满分是200分,90分的满分是100分呢?如果两次回答的答案不一样,是因为我们没有把两个分数放在统一评分标准中比较。在对数据进行处理时,有可能也会遇到相同的情况,这就需要我们使用范围缩放和统一比较范围。
python中方法:sklearn.preprocessing.MinMaxScaler(feature_range=(期望最小值,期望最大值)) -> 范围缩放器
缩放器函数.fit_transform(原始样本矩阵) -> 范围缩放后的样本矩阵
示例:
import numpy as np
import sklearn.preprocessing as sp
raw_samples = np.array([
[3, -1.5, 2, -5.4],
[0, 4, -0.3, 2.1],
[1, 3.3, -1.9, -4.3]
])
mms = sp.MinMaxScaler(feature_range=(0, 1))
mms_samples = mms.fit_transform(raw_samples)
print(mms_samples)
输出结果:
# [[ 1. 0. 1. 0. ]
# [ 0. 1. 0.41025641 1. ]
# [ 0.33333333 0.87272727 0. 0.14666667]]
3、归一化处理
为了用户占比表示特征,用每个样本的特征的值除以该样本的特征值绝对值之和,以使每个样本的特征值的绝对值之和为1.
例如:
A B C D
1 30 35 20 40
2 20 20 10 30
1和2表示两个服装店,A,B,C,D代表某种衣服的不同颜色的购买数量,请问在1和2中,购买该产品的人中,喜欢A颜色比较多的是?这就需要考虑到A颜色在售出商品中的占比
在python中的方法:sklearn.preprocessing.normalize(原始样本数据,norm='l1') -> 归一化后的样本矩阵
'l1'表示 1-范数
示例:
import numpy as np
import sklearn.preprocessing as sp
raw_samples = np.array([
[30, 35, 20, 40],
[20, 20, 10, 30],
])
nor_samples = sp.normalize(raw_samples, 'l1')
print(nor_samples)
输出结果:
# [[ 0.24 0.28 0.16 0.32 ]
# [ 0.25 0.25 0.125 0.375]]