特征处理

标准化

#数据标准化是将数据按比例缩放,使其落入到一个小的区间内,标准化后的数据可正可负,但是一般绝对值不会太大,一般是z-score标准化方法:减去期望后除以标准差。
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from matplotlib import gridspec
import numpy as np
import matplotlib.pyplot as plt
cps = np.random.random_integers(0, 100, (100, 2))  #随机生成数值在0-100间100*2的矩阵
 
ss = StandardScaler()                               #标准化类
std_cps = ss.fit_transform(cps)                     #不仅计算训练数据的均值和方差,还会基于计算出来的均值和方差来转换训练数据,从而把数据转换成标准的正太分布

gs = gridspec.GridSpec(5,5)                         #生成5行5列的gs
fig = plt.figure()                                  #创建图像
ax1 = fig.add_subplot(gs[0:2, 1:4])                 #创建子图像
ax2 = fig.add_subplot(gs[3:5, 1:4])                 #创建子图像

ax1.scatter(cps[:, 0], cps[:, 1])                   #填充数据
ax2.scatter(std_cps[:, 0], std_cps[:, 1])           #填充数据

plt.show()

归一化

 

#把数值放缩到0到1的小区间中(归到数字信号处理范畴之内),一般方法是最小最大规范的方法:min-max normalization
from sklearn.preprocessing import MinMaxScaler
import numpy as np

data = np.random.uniform(0, 100, 10)[:, np.newaxis]     #生成0-100以内的10个数组成10行一列的矩阵
mm = MinMaxScaler()                                     #归一化对象
mm_data = mm.fit_transform(data)                        #归一化data
origin_data = mm.inverse_transform(mm_data)             #转换回来
print('data is ',data)                                  #打印
print('after Min Max ',mm_data)                         #打印
print('origin data is ',origin_data)                    #打印

 

正则化

 

X = [[1, -1, 2],
     [2, 0, 0],
     [0, 1, -1]]

# 使用L2正则化
from sklearn.preprocessing import normalize
l2 = normalize(X, norm='l2')
print('l2:', l2)

# 使用L1正则化
from sklearn.preprocessing import Normalizer
normalizerl1 = Normalizer(norm='l1')
l1 = normalizerl1.fit_transform(X)
print('l1:', l1)

 

posted @ 2021-04-02 11:10  XiaoGao128  阅读(78)  评论(0编辑  收藏  举报