PCA与特征选择的区别及关系
介绍
在机器学习中,特征选择(Feature Selection)和主成分分析(Principal Component Analysis, PCA)是两种常用的特征降维方法,用于从大量特征中提取最相关或最重要的特征。虽然它们都可以用于降低数据集的维度,但它们之间有着不同的原理和应用场景。
特征选择
特征选择是一种通过评估特征的相关性或重要性来选择最有价值的特征子集的方法。其目的是减少特征空间的维度,提高模型的性能和效率,同时降低过拟合风险。
算法原理
特征选择的算法有很多,这里给出一个常用的算法 - 方差选择法(VarianceThreshold)。该算法根据特征的方差来选择最佳特征。具体步骤如下:
- 计算每个特征的方差。
- 选择方差大于某个阈值的特征。
- 剔除低方差特征,得到新的特征子集。
公式推导
假设我们有一个n x d的特征矩阵X,用X_ij表示第i个样本的第j个特征值。计算每个特征的方差可以使用以下公式:
V a r ( x j ) = 1 n ∑ i = 1 n ( x i j − x ˉ j ) 2 Var(x_j) = \frac{1}{n} \sum_{i=1}^{n}(x_{ij} - \bar{x}_j)^2 Var(xj)=n1i=1∑n(xij−xˉj)2
其中,n是样本的数量, x ˉ j \bar{x}_j xˉj是特征j的平均值。
计算步骤
下面使用Python来展示方差选择法的计算步骤。
import numpy as np
# 计算方差
def variance_threshold(X, threshold):
variances = np.var(X, axis=0)
mask = variances > threshold
new_X = X[:, mask]
return new_X
# 示例数据
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
threshold = 2
# 应用方差选择法
new_X = variance_threshold(X, threshold)
print(new_X)
代码细节解释:
np.var(X, axis=0)
:计算每个特征的方差。variances > threshold
:得到方差大于阈值的特征的布尔掩码。X[:, mask]
:根据掩码选择新的特征子集。
PCA(主成分分析)
PCA是一种常用的线性降维方法,它通过转换原始特征空间,将高维数据映射到低维空间。它的主要思想是通过线性变换将数据映射到新的低维度空间,使得在新空间里的样本具有最大的方差。
算法原理
PCA的算法原理可以概括为以下几个步骤:
- 对数据进行中心化处理,即将每个特征减去其均值,以保证各特征的均值为0。
- 计算协方差矩阵,该矩阵展示了原始特征之间的相关性。
- 对协方差矩阵进行特征值分解,得到特征向量和特征值。
- 根据特征值的大小排序特征向量,选择最大的k个特征向量作为新空间的基。
- 将原始数据映射到新的空间上,得到降维后的数据。
公式推导
假设我们有一个n x d的特征矩阵X,对其进行中心化处理,即使每个特征的均值为0。协方差矩阵的计算使用以下公式:
C o v ( X ) = 1 n − 1 X T X Cov(X) = \frac{1}{n-1}X^TX Cov(X)=n−11XTX
其中,X是中心化后的特征矩阵。
计算步骤
下面使用Python来展示PCA的计算步骤。
import numpy as np
# PCA计算
def pca(X, k):
# 中心化处理
X_centered = X - np.mean(X, axis=0)
# 计算协方差矩阵
cov_matrix = np.cov(X_centered.T)
# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
# 根据特征值大小排序特征向量
sorted_indices = np.argsort(eigenvalues)[::-1]
sorted_eigenvectors = eigenvectors[:, sorted_indices]
# 选择k个特征向量
selected_eigenvectors = sorted_eigenvectors[:, :k]
# 映射到新空间
new_X = np.dot(X_centered, selected_eigenvectors)
return new_X
# 示例数据
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
k = 2
# 应用PCA
new_X = pca(X, k)
print(new_X)
代码细节解释:
X - np.mean(X, axis=0)
:中心化处理,减去每个特征的均值。np.cov(X_centered.T)
:计算协方差矩阵。np.linalg.eig(cov_matrix)
:进行特征值分解。np.argsort(eigenvalues)[::-1]
:根据特征值大小排序特征向量的索引。sorted_eigenvectors[:, :k]
:选择k个特征向量。np.dot(X_centered, selected_eigenvectors)
:将原始数据映射到新的空间上。
关系总结
特征选择和PCA都是用于降维的方法,但它们的原理和应用场景不同。特征选择通过评估特征的相关性或重要性来选择最有价值的特征子集,而PCA通过线性变换将数据映射到新的低维度空间,使得新空间里的样本具有最大的方差。
特征选择更加直接,适用于需要删减无关特征或减少计算开销的情况。而PCA则更适用于需要降低数据维度、提取特征或可视化数据的情况。
在实际应用中,可以根据具体问题和数据特点选择适合的方法进行特征降维,以提高模型的性能和效率。
最后,我们准备了2000多篇,机器学习和深度学习各方向的论文合集。
是各个方向的核心论文,帮助大家打开思路~