特征不归一化有什么危害?特征归一化公式是什么?
① 例如,我用一个人身高(cm)与脚码(尺码)大小来作为特征值,类别为男性或者女性。我们现在如果有5个训练样本,分布如下:
A [(179,42),男] B [(178,43),男] C [(165,36)女] D [(177,42),男] E [(160,35),女]
② 很容易看到第一维身高特征是第二维脚码特征的4倍左右,那么在进行距离度量的时候,我们就会偏向于第一维特征。
注:这样造成俩个特征并不是等价重要的,最终可能会导致距离计算错误,从而导致预测错误。
注:例如,来了一个测试样本 F(167,43),来预测他是男性还是女性,我们采取k=3来预测。
注:下面是用欧式距离分别算出F离训练样本的欧式距离,选取最近的3个,多数类别就是我们最终的结果,计算如下:
注:由计算可得,最近的前三个分别是C,D,E三个样本,那么由C,E为女性,D为男性,女性多于男性得到我们要预测的结果为女性。
注:这样问题就来了,一个女性的脚43码的可能性,远远小于男性脚43码的可能性。
注:算法会预测 F 为女性是因为由于各个特征量纲的不同,在这里导致了身高的重要性已经远远大于脚码了,这是不客观的。
注:我们应该让每个特征都是同等重要的,这也是我们要归一化的原因!
特征归一化公式是什么?
① 特征归一化公式如下:
Python基础积累(numpy)
numpy创建矩阵
import
运行结果:
[ 2 23 4]
int32
a
运行结果:
[[2 3 4]
[3 4 5]]
注:生成2行3列的矩阵。
a
运行结果:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
注:生成3行4列的全零矩阵。
a
运行结果:
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
注:创建全一数据,同时指定数据类型,http://np.int默认为int32。
a
运行结果:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
注:创建全空数组,其实每个值都是接近于零的数。
a
运行结果:
[10 12 14 16 18 20]
注:创建连续数组,数据为10-20之间,步长为2。
b
运行结果:
[[10 12 14]
[16 18 20]]
注:使用reshape改变上述数据的形状。
a
运行结果:
[ 1. 1.47368421 1.94736842 2.42105263 2.89473684 3.36842105
3.84210526 4.31578947 4.78947368 5.26315789 5.73684211 6.21052632
6.68421053 7.15789474 7.63157895 8.10526316 8.57894737 9.05263158
9.52631579 10. ]
[[ 1. 1.47368421 1.94736842 2.42105263]
[ 2.89473684 3.36842105 3.84210526 4.31578947]
[ 4.78947368 5.26315789 5.73684211 6.21052632]
[ 6.68421053 7.15789474 7.63157895 8.10526316]
[ 8.57894737 9.05263158 9.52631579 10. ]]
注:linspace(1,10,20) 开始端1,结束端10,且分割成20个数据,生成线性矩阵。
注:reshape使得线性矩阵改为五行四列的矩阵。