❝聊聊
❞标准化
与归一化
。
因为最近分析遇到了这 2 个概念,这里和站友们分享下。
标准化和归一化都是用于数据的预处理,在数据挖掘和机器学习中非常常见。它们的目的都是使数据更易于比较和分析
,但具体方法和效果略有不同。
标准化是指将数据转换为均值为0,标准差为1的分布
。标准化通常用于需要消除不同尺度的数据之间的差异的情况,以使所有特征具有相同的重要性。标准化可以通过以下公式实现:
其中, 是原始数据, 是均值, 是标准差, 是标准化后的数据。
在 R 语言中,可以使用如下代码实现标准化:
# 标准化数据,即常见的z-score
scaled_data <- scale(data)
归一化是指将数据缩放到一个特定的范围,通常为0到1或-1到1
。归一化通常用于需要将不同的数据特征映射到相同的数值范围的情况。归一化可以通过以下公式实现:
其中, 是原始数据, 和 分别是最小值和最大值, 是归一化后的数据。
同样,可以使用如下代码实现归一化:
# 归一化数据
normalize <- function(x) {
(x - min(x)) / (max(x) - min(x))
}
normalized_data <- apply(data, 2, normalize)
除了以上两种方法外,R 语言中还有一些其他的标准化和归一化方法,例如 MinMax 缩放、Log 转换等。可以根据数据的具体特点选择适当的方法。
标准化和归一化是常用的数据预处理技术,用于将不同尺度、不同单位、不同范围的数据转换为统一的标准值,以便进行比较和分析
。它们的主要作用
是:
比较
和分析,减小数据的误差和偏差。收敛速度和准确性
,避免因为数据尺度不同而导致算法收敛缓慢或不收敛的情况。建模
和分析。通常情况下,标准化和归一化的选择取决于数据的分布和使用场景
:
正态
分布时,使用标准化可以将数据转换为均值为 0,标准差为 1 的分布,使得数据更加符合正态分布的假设。标准化通常用于聚类、回归、分类等模型的训练过程中,提高模型的准确性和泛化能力。不符合正态
分布,且存在较大的离群值时,可以使用归一化将数据转换到 0 到 1 的范围内,减小离群值的影响,同时提高模型的准确性和泛化能力。归一化通常用于支持向量机(SVM)、神经网络等模型的训练过程中。非监督学习或聚类分析
等场景,可以根据具体情况选择标准化或归一化。标准化和归一化在生物信息学中广泛应用,以下是一些例子:
基因表达数据的标准化和归一化:在基因表达研究中,需要将来自不同实验的基因表达数据进行比较和整合
。标准化和归一化可以对基因表达数据进行处理,使其具有可比性
,从而方便后续的分析和挖掘。例如,Z-score
标准化可以将基因表达数据转换为标准正态分布,使其均值为 0,标准差为 1。MinMax
归一化可以将基因表达数据缩放到 0 到 1 的范围内。
蛋白质结构数据的标准化和归一化:在蛋白质结构研究中,需要将来自不同实验的蛋白质结构数据进行比较和整合。标准化和归一化可以对蛋白质结构数据进行处理,使其具有可比性,从而方便后续的分析和挖掘。例如,Z-score 标准化可以将蛋白质结构数据转换为标准正态分布,使其均值为 0,标准差为 1。RMSD
归一化可以将蛋白质结构数据缩放到 0 到 1 的范围内。
DNA 序列数据的标准化和归一化:在 DNA 序列研究中,需要将来自不同实验的 DNA 序列数据进行比较和整合。标准化和归一化可以对 DNA 序列数据进行处理,使其具有可比性,从而方便后续的分析和挖掘。例如,GC 含量
标准化可以将 DNA 序列数据的 GC 含量转换为百分比形式,使其具有可比性。长度归一化
可以将 DNA 序列数据缩放到 0 到 1 的范围内。
简单说,标准化和归一化在生物信息学中是一种重要的数据处理方法,可以使不同实验、不同样本之间的数据具有可比性
,从而更好地进行数据分析和挖掘。
scale()
是 R 语言中一个用于数据标准化(即将数据进行 Z-score
标准化)的函数。在使用这个函数时,输入的向量或数据框会被中心化(即减去平均值)并按照标准差缩放(即除以标准差),从而使得数据的均值为 0,标准差为 1。
scale()
函数有以下常见的参数:
x
:要进行标准化的数据,可以是向量、矩阵或数据框。center
:逻辑变量,指示是否要中心化数据,默认为 TRUE。scale
:逻辑变量,指示是否要按标准差缩放数据,默认为 TRUE。na.rm
:逻辑变量,指示是否要移除输入数据中的缺失值,默认为 FALSE。...
:其他可选参数,例如指定标准差的值(scale = 2),或者指定要使用的中心化和缩放函数。下面是一个使用 scale() 函数进行标准化的简单示例:
# 创建一个数据向量
x <- c(2, 4, 5, 7, 8)
# 对数据进行标准化
scaled_x <- scale(x)
# 输出标准化后的数据
scaled_x
输出结果如下:
[,1]
[1,] -1.3155879
[2,] -0.3429972
[3,] 0.0894978
[4,] 0.8259827
[5,] 1.7421046
可以看到,输出的结果是一个矩阵
,其中每个元素都是标准化后的值。
在生物信息学中,标准化通常用于将不同实验之间的数据进行比较
,或者将数据进行可视化
。比如,在 RNA-seq 数据分析中,标准化可以用于比较不同基因的表达水平。在微生物组分析中,标准化可以用于比较不同样本中的微生物丰度。
以下是对 fpkm 矩阵进行 z-score 标准化的示例代码:
# 读入 fpkm 矩阵
fpkm_matrix <- read.table("fpkm_matrix.txt", header = TRUE, row.names = 1)
# 对 fpkm 矩阵进行 z-score 标准化
fpkm_matrix_zscore <- scale(fpkm_matrix, center = TRUE, scale = TRUE)
# 按行(样本)进行标准化
fpkm_matrix_row_normalized <- t(apply(fpkm_matrix_zscore, 1, scale))
# 输出标准化后的 fpkm 矩阵
write.table(fpkm_matrix_row_normalized, file = "fpkm_matrix_normalized.txt", sep = "\t",
quote = FALSE, col.names = NA)
上面代码中,apply(fpkm_matrix_zscore, 1, scale)
表示对 fpkm_matrix_zscore 矩阵的每一行进行标准化,t()
函数表示对矩阵进行转置,将行和列交换。
FPKM (Fragments Per Kilobase of transcript per Million mapped reads) 是一种 RNA-seq 的表达量单位,它会考虑到基因长度和测序深度的影响,但是并不一定是数据处理的最终结果。在进行 RNA-seq 数据分析的过程中,往往需要对表达矩阵进行标准化和转换,以满足数据分析和可视化的需要。
对于 FPKM 数据,其数据本身已经是标准化后的结果
(即考虑了基因长度和测序深度的影响),不需要再次标准化
。但是,如果你希望对 FPKM 数据进行可视化(如绘制热图、箱线图等),为了更好地观察数据的分布情况,可以考虑对其进行转换,比如取 log 或进行 Z-score 标准化
(代码可参考上面)。
需要注意的是,在进行 log 转换时,由于 FPKM 中可能存在 0 或极小的值,需要先进行平滑操作(如加上一个小常数,如1
),以免出现负无穷或无穷的结果。而在进行 Z-score 标准化时,需要考虑是否进行基因或样本方向
的标准化。
也就是说,对于 FPKM 数据,一般情况下不需要进行标准化操作,但在进行可视化时可以考虑对其进行转换
。具体是否需要标准化或转换,应该根据实际情况和分析需求而定。
选择使用 log10 或 log2,这通常取决于实验的具体情况以及分析的目的。
log10通常用于在基因表达谱中进行数据可视化时
,因为它可以将数据的数量级映射到直观的图表上。这种缩放可以使较小的变化更容易分辨,而较大的变化则更容易可视化。
另一方面,log2经常用于差异基因表达分析
中,因为它更好地满足基因表达水平的双倍比较。这是因为 log2 转换可以将比值转换为方便的整数。
所以说,选择 log10 还是 log2 取决于具体的实验设计和分析目的。甚至在某些情况下,你可能需要进行试验以确定哪个转换方法
最适合你的数据。
❝OK,今天的分享到此为止。您的
❞关注、点赞、在看、转发
是对站长最大的鼓励和支持
哈。
❝对本篇文章有疑问,可以在益站
❞发消息留言
,也欢迎各位童鞋来837738558
进行交流学习
。
微信扫一扫
关注该公众号