机器学习——PCA 主成分分析

目录

1.主成分分析

2.PCA原理

3.主成分分析的优缺点

优点:

缺点:

4.主成分分析的实现步骤

5.PCA人脸识别的简单实现

完整代码:

运行结果:

6.实验总结


1.主成分分析

        主成分分析是一种用于降维和数据压缩的技术,通过寻找数据中的主成分,可以帮助我们发现数据中的潜在模式和结构,对于数据的可视化和分类分析都具有重要的作用。

        其基本思想是通过线性变换将高维数据转换为低维数据,同时保留数据的最大方差,从而能够更好地表示原始数据的特征。

        主成分分析在数据挖掘、模式识别、机器学习和统计学等领域都有广泛的应用。

2.PCA原理

        主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,通过线性变换将原始数据映射到一个新的坐标系中,新坐标系的选择是依据数据的协方差来确定的。PCA的目标是找到数据中最重要的方向,以便能够更紧凑地表示数据并减少数据的维度。

3.主成分分析的优缺点

优点:

1. 降维能力强:主成分分析可以将高维的数据降维到低维,保留大部分原始数据的信息。

2. 去相关性:主成分分析可以消除变量之间的相关性,从而提高模型的准确性。

3. 减少噪音:主成分分析可以过滤掉数据中的噪音,提高数据的可靠性。

4. 可解释性强:通过主成分分析可以发现数据的内在结构,有助于解释数据的变化。

5. 数据压缩:主成分分析可以将大量的数据进行压缩,节省存储空间和计算资源。

缺点:

1. 基于线性假设:主成分分析假设数据是线性相关的,对于非线性关系的数据处理效果不佳。

2. 信息丢失:降维过程中会丢失部分信息,可能会影响模型的精度。

3. 分析复杂度高:在实际应用中,主成分分析可能需要大量的计算资源和时间。

4.主成分分析的实现步骤

1. 中心化处理: 使用np.mean计算出数据X的均值X_mean,然后将数据减去均值,得到中心化的数据X_centered。

    # 中心化处理
    X_mean = np.mean(X, axis=0)
    X_centered = X - X_mean

2. 计算协方差矩阵: 使用np.cov计算中心化数据X_centered的协方差矩阵cov_matrix。

    # 计算协方差矩阵
    cov_matrix = np.cov(X_centered, rowvar=False)

3. 计算特征值和特征向量: 使用np.linalg.eig计算协方差矩阵cov_matrix的特征值eigenvalues和特征向量eigenvectors。

    # 计算特征值和特征向量
    eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

4. 选择特征向量: 从特征向量eigenvectors中选择前n_components列,得到top_eigenvectors。

    # 选择前n_components个特征向量
    top_eigenvectors = eigenvectors[:, :n_components]

5. 数据投影: 将中心化的数据集X_centered投影到选取的特征向量top_eigenvectors上,得到降维后的数据集X_pca。

    # 将数据集投影到选取的特征向量上
    X_pca = np.dot(X_centered, top_eigenvectors)

5.PCA人脸识别的简单实现

完整代码:

import numpy as np
from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, accuracy_score

# 加载人脸数据集
lfw_people = fetch_lfw_people(min_faces_per_person=10, resize=0.4)
X = lfw_people.data
y = lfw_people.target

# 将数据集分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)


# 自己实现的主成分分析算法
def pca(X, n_components):
    # 中心化处理
    X_mean = np.mean(X, axis=0)
    X_centered = X - X_mean

    # 计算协方差矩阵
    cov_matrix = np.cov(X_centered, rowvar=False)

    # 计算特征值和特征向量
    eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

    # 选择前n_components个特征向量
    top_eigenvectors = eigenvectors[:, :n_components]

    # 将数据集投影到选取的特征向量上
    X_pca = np.dot(X_centered, top_eigenvectors)

    return X_pca


# 使用实现的PCA进行降维
n_components = 150
X_train_pca = pca(X_train, n_components)
X_test_pca = pca(X_test, n_components)

# 用KNN分类器进行人脸识别
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train_pca, y_train)

# 对测试集进行预测
y_pred = knn.predict(X_test_pca)

# 输出准确率
print("准确率:", accuracy_score(y_test, y_pred))

运行结果:

6.实验总结

        主成分分析是一种强大的数据降维技术,可以帮助提取数据的主要特征并消除相关性,有助于提高模型的准确性和可解释性。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值