KNN-距离-数据归一化 Feature Scaling

KNN-距离-数据归一化 Feature Scaling

学习视频
在线数学公式的编辑工具
Q: 为什么要数据归一化?
A: 于量纲不同,此时主要衡量的值不一定是预期衡量的值

样本 肿瘤大小(厘米) 发现时间(天)
样本1 1 200
样本2 5 100

采用欧拉距离: ( 1 5 ) 2 + ( 200 100 ) 2 \sqrt{(1-5)^{2}+(200-100)^{2}} ,这值被发现时间所主导,虽然肿瘤大小相差5倍,但是由于量纲不同,此时主要衡量的发现天数差值;
如果调整天->年

样本 肿瘤大小(厘米) 发现时间(天)
样本1 1 200=0.55年
样本2 5 100=0.27年

此时欧拉距离被肿瘤大小所主导。

所以要对源数据归一化处理,而所谓的数据归一化处理就是将数据都映射到同一尺度中,
其中最简单的是最值归一化[normalizition],把所有数据都映射到0-1之间
最值归一化[normalizition] 公式: x s c a l e = x x m i n x m a x x m i n x_{scale}=\frac{x-x_{min}}{x_{max}-x_{min}}

公式解释: 对每一个特征求出特征对应的最大值和最小值,对于每一个特征点减去最小值,
相当于将整个数据都映射到[0-( x m a x x m i n x_{max}-x_{min} )]的范围,求特征x相比于整个范围的占比,这样都映射到0-1之间了。

最值归一化[normalizition] 适用于分布有明显边界的情况;
比如:成绩分布[0-100],像素点[0-255],
缺点:受outlier的影响较大,比如没有明显边界的月收入[0-100万],大多数人都是1万,只有一个是100万,都映射到0-1之间的话,月收入100万的是1,大多数月收入1万的都聚集在0.01附近。此时数据映射不够好,相应的一个改进方式是使用均值方差归一化[standardization]

均值方差归一化[standardization]:把所有数据归一到均值为 0 方差为 1 的分布中,此时并不能保证所有数据在0-1之间,但是均值是在0,方差为1
适用于没有边界,存在极端值的数据集。

所以一般采用均值方差归一化[standardization]
均值方差归一化[standardization] 公式: x s c a l e = x x m e a n S x_{scale}=\frac{x-x_{mean}}{S}

公式解释: 对每一个特征减去特征均值,再除以特征值对应的方差
具体代码实现,参考原视频,此处仅演示后一种代码实现,

X2 = np.random.randint(0, 100, (50, 2)) # 0-100,2个特征值
X2 = np.array(X1, dtype=float)
X2[:,0] = (X2[:,0] - np.mean(X2[:,0])) / np.std(X2[:,0])
X2[:,1] = (X2[:,1] - np.mean(X2[:,1])) / np.std(X2[:,1])
# X2[:,0] - np.mean(X2[:,0]) 结果是第一列特征的向量
# np.std(X2[:,0]) 结果是第一列特征的方差值
# 向量 / 值 = 向量 ==> 归一化第一列的特征值

# 绘图
plt.scatter(X2[:,0], X2[:,1])
plt.show()
发布了85 篇原创文章 · 获赞 27 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_22038327/article/details/103059115
今日推荐