简单粗暴!低方差滤波VS高相关滤波,哪个更简单?一招让你的数据变得轻松无比!(下)
上回小云给大家介绍了低方差滤波,那么今天小云就继续讲讲上次挖的坑~高相关滤波~
高相关滤波是一种特征选择方法高相关滤波是一种常用的特征选择方法,其基本思想是通过筛选掉相关性高的特征,来降低数据的维度和复杂度,从而提高机器学习模型的性能和效率。高相关滤波认为当两列数据变化趋势相似时,它们包含的信息也相似。因此,使用相似列中的一列就可以满足机器学习模型的需求,从而减少特征的数量,提高模型的泛化能力和可解释性。
对于数值列之间的相似性,通常使用相关系数来表示,如Pearson相关系数、Spearman相关系数等。对于名词类列的相关性,可以通过计算卡方值来表示。相关系数大于某个阈值的两列只保留一列,从而减少特征数量,提高模型的效率。
例如,在基因表达数据中,如果一个基因的表达量与另一个基因的表达量之间的相关系数较高,那么这个两个基因可能在疾病的发生和发展中的贡献类似。因此,根据高相关滤波的原理,我们可以选择相关系数低于阈值或与目标表达量相关的前N个相关性指标较高的基因,将其保留下来用于后续的差异表达分析、生物通路分析或建模等。
高相关滤波的实现过程通常包括以下几个步骤:
1. 计算每个特征与目标变量之间的相关系数或相关性指标,如Pearson相关系数、Spearman相关系数等。
2. 对所有特征按照相关系数或相关性指标从高到低进行排序。
3. 根据预设的阈值或特征数目,选择特征之间相关系数或相关性指标低于阈值或与目标表达量相关的前N个特征,将其保留下来用于后续的数据分析。
4. 将保留下来的特征构成一个新的特征集合,用于后续的降维分析或建模。
需要注意的是,高相关滤波也有一些限制和注意事项。首先,相关系数并不代表因果关系,而且在某些情况下可能会存在误导性信息。因此,在选择相关性指标时,需要根据具体的数据结构、分析目的和算法特点进行综合考虑,并进行必要的验证和解释。其次,高相关滤波通常用于特征选择,而不是特征提取或特征降维,因此需要与其他降维方法进行配合使用,以达到更好的降维效果。最后,高相关滤波的效果也受到阈值的选择和数据的分布特点的影响,需要根据具体情况进行调整和优化。
接下来,小云就用与上回一样的蛋白质表达数据,带大家试试高相关滤波~
首先仍然是导入数据
data=read.csv(file.choose(),header = TRUE)
data <- na.omit(data)
X <- data[,2:79]
# 为data设置新列
X$Genotype <- ifelse(X$Genotype == "Control", 1, 0)
直接使用cor( )计算相关性矩阵
corr_matrix <- cor(X)
使用findCorrelation查找相关系数高于0.8的特征,直接返回需要删除的特征
high_corr <- findCorrelation(corr_matrix, cutoff = 0.8)

我们可以看到筛选出的有26对基因是高度相关对
直接删除相关系数高于0.8的特征(保留每一对中的其中一个特征)
data_new <- data[,-high_corr]
提取最后一列的数据,即需要判断的目标变量
y <- X[,78]
计算最后一列与其他列的相关系数,进行排序,可以看到哪些特征与目标变量比较相关
corr_matrix1 <- cor(X[,-78], y)
corr_sorted <- sort(corr_matrix1, decreasing = TRUE)

我们可以画出相关性的热图,更直观地看到哪些基因与我们要判断的目标分类是相关的~
ggplot(melt(corr_matrix), aes(x=Var1, y=Var2, fill=value)) +
geom_tile() +
scale_fill_gradient2(low="blue", mid="white", high="red", midpoint=0) +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
注意这里在最新版本的ggplot2中,melt函数已经被废弃,需要使用reshape2包中的melt函数来实现数据重塑,所以我们需要导入library(reshape2)

高相关滤波是一种简单且有效的特征选择方法,可以帮助我们去除冗余和噪声特征,提高模型的泛化能力和可解释性。在实际应用中,我们可以将高相关滤波与其他特征选择方法和技术相结合,以达到最佳的特征选择效果。

