深度学习基础系列:数据泛化

数据泛化

一些常见的统计方法

  • mean:均值,对于一组数据来说,计算其均值可以直接使用np.mean来进行计算,对于多维数据,numpy引入了轴axis的概念,其中,轴的起点从0开始一直到n,例如,在二维数据中,其中每一行代表一个样本,每一列代表一个特征(类似于csv文件)


    ​ 长,宽,高

    x1 1,2,3

    x2 1,4,5

    x3 1,6,7


    对于这样一组数据,用列表来表示就是

    1
    2
    3
    4
    
    data = [x1, x2, x3]
    data = [[1,2,3],
            [1,4,5],
            [1,6,7]]
    

    其中,按照axis=0的方式来计算均值,这里计算的就是长、宽、高 每个特征的均长、均宽、均高,按照axis = 1来进行计算,也就是计算每一行的均值,也就是每一个样本的均值(看起来没有什么意义)

    1
    2
    
    mean1 = np.mean(data, axis=0) # 按照列进行计算
    mean2 = np.mean(data, axis=1) # 按照行进行计算
    

    下面所有的方法var(方差),std(标准差)等均可以按照不同的轴进行计算

  • var:variance,方差,不在叙述计算公式,可以直接使用np.var()

  • stdStandard deviation,可以根据方差得到,可以直接使用`np.std()

  • np.round:保留小数操作,例如,要对data保留三位小数,可以表示为

    1
    
    ans = np.round(data, 3)
    

min-max均值规化

公式为

$$ x’ = \frac{x-min}{max-min}$$

对于一组数据data,可以这样计算

1
2
3
4
5
def MinMax(data:np.ndarray) -> np.ndarray:
    data_max = np.max(data, axis=0)
    data_min = np.min(data, axis=0)
    ans = (data - data_min) / (data_max - data_min)
    return ans

标准化

标准化可以把各个特征标准化为标准差为1,均值为0的正态分布

公式为

$$ x = \frac{x-\mu}{\sigma} $$

其中, $\mu$是均值,$\sigma$是标准差

1
2
3
4
5
def Standardization(data: np.ndarray) -> np.ndarray:
    data_mean = np.mean(data, axis=0)
    data_std = np.std(data, axis=0)
    ans = (data - data_mean) / data_std
    return ans

总结

是否必须使用标准化方法?

  1. 算法需求
    • 某些算法(如距离-based的算法, K-means, K邻近)对特征尺度非常敏感,标准化几乎是必需的。
    • 某些算法(如决策树、随机森林等)对特征尺度不敏感,标准化不是必需的。
  2. 数据特性
    • 如果特征的数值范围已经很接近,标准化的效果可能不明显。
    • 如果特征的数值范围差异很大,标准化可以显著提升模型性能。
  3. 模型性能
    • 通过实验比较标准化前后的模型性能,可以决定是否需要标准化。
花有重开日,人无再少年
使用 Hugo 构建
主题 StackJimmy 设计