1.归一化
x’ = (x - X_min) / (X_max - X_min)
归一化后的数据取值区间为[0,1]
from sklearn.preprocessing import MinMaxScaler
import numpy as np
data = np.random.uniform(0, 100, 10)[:, np.newaxis] #随机生成10个在区间[0,100)上服从均匀分布的数据
mm = MinMaxScaler()
mm_data = mm.fit_transform(data) #fit_transform()先拟合数据,然后将其转化为归一化后的形式
origin_data = mm.inverse_transform(mm_data) #将归一化后的数据转化为原始数据
print('data is ',data)
print('after Min Max ',mm_data)
print('origin data is ',origin_data)
2.标准化
x’ = (x - μ)/σ
标准化后的数据服从正态分布
from matplotlib import gridspec
import numpy as np
import matplotlib.pyplot as plt
cps = np.random.random_integers(0, 100, (100, 2)) #生成100行2列在区间[0,100]上的离散整数
ss = StandardScaler()
std_cps = ss.fit_transform(cps) #fit_transform()先拟合数据,然后将其转化为标准形式
gs = gridspec.GridSpec(5,5) #matplotlib.gridspec.GridSpec类用于指定放置子图的网格的几何形状,行数和列数
fig = plt.figure()
ax1 = fig.add_subplot(gs[0:2, 1:4]) #gs[0:2, 1:4]表示这个图占第1、2行和第2、3、4列
ax2 = fig.add_subplot(gs[3:5, 1:4]) #gs[3:5, 1:4]表示这个图占第4、5行和第2、3、4列
ax1.scatter(cps[:, 0], cps[:, 1]) #绘制未标准化的散点图
ax2.scatter(std_cps[:, 0], std_cps[:, 1]) #绘制标准化后的散点图
plt.show()
标准化前后数据生成散点图对比
3.正则化
改善过拟合
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)