机器学习之PCA主成分分析法降维及测试

server/2025/1/22 4:07:27/

PCA主成分分析法降维及测试

目录

  • PCA主成分分析法降维及测试
    • PCA主成分分析法
      • 概念
      • PCA的基本思想
      • PCA的步骤
      • PCA的优缺点
        • 优点
        • 缺点
    • PCA函数
      • 函数导入
      • 参数
      • 方法
      • 返回值
    • 实际测试
      • 数据理解
      • 代码测试

PCA主成分分析法

概念

  • PCA
    主成分分析(PCA)是一种常用的数据分析方法,其主要目的是通过降维来简化数据集的复杂性,同时尽可能保留原始数据中的重要信息
  • 降维
    数据特征又叫数据维度,减少数据的特征即降维。

PCA的基本思想

PCA的基本思想是将多个变量通过线性组合转换成少数几个互不相关的综合变量,这些综合变量称为主成分每个主成分都是原始变量的线性组合,且它们彼此之间互不相关,这使得我们可以通过保留最重要的几个主成分来减少数据的维度。

PCA的步骤

  • 步骤1:数据预处理
    • 去中心化:将每个特征的平均值减去,使数据集的均值为0。
    • 标准化:如果特征的量纲不同,需要将每个特征缩放到具有零均值和单位方差。
  • 步骤2:计算协方差矩阵
    • 协方差矩阵可以衡量数据集中不同变量之间的相关性。协方差矩阵的对角线元素是各个变量的方差,非对角线元素是两个变量之间的协方差。
  • 步骤3:计算特征值和特征向量
    • 对协方差矩阵进行特征分解,得到一组特征值和对应的特征向量。
  • 步骤4:选择主成分
    • 根据特征值的大小,选择前k个最大的特征值对应的特征向量作为主成分。这些特征向量指向数据变化最大的方向。
  • 步骤5:构造投影矩阵
    • 将选择的k个特征向量组合成一个投影矩阵。
  • 步骤6:将数据投影到新空间
    • 使用投影矩阵将原始数据转换到新的k维空间,得到降维后的数据。

PCA的优缺点

优点

1.计算方法简单,容易实现。
2.可以减少指标筛选的工作量。
3.消除变量间的多重共线性。
4.在一定程度上能减少噪声数据。

缺点

1.特征必须是连续型变量。
2.无法解释降维后的数据是什么。
3.贡献率小的成分有可能更重要。

PCA函数


函数导入

python">from sklearn.decomposition import PCA

参数

  1. n_components:整数或小于0小数,一般设置此参数
    默认为None,所有主成分都会保留,即特征数量保持不变
  2. copy:布尔值,(默认为True)
    如果为True,则复制原始数据。如果为False,则原始数据可能会被覆盖。
  3. whiten:布尔值,可选(默认为False)
    • 如果为True,则白化数据,即除以主成分的标准差使得每个特征具有单位方差。这通常在执行某些降维后的学习算法时是有用的。
  4. svd_solver:字符串,可选(默认为’automatic’)
    • ‘auto’:基于数据和n_components自动选择最佳方法。
    • ‘full’:使用完整的SVD。
    • ‘arpack’:用于计算稀疏数据的奇异值分解的迭代方法。
    • ‘randomized’:使用随机化方法进行SVD。
  5. tol:浮点数,可选(默认为0.0)
    用于SVD的奇异值计算的收敛阈值。只适用于’svd_solver’为’arpack’或’randomized’。
  6. iterated_power:整数,可选(默认为’auto’)
    仅当’svd_solver’为’randomized’时使用。指定了幂迭代次数。
  7. random_state:控制随机数生成器的种子
  8. weight:数组,形状为(n_samples,),可选(默认为None)
    给每个样本分配一个权重。在降维时,每个样本的贡献与其权重成正比。

方法

  • fit(X) ,仅计算特征数据x,无返回值
    fit_transform(X) ,返回训练后降维的数据特征
  • fit_transform(X):训练模型并返回降维后的数据。相当于调用 fit(X) 然后调用 transform(X)。

返回值

  1. components_ 属性:
    • 返回组成主成分的数组。如果PCA被拟合在一个有n个特征的数据集上,并且指定了保留k个主成分,那么components_将是一个形状为(n, k)的数组。
  2. explained_variance_ 属性:
    • 返回每个选定主成分的解释方差,即每个主成分的方差大小。
  3. explained_variance_ratio_ 属性:
    • 返回每个选定主成分的解释方差比例,即每个主成分解释的原始数据方差的比例。
  4. singular_values_ 属性:
    • 返回奇异值,即主成分的奇异值。
  5. mean_ 属性:
    • 返回每个特征的均值,PCA在拟合数据时会减去这个均值。
  6. noise_variance_ 属性:
    • 返回噪声方差,即不是由主成分解释的方差。

实际测试


数据理解

除最后一列皆为特征数据,PCA降维后,特征数据减少,但准确率变化不大。

在这里插入图片描述

代码测试

代码展示:

python">from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
data = pd.read_excel('hua.xlsx')
x = data.iloc[:,:-1]
y = data.iloc[:,-1]x_tr,x_te,y_tr,y_te = \train_test_split(x, y, test_size=0.2,random_state=1000)lg = LogisticRegression()
lg.fit(x_tr,y_tr)tr_pre = lg.predict(x_tr)
print(metrics.classification_report(y_tr,tr_pre,digits=4))
te_pre = lg.predict(x_te)
print(metrics.classification_report(y_te,te_pre,digits=4))pca = PCA(n_components=0.9)
pca.fit(x)
x_pca = pca.transform(x)
print(x_pca)x_tr,x_te,y_tr,y_te = \train_test_split(x, y, test_size=0.2,random_state=1000)
lg = LogisticRegression()
lg.fit(x_tr,y_tr)tr_pre = lg.predict(x_tr)
print(f'PCA:{metrics.classification_report(y_tr,tr_pre,digits=4)}')
te_pre = lg.predict(x_te)
print(f'PCA:{metrics.classification_report(y_te,te_pre,digits=4)}')

运行结果:
未PCA处理:
在这里插入图片描述
PCA处理:
在这里插入图片描述
PCA转换后部分特征数据:
在这里插入图片描述

调试:
返回组成主成分的数组
在这里插入图片描述
主成分解释的原始数据方差的比例
在这里插入图片描述


http://www.ppmy.cn/server/160358.html

相关文章

c++常见设计模式之适配器模式

基础介绍 适配器模式作为c中常见的设计模式模式之一,是一种结构型设计模式。那适配器模式用于解决什么问题呢?答案是将一个类的接口转换成客户期待的另一个接口。适配器让原本不兼容不能一起工作的类可以协同工作。 典型原理 应该如何理解适配器模式呢…

【论文阅读】VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning

VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning -- VCD-FL:可验证可抵抗共谋攻击的动态联邦学习 来源背景介绍相关工作本文贡献预备知识 系统模型威胁模型具体实现初始化本地训练梯度加密承诺生成插值优化 密文聚合聚合结果验证梯度解密结果验证恶意…

为什么相关性不是因果关系?人工智能中的因果推理探秘

目录 一、背景 (一)聚焦当下人工智能 (二)基于关联框架的人工智能 (三)基于因果框架的人工智能 二、因果推理的基本理论 (一)因果推理基本范式:因果模型&#xff0…

CBAM-2018学习笔记

名称: Convolutional Block Attention Module (CBAM) 来源: CBAM: Convolutional Block Attention Module 相关工作: #ResNet #GoogleNet #ResNeXt #Network-engineering #Attention-mechanism 创新点: 贡献: 提…

牛客周赛76B:JAVA

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给定一个长度为 nnn ,仅包含小写字母的字符串 sss 。 请你构造出一个非空字符串 ttt ,使得它在 sss 中作为子串出现的次数最多。 子串是指,从原…

Windows环境本地配置pyspark环境详细教程

目录 一、背景简记二、本地单机spark环境配置详细步骤第一步:python环境安装第二步:安装jdk及配置环境变量安装包下载安装环境变量配置 第三步:安装Spark安装包下载安装配置环境变量 第四步:安装hadoop安装包下载安装配置环境变量…

AI 时代的 Prompt 工程入门

引言 网络有句话流行的话—— “未来,淘汰你的不是AI,而是掌握了AI的人”。那我们应该怎么掌握AI?我自己的理解是学会面向AI提问,利用好AI工具为我们的工作提效和赋能。毕竟我们普通人不太可能直接去开发大模型,我们更…

.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)

系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…