PCA与特征选择的区别及关系

PCA与特征选择的区别及关系

介绍

在机器学习中,特征选择(Feature Selection)和主成分分析(Principal Component Analysis, PCA)是两种常用的特征降维方法,用于从大量特征中提取最相关或最重要的特征。虽然它们都可以用于降低数据集的维度,但它们之间有着不同的原理和应用场景。

特征选择

特征选择是一种通过评估特征的相关性或重要性来选择最有价值的特征子集的方法。其目的是减少特征空间的维度,提高模型的性能和效率,同时降低过拟合风险。

算法原理

特征选择的算法有很多,这里给出一个常用的算法 - 方差选择法(VarianceThreshold)。该算法根据特征的方差来选择最佳特征。具体步骤如下:

  1. 计算每个特征的方差。
  2. 选择方差大于某个阈值的特征。
  3. 剔除低方差特征,得到新的特征子集。

公式推导

假设我们有一个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=1n(xijxˉ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的算法原理可以概括为以下几个步骤:

  1. 对数据进行中心化处理,即将每个特征减去其均值,以保证各特征的均值为0。
  2. 计算协方差矩阵,该矩阵展示了原始特征之间的相关性。
  3. 对协方差矩阵进行特征值分解,得到特征向量和特征值。
  4. 根据特征值的大小排序特征向量,选择最大的k个特征向量作为新空间的基。
  5. 将原始数据映射到新的空间上,得到降维后的数据。

公式推导

假设我们有一个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)=n11XTX

其中,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多篇,机器学习和深度学习各方向的论文合集。

是各个方向的核心论文,帮助大家打开思路~

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,PCA可以用于特征选择特征选择是指从原始特征中选择最具有代表性或最相关的特征子集,以减少数据的维度并保留最重要的信息。以下是使用PCA进行特征选择的一般步骤: 1. 准备数据集:将特征参数存储在矩阵X中,每行代表一个样本,每列代表一个特征。 2. 标准化数据:使用zscore函数对数据进行标准化,将每个特征缩放到均值为0,标准差为1的范围内。 ```matlab X = zscore(X); ``` 3. 计算协方差矩阵:使用cov函数计算标准化后的数据集的协方差矩阵。 ```matlab covMatrix = cov(X); ``` 4. 计算特征值和特征向量:使用eig函数计算协方差矩阵的特征值和特征向量。 ```matlab [eigVectors, eigValues] = eig(covMatrix); ``` 5. 选择主成分:根据特征值的大小选择保留的主成分数量。可以通过累积解释方差比例来确定保留的主成分数量。 ```matlab explainedVariances = diag(eigValues) / sum(diag(eigValues)); cumulativeVariances = cumsum(explainedVariances); numComponents = find(cumulativeVariances >= 0.95, 1); ``` 6. 提取主成分:根据选择的主成分数量,提取对应的特征向量。 ```matlab selectedEigVectors = eigVectors(:, 1:numComponents); ``` 7. 计算新的特征参数:将标准化后的数据集与选定的特征向量相乘,得到新的特征参数。 ```matlab newFeatures = X * selectedEigVectors; ``` 通过上述步骤,你可以使用PCA算法进行特征选择,并生成新的特征参数集合。请注意,PCA算法会将原始特征参数转换为新的特征参数,这些新的特征参数是原始参数的线性组合。你可以根据自己的需求选择保留的主成分数量,以达到降低维度和保留重要信息的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值