【python】数据预处理:分位数归一化 Quantile Normalization + INSCODE AI创作助手测试 | 您所在的位置:网站首页 › 百分位数算法公式 › 【python】数据预处理:分位数归一化 Quantile Normalization + INSCODE AI创作助手测试 |
文章目录
写在前面标准化/归一化z-score标准化示例
python模块qnorm实现分位数归一化R代码实现分位数归一化分位数归一化 - NSCODE AI创作助手的回答*Q1:Quantile Normalization是什么?**Q2-1: 什么时候用Quantile normalization?**Q2-2: 什么时候做Quantile normalization?**Q3:为什么要做Quantile Normalization?**Q4-1: 如何做Quantile normalization?**Q4-2: 如何用python做Quantile Normalization?*
可视化分位数归一化处理前后发生的变化什么时候该用/不该用分位数归一化其他ChatGPT测试
写在前面
这里主要了解一下分位数归一化(Quantile Normalization, QN)。如无特殊说明时,本文中的QN作为分位数归一化的缩写。 Quantile Normalization 直接翻译是 分位数归一化,但也有翻译为分位数标准化。笔者理解是按直译叫分位数归一化,但是按数据的处理方式,应该叫分位数标准化,按英文的话就一种:Quantile Normalization。之所以有标准化和归一化两种说法,是因为它们是两种不同的处理方式。 本文暂统一名称叫分位数归一化(QN)。 Quantile Normalization 定义来自如下文献: 标准化(standardization)、归一化(normalization)两者总是被混着叫,实际是在做什么处理呢? 先看下Python库中的关于预处理的一些包: 对于标准化和归一化对应的常用的模块: 标准化 standardization:py模块 StandardScaler 是常用的标准化数据处理,对应z-score标准化公式: z = x − μ s z=\frac{x-\mu}{s} z=sx−μ(其中, μ \mu μ是训练样本的均值, s s s是训练样本的标准差)。将原始数据转换为均值为0,方差为1的新数据,也是把数据缩放(scaling)到特定区间上。该处理从公式计算上解读为:当前数据比总体均值多了几个标准差;从数据整体上解读为:把原数据标准化缩放为服从标准正态分布的数据。 归一化 normalization:py模块 MinMaxScaler是比较常用的归一化方法:min-max归一化, x ∗ = x i − x m i n x m a x − x m i n x^*=\frac{x_i− x_{min}}{x_{max} − x_{min}} x∗=xmax−xminxi−xmin。 z-score标准化示例 # sklear包中的zscore from sklearn.preprocessing import StandardScaler data = [[0, 0], [0, 0], [1, 1], [1, 1]] scaler = StandardScaler() print(scaler.fit(data)) scaler.fit_transform(data)使用scipy包中的zscore,对dataframe数据直接进行zscore标准,好处是标准化后的index/columns还在,而使用sklear的标准化处理后,返回的是数组array。[chatGPT]: import pandas as pd from scipy.stats import zscore # 创建训练数据的示例DataFrame train_data = {'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50], 'C': [100, 200, 300, 400, 500]} train_df = pd.DataFrame(train_data) # 创建测试数据的示例DataFrame test_data = {'A': [6, 7, 8, 9, 10], 'B': [60, 70, 80, 90, 100], 'C': [600, 700, 800, 900, 1000]} test_df = pd.DataFrame(test_data) # 对训练数据进行Z-score标准化 train_df_standardized = train_df.apply(zscore) # 使用训练数据的均值和标准差对测试数据进行标准化(注意使用训练数据的统计量) test_df_standardized = (test_df - train_df.mean()) / train_df.std() print("训练数据标准化结果:") print(train_df_standardized) print("\n测试数据标准化结果:") print(test_df_standardized) python模块qnorm实现分位数归一化仔细看Python的sklearn库中(# 标准化/归一化 部分的截图),会发现这里没有分位数归一化的包。是的,sklearn里没有QN。需要先安装qnorm(qnorm安装包官网),安装命令为:pip install qnorm。使用示例如下: import pandas as pd import qnorm df = pd.DataFrame({'C1': {'A': 5, 'B': 2, 'C': 3, 'D': 4}, 'C2': {'A': 4, 'B': 1, 'C': 4, 'D': 2}, 'C3': {'A': 3, 'B': 4, 'C': 6, 'D': 8}}) print(qnorm.quantile_normalize(df, axis=1))执行后可得到: 最初测试使用了R代码,在“INSCODE AI创作助手”助手的默认实现方式中也使用了R。(做分位数归一化处理可能用R的比较多) 代码中使用到R包preprocessCore: df 'A': 5, 'B': 2, 'C': 3, 'D': 4}, 'C2': {'A': 6, 'B': 1, 'C': 7, 'D': 9}, 'C3': {'A': 3, 'B': 4, 'C': 6, 'D': 8}}) dfn1 = qnorm.quantile_normalize(df1, axis=1) df2 = pd.DataFrame({'C1': {'A': 5, 'B': 2, 'C': 3, 'D': 4}, 'C2': {'A': 4, 'B': 1, 'C': 4, 'D': 2}, 'C3': {'A': 3, 'B': 4, 'C': 6, 'D': 8}}) dfn2 = qnorm.quantile_normalize(df2, axis=1) df3 = pd.DataFrame({'C1': {'A': 5, 'B': 2, 'C': 3, 'D': 4}, 'C2': {'A': 4, 'B': 1, 'C': 4, 'D': 4}, 'C3': {'A': 3, 'B': 4, 'C': 6, 'D': 8}}) dfn3 = qnorm.quantile_normalize(df3, axis=1)
图分两列,左侧一列为原始数据,右侧一列分位数归一化(QN)后的数据。从原始数据到QN后的数据,可以发现,右侧图中每个样本(一列)的4个数据的排列顺序没有发生变化。(注意:有的看起来是 |
CopyRight 2018-2019 实验室设备网 版权所有 |