常用技巧
特征缩放
在梯度下降算法运用中,如果能保证不同特征的取值在相同或者相近的范围内,比如都处于0-1之间,那么梯度下降算法将会能很很快的收敛。
例如,一个含有两个特征的训练样本集,其中
X
1
=
s
i
z
e
(
0
−
2000
f
e
e
t
s
)
X_1= size(0-2000feets)
X1=size(0−2000feets)
X
2
=
n
u
m
b
e
r
o
f
b
e
d
r
o
o
m
s
(
1
−
5
)
X_2=number\ of\ bedrooms(1-5)
X2=number of bedrooms(1−5)
cost function 可能会变得这样:
X方向变得紧凑,Y方向变得狭长,是因为X更大,所以X带来的影响更大,等比例减少或者增大X带来的影响更大。这样在梯度下降中就会有有震荡,所以最好进行特征缩放。
1. rescaling
将数据的特征按比例缩放到[0, 1]的区间,公式如下
x i ( j ) = x i ( j ) − m i n ( x i ) m a x ( x i ) − m i n ( x i ) x_i^{(j)}=\frac{x_i^{(j)}-min(x_i)}{max(x_i)-min(x_i)} xi(j)=max(xi)−min(xi)xi(j)−min(xi)
2. mean normalization
缩放到[-1, 1]的区间, 公式如下
x i ( j ) = x i ( j ) − m e a n ( x i ) m a x ( x i ) − m i n ( x i ) x_i^{(j)}=\frac{x_i^{(j)}-mean(x_i)}{max(x_i)-min(xi)} xi(j)=max(xi)−min(xi)xi(j)−mean(xi)
- 注意这里的mean是所有样本的某个属性取平均
3. standardization
又称为Z-score normalization, 将所有数据缩放到平均值为0, 方差为1.如果数据服从正态分布,则现在为标准正态分布,如果数据不服从正态分布,那么缩放后不是标准正态分布,只是服从均值为0, 方差为1。数据缩放后在0左右分布,但不一定就在[0, 1]范围内,有可能超出,公式如下:
z
=
x
i
−
μ
σ
z=\frac{x_i-\mu}{\sigma}
z=σxi−μ
附录
等高线图简单绘制
#导入模块
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-20, 20, 200)
y = np.linspace(-10, 10, 200)
X, Y = np.meshgrid(x, y)
Z = X**2+Y**2
plt.contour(X,Y,Z)
plt.show()