本笔记来源于B站Up主: 有Li 的影像组学系列教学视频
本节(19)主要介绍: 数据的标准化、归一化
为什么要进行标准化、归一化?
- 机器学习算法的要求
- 便于横向比较
# 标准化 (影像组学中最常用)
# z = (x - u)/s
# 异常值一般对结果影响不大
from sklearn.preprocessing import StandardScaler
data = [[10,-20],[0.3,999],[-1,12],[0.1,21]]
res = StandardScaler().fit_transform(data)
print(res)
Output:
# [[ 1.72127555 -0.63345074]
# [-0.46125685 1.73096796]
# [-0.75376119 -0.55920011]
# [-0.50625751 -0.53831711]]
# 归一化
# X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
# 异常值有可能对结果有重要影响
from sklearn.preprocessing import MinMaxScaler
data = [[10,-20],[0.3,999],[-1,12],[0.1,21]]
res = MinMaxScaler().fit_transform(data)
print(res)
Output:
# [[1. 0. ]
# [0.11818182 1. ]
# [0. 0.03140334]
# [0.1 0.04023553]]
# 与IQR第1四分位数(第25个分位数)和第3个四分位数(第75个分位数)之间的范围相关。
# 不常用
from sklearn.preprocessing import RobustScaler
data = [[10,-20],[0.3,999],[-1,12],[0.1,21]]
res = RobustScaler().fit_transform(data)
print(res)
Output:
[[ 3.37931034 -0.13957935]
[ 0.03448276 3.75717017]
[-0.4137931 -0.01720841]
[-0.03448276 0.01720841]]
Notes:
# 影像组学研究中有两处涉及标准化或归一化,一是在图像预处理时,二是特征提取后
# Image normalization 图像归一化
# normalize 当设置为True时, 对图像进行归一化处理,默认为False
# normalizeScale: 对图像进行归一化处理的比例,默认为1
# RemoveOutliers: 从图像中剔除的离群值
继续深化学习这两个概念时,发现网上对这个的讨论很热闹,原因是由于翻译的不一致,导致概念的混乱,所以最好的办法就是回归英文中的本来定义。
"标准化"和"归一化"这两个中文词要指代四种Feature scaling(特征缩放)方法:
Rescaling (min-max normalization) ,有时简称normalization(有点坑)。
一般把第一种叫做归一化,第三种叫做标准化。
具体可参考知乎上的讨论帖:标准化和归一化什么区别?
答主@龚焱 及@gokenu 回答的比较详细了。