三、数据降维:主成分分析模型PCA

目录

一、原理及步骤

二、数据标准化

三、计算协方差矩阵

四、特征值分解

五、特征值排序

六、降维转换

七、PCA模型的应用


一、原理及步骤

主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术,用于减少数据集的维度,并且保留尽可能多的原始数据信息。PCA通过将高维数据映射到低维空间中的主成分上,实现数据的降维和特征提取。

下面是PCA模型的步骤:

  1. 数据标准化:对原始数据进行标准化处理,使得每个特征具有相同的尺度。这是因为PCA是基于数据的协方差矩阵计算的,如果特征之间的尺度差异较大,会导致主成分分析结果不准确。

  2. 协方差矩阵计算:计算标准化后的数据的协方差矩阵。给定一个包含n个样本和d个特征的数据集,我们可以计算其协方差矩阵。协方差矩阵描述了数据特征之间的线性相关性。协方差矩阵的第(i, j)个元素表示第i个特征和第j个特征之间的协方差。协方差矩阵反映了数据特征之间的线性相关性。

  3. 特征值分解:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征向量表示了原始数据在主成分方向上的投影。特征值表示了协方差矩阵在特征向量方向上的方差。

  4. 特征值排序:按照特征值的大小对特征向量进行排序,选择前k个特征向量作为主成分。这些特征向量对应的特征值较大,可以解释原始数据中较多的方差。

  5. 降维转换:将原始数据投影到选取的主成分上,得到降维后的数据。投影的方法是将数据与选取的主成分的特征向量进行内积运算。

通过上述步骤,PCA能够找到一组新的正交基,使得数据在新的基上的方差最大化。这些新的基称为主成分,其中第一个主成分解释了数据中最大的方差,第二个主成分解释了剩余方差中的最大部分,以此类推。

二、数据标准化

在PCA中,数据标准化是一个重要的预处理步骤,用于确保不同特征之间具有相同的尺度。标准化数据有助于避免某些特征由于其数值范围较大而对PCA结果产生过大的影响。下面是PCA中常用的数据标准化方法:

  1. 均值移除(Mean Removal):对于每个特征,计算其在整个数据集中的平均值(均值),然后将该均值从每个样本的相应特征值中减去。这样做可以消除特征的平移影响,使得数据的均值为零。

  2. 方差缩放(Variance Scaling):对于每个特征,计算其在整个数据集中的标准差,然后将每个样本的相应特征值除以该标准差。这样做可以使得特征具有相同的尺度,消除特征的缩放影响。

常用的数据标准化方法是将每个特征的均值减去,并且除以该特征的标准差,从而得到零均值和单位方差。

数据标准化后,每个特征的均值将接近于零,标准差将接近于1。这样做有助于保持数据的相对比例,使得PCA能够更好地捕捉数据中的方差结构。

需要注意的是,在进行PCA之前,必须对整个数据集进行标准化处理,而不能只对部分特征进行标准化。这是因为PCA是基于数据的协方差矩阵计算的,需要保证所有特征具有相同的尺度,以获得准确的结果。

import numpy as np

def standardize_data(X):
    # 计算每个特征的均值和标准差
    mean_vals = np.mean(X, axis=0)
    std_vals = np.std(X, axis=0)
    
    # 标准化数据
    X_std = (X - mean_vals) / std_vals
    
    return X_std

# 示例数据
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 标准化数据
data_std = standardize_data(data)

print("原始数据:")
print(data)
print("标准化后的数据:")
print(data_std)

三、计算协方差矩阵

计算协方差矩阵的原理思路如下:

  1. 假设有一个包含n个样本和d个特征的数据集X,其中每个样本由d维特征向量表示。

  2. 计算每个特征的均值向量mean,其中mean的第i个分量表示数据集X在第i个特征上的均值。可以使用以下公式计算均值向量:
    [\text{mean} = \frac{1}{n} \sum_{j=1}^{n} X_j]
    其中,X_j表示数据集X的第j个样本。

  3. 将数据集X的每个样本减去均值向量mean,得到去中心化的数据集X_c。即:
    [X_c = X - \text{mean}]

  4. 计算去中心化数据集X_c的协方差矩阵cov,可以使用以下公式计算协方差矩阵:
    [cov = \frac{1}{n-1} X_c^T X_c]
    其中,^T表示矩阵的转置。

import numpy as np

def compute_covariance_matrix(X):
    # 计算每个特征的均值向量
    mean = np.mean(X, axis=0)
    
    # 去中心化数据集
    X_c = X - mean
    
    # 计算协方差矩阵
    cov = np.cov(X_c, rowvar=False)
    
    return cov

# 示例数据
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 计算协方差矩阵
cov_matrix = compute_covariance_matrix(data)

print("协方差矩阵:")
print(cov_matrix)

在示例代码中,compute_covariance_matrix函数接受一个数据集X作为参数。函数中使用np.mean函数计算每个特征的均值向量mean,然后将数据集X减去均值向量得到去中心化的数据集X_c。最后,使用np.cov函数计算X_c的协方差矩阵cov。

在示例数据中,原始数据是一个3x3的矩阵。运行代码后,将输出计算得到的协方差矩阵。

四、特征值分解

PCA(Principal Component Analysis)的特征值分解是一种常用的降维技术,用于提取数据中的主要特征。以下是PCA特征值分解的原理思路和示例代码:

原理思路:

  1. 假设有一个包含n个样本和d个特征的数据集X,其中每个样本由d维特征向量表示。

  2. 对数据集X进行标准化处理,确保每个特征具有相同的尺度。

  3. 计算数据集X的协方差矩阵cov。

  4. 对协方差矩阵cov进行特征值分解,得到特征值和对应的特征向量。

  5. 对特征值进行排序,选择前k个特征值对应的特征向量作为主成分(Principal Components)。

  6. 将原始数据投影到所选的主成分上,得到降维后的数据。

import numpy as np

def pca(X, k):
    # 数据标准化
    X_std = (X - np.mean(X, axis=0)) / np.std(X, axis=0)
    
    # 计算协方差矩阵
    cov_matrix = np.cov(X_std, rowvar=False)
    
    # 特征值分解
    eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
    
    # 对特征值进行排序
    indices = np.argsort(eigenvalues)[::-1]
    sorted_eigenvalues = eigenvalues[indices]
    sorted_eigenvectors = eigenvectors[:, indices]
    
    # 选择前k个特征向量作为主成分
    principal_components = sorted_eigenvectors[:, :k]
    
    # 数据投影
    projected_data = np.dot(X_std, principal_components)
    
    return projected_data

# 示例数据
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 设置降维后的维度
k = 2

# PCA特征值分解
result = pca(data, k)

print("降维后的数据:")
print(result)

在示例代码中,pca函数接受一个数据集X和降维后的维度k作为参数。函数中首先对数据集X进行标准化处理,然后使用np.cov函数计算协方差矩阵。接下来,使用np.linalg.eig函数进行特征值分解,得到特征值和对应的特征向量。通过对特征值进行排序,选择前k个特征向量作为主成分。最后,将标准化后的数据集投影到主成分上,得到降维后的数据。

在示例数据中,原始数据是一个3x3的矩阵,将其降维为2维。运行代码后,将输出降维后的数据。

五、特征值排序

特征值排序是PCA(Principal Component Analysis)中的一步,用于确定主成分的重要性。以下是特征值排序的原理思路和示例代码:

原理思路:

  1. 假设已经进行了PCA特征值分解,得到了协方差矩阵的特征值和对应的特征向量。

  2. 对特征值进行排序,按从大到小的顺序排列。

  3. 根据排序后的特征值,选择前k个特征值对应的特征向量作为主成分。

import numpy as np

def sort_eigenvalues(eigenvalues, eigenvectors):
    # 对特征值进行排序
    indices = np.argsort(eigenvalues)[::-1]
    sorted_eigenvalues = eigenvalues[indices]
    sorted_eigenvectors = eigenvectors[:, indices]
    
    return sorted_eigenvalues, sorted_eigenvectors

# 示例数据
eigenvalues = np.array([3, 1, 2])
eigenvectors = np.array([[1, 2, 3],
                         [4, 5, 6],
                         [7, 8, 9]])

# 特征值排序
sorted_eigenvalues, sorted_eigenvectors = sort_eigenvalues(eigenvalues, eigenvectors)

print("排序后的特征值:")
print(sorted_eigenvalues)
print("对应的特征向量:")
print(sorted_eigenvectors)

在示例代码中,sort_eigenvalues函数接受特征值eigenvalues和对应的特征向量eigenvectors作为参数。函数中使用np.argsort函数对特征值进行排序,并使用切片操作[::-1]将排序结果反转,以确保特征值按从大到小的顺序排列。然后,根据排序后的特征值重新排列特征向量的顺序。最后,函数返回排序后的特征值和对应的特征向量。

在示例数据中,特征值是一个包含3个值的数组,特征向量是一个3x3的矩阵。运行代码后,将输出排序后的特征值和对应的特征向量。

六、降维转换

降维转换是PCA(Principal Component Analysis)中的最后一步,用于将原始数据投影到选定的主成分上,从而实现降维。以下是降维转换的原理思路和示例代码:

原理思路:

  1. 假设已经进行了PCA特征值分解,并选择了前k个特征值对应的特征向量作为主成分。

  2. 将原始数据减去均值,并进行标准化处理。

  3. 将标准化后的数据集与选定的主成分进行矩阵乘法操作,得到降维后的数据。

import numpy as np

def dimensionality_reduction(X, eigenvectors, k):
    # 数据标准化
    X_std = (X - np.mean(X, axis=0)) / np.std(X, axis=0)
    
    # 选取前k个特征向量作为主成分
    principal_components = eigenvectors[:, :k]
    
    # 数据投影
    projected_data = np.dot(X_std, principal_components)
    
    return projected_data

# 示例数据
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 示例特征向量(已经进行特征值排序)
eigenvectors = np.array([[1, 2, 3],
                         [4, 5, 6],
                         [7, 8, 9]])

# 降维后的维度
k = 2

# 降维转换
result = dimensionality_reduction(data, eigenvectors, k)

print("降维后的数据:")
print(result)

在示例代码中,dimensionality_reduction函数接受一个数据集X、特征向量eigenvectors以及降维后的维度k作为参数。函数中首先对数据集X进行减均值和标准化处理,得到标准化后的数据集X_std。然后,选择前k个特征向量作为主成分。接下来,使用np.dot函数进行矩阵乘法操作,将标准化后的数据集X_std投影到主成分上,得到降维后的数据。

在示例数据中,原始数据是一个3x3的矩阵,特征向量是一个3x3的矩阵,降维后的维度为2。运行代码后,将输出降维后的数据。

七、PCA模型的应用

  • 数据压缩和降维:通过去除冗余信息,可以减少数据集的维度,从而降低计算复杂度,并且可以发现数据中的主要特征。
  • 特征提取:通过提取主成分,可以将原始数据转换为更具有代表性的特征,用于后续的机器学习任务。
  • 数据可视化:将高维数据映射到二维或三维空间,可以可视化数据的分布和结构。

需要注意的是,PCA假设数据是线性可分的,并且对异常值敏感。在应用PCA之前,需要进行数据预处理和异常值处理的步骤。此外,PCA的结果可能受到数据的旋转和缩放的影响,因此在解释主成分时需要谨慎。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值