机器学习——主成分分析

本文介绍了特征维度约减的概念,尤其是PCA方法,以及其在机器学习中的作用,包括提高查询速度、去除噪声和用于高维数据可视化。通过PCA在人脸识别中的应用实例,展示了如何通过降维提高分类准确性,结合SVM进行高效的人脸识别。
摘要由CSDN通过智能技术生成

一、特征维度约减的概念

        特征约减的目的是将高维特征向量映射到低维子空间中.
        • 给定 n 个样本(每个样本维度为p维)
        通过特征变换/ 投影矩阵实现特征空间的压缩:
        

二、为什么要维度约减?

大多数机器学习算法在高维空间中表现不够鲁棒
        –查询速度与精度随着维度增加而降低 .
有价值的维度往往很少
        –例如,在基因序列中对于特定疾病有价值的点位十分有限.
可视化 : 高位数据在 2D 3D 空间中的可视化
维度约减 : 高效的存储与检索
噪声消除 : 提升分类或识别精度

三、常规维度约减方法

无监督方法
– Latent Semantic Indexing (LSI): truncated SVD
– Independent Component Analysis (ICA)
– Principal Component Analysis (PCA)
– Canonical Correlation Analysis (CCA)
监督方法
– Linear Discriminant Analysis (LDA)
半监督方法
– Research topic

四、Principal Component Analysis(PCA)

是一种常用的特征维度约减方法,它通过线性变换将原始数据映射到一个新的特征空间,使得映射后的特征具有最大的方差。

PCA的基本思想是找到一个新的坐标系,使得数据在新的坐标系下的方差最大化。具体步骤如下:

  1. 数据预处理:对原始数据进行标准化,使得每个特征的均值为0,方差为1。

  2. 计算协方差矩阵:根据标准化后的数据计算协方差矩阵。

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

  4. 选择主成分:按照特征值从大到小的顺序,选择前k个特征向量作为主成分,其中k是降低的维度。

  5. 数据映射:将原始数据通过选取的主成分进行线性变换,得到降维后的数据。

样本数据:

1st主成分:

2nd主成分:

五、主成分的代数推导

给定 n 个样本(每个样本维度为 p 维)
                                
定义 z 1j 为样本 x j 在第一主成分 / 主方向 a 1 上的投影:
        ​​​​​​​                ​​​​​​​
其中
        ​​​​​​​        ​​​​​​​        
我们的目标是找到 a 1 , 使 z 1 的方差最大。
​​​​​​​ 首先根据 z 1 的方差定义,推导得出:
        可证明S 半正定!

六、根据PCA完成人脸识别

import numpy as np
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

# 加载人脸数据集
lfw_dataset = fetch_lfw_people(min_faces_per_person=100)
X = lfw_dataset.data
y = lfw_dataset.target
target_names = lfw_dataset.target_names

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用PCA进行维度约减
n_components = 150
pca = PCA(n_components=n_components, whiten=True, random_state=42)
pca.fit(X_train)

# 应用PCA转换到训练集和测试集
X_train_pca = pca.transform(X_train)
X_test_pca = pca.transform(X_test)

# 使用支持向量机进行分类
svm = SVC(kernel='linear', C=0.1, random_state=42)
svm.fit(X_train_pca, y_train)

# 在测试集上进行预测
y_pred = svm.predict(X_test_pca)

# 输出准确率
accuracy = np.mean(y_pred == y_test)
print(f"Accuracy: {accuracy}")

当然,下面是对上述代码的详细解释:

        1、导入必要的库:

        在这里,我们导入了NumPy用于数值计算,sklearn.decomposition模块中的PCA类用于主成分分析,sklearn.datasets模块中的fetch_lfw_people函数用于加载人脸数据集,sklearn.model_selection模块中的train_test_split函数用于划分训练集和测试集,sklearn.svm模块中的SVC类用于支持向量机分类。

        2、加载人脸数据集:

        这里使用fetch_lfw_people函数从LFW数据集中加载人脸数据,并将数据存储在X中,目标类别存储在y中,目标类别的名称存储在target_names中。min_faces_per_person参数用于控制每个人至少有多少张人脸图像。

        3、划分训练集和测试集:

        使用train_test_split函数将数据划分为训练集和测试集。这里将70%的数据用于训练,30%的数据用于测试。

        4、使用PCA进行维度约减:

        创建PCA对象,并指定要保留的主成分数量(这里设置为150)。whiten参数用于指定是否对数据进行白化处理。然后使用fit函数拟合训练集数据。

        5、应用PCA转换到训练集和测试集:

        使用transform函数将原始数据转换为降维后的数据。转换后的数据存储在X_train_pca和X_test_pca中。

        6、使用支持向量机进行分类:

        创建SVC对象,并指定使用线性核函数。C参数用于控制正则化强度。然后使用fit函数拟合降维后的训练集数据。

        7、在测试集上进行预测:

        使用predict函数对降维后的测试集数据进行预测,预测结果存储在y_pred中。

        8、输出准确率:

        计算预测准确率并输出。np.mean函数用于计算预测结果与真实标签之间的平均一致性。

希望这样的解释能够帮助您理解代码的执行流程和目的。如果还有其他问题,请随时提问。

运行结果:

七、实验总结

  • 主成分分析(PCA)是一种常用的降维技术,尤其适用于处理高维数据。通过PCA,可以找到原始数据中最重要的特征,并将其转换为较低维度的表示形式,从而提高计算效率和模型性能。
  • PCA在人脸识别领域有广泛的应用。通过降维,可以减少数据集的特征数量,并且仍然能够保留足够的信息来进行人脸分类和识别。
  • 在实验中,选择合适的主成分数量对于识别准确性至关重要。过少的主成分可能会丢失重要信息,导致低准确率;而过多的主成分可能会引入噪声和冗余特征,导致过拟合。
  • 结合适当的分类算法,如SVM,可以提高人脸识别的性能。SVM是一种强大的分类器,能够有效地处理高维数据,并在不同类别之间建立清晰的决策边界。
  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值