当前位置: 首页 > article >正文

《机器学习》——PCA降维

文章目录

  • PCA降维简介
    • 什么是主成分分析?
  • 主成分的选择与维度确定
  • 降维的数学过程
  • PCA降维求解步骤
  • 降维后的效果和应用场景中的优势
  • PCA模型
    • API参数
    • Attributes属性
    • PCA对象的方法
  • PCA降维实例
    • 导入所需库
    • 导入数据集
    • 对数据进行处理
    • 创建PCA模型并训练
    • 查看训练结果
    • 对降维数据进行划分数据集
    • 进行逻辑回归模型训练
    • 自测和使用测试集测试并打印分类报告

PCA降维简介

  • 主成分分析(Principal Component Analysis,PCA)是一种多变量统计分析方法。
  • PCA 降维是基于这样一个理念:在高维数据空间中,存在一些方向(主成分)比其他方向更能代表数据的变化。通过将数据投影到这些主要方向上,我们可以在较低维度空间中表示数据,同时尽可能减少信息损失。例如,假设有一个三维数据集,数据点在某个平面附近分布较密集,而在垂直于该平面的方向上变化较小。PCA 降维就可以找到这个平面的方向作为主要成分,将数据从三维降到二维。

什么是主成分分析?

在这里插入图片描述

主成分的选择与维度确定

在这里插入图片描述

降维的数学过程

在这里插入图片描述

PCA降维求解步骤

在这里插入图片描述

降维后的效果和应用场景中的优势

  • 去除噪声和冗余信息:在实际数据中,可能存在一些噪声或者变量之间的冗余。PCA 降维通过聚焦于主要成分,可以有效地去除这些干扰因素。例如,在传感器数据中,可能由于传感器的精度问题或者环境因素产生噪声,PCA 可以降低这些噪声对数据分析的影响。
  • 提高计算效率:在处理高维数据时,许多机器学习算法的计算复杂度会随着维度的增加而急剧上升。降维后的低维数据可以大大减少计算量。比如在支持向量机(SVM)分类任务中,对高维数据进行 PCA 降维后再进行分类,可以加快训练和预测的速度。
  • 数据可视化:当数据维度降低到二维或三维时,可以方便地进行可视化。例如,在市场细分研究中,将消费者的多维度数据(如消费习惯、人口统计学特征等)进行 PCA 降维后,绘制在二维平面上,可以直观地看到不同消费群体的分布,有助于制定针对性的营销策略。

PCA模型

在这里插入图片描述

API参数

  • n_components:这个参数可以帮我们指定希望PCA降维后的特征维度数目。简单来说:指定整数,表示要降维到的目标,【比如十维的数据,指定n_components=5,表示将十维数据降维到五维】如果为小数,表示累计方差百分比。0.9
  • copy : 类型:bool,True或者False,缺省时默认为True。
    意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算。
    【按默认为True】
  • whiten:判断是否进行白化。所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1.对于PCA降维本身来说,一般不需要白化。如果你PCA降维后有后续的数据处理动作,可以考虑白化。默认值是False,即不进行白化。
  • svd_solver:即指定奇异值分解SVD的方法,由于特征分解是奇异值分解SVD的一个特例,一般的PCA库都是基于SVD实现的。有4个可以选择的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法。 full则是传统意义上的SVD,使用了scipy库对应的实现。arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的sparse SVD实现。默认是auto,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了。【按默认设置即可】

Attributes属性

  • components_:array, shape (n_components, n_features) 指表示主成分系数矩阵
  • explained_variance_:降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。
  • explained_variance_ratio_:降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。【一般看比例即可 >90%】

PCA对象的方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PCA降维实例

对鸢尾花数据进行降维处理:
在这里插入图片描述
共66条数据。

导入所需库

from sklearn.decomposition import PCA
import pandas as pd

导入数据集

data = pd.read_excel('hua.xlsx') # 数据读取

对数据进行处理

# 取除最后一列外的所有列作为特征变量
x = data.iloc[:,:-1]
# 取最后一列作为目标变量
y = data.iloc[:,-1]

创建PCA模型并训练

# 实例化 PCA 对象,设置主成分解释的方差比例为 0.90
pca = PCA(n_components=0.90)
# 对特征变量 x 进行 PCA 训练,不需要传入目标变量 y
pca.fit(x)

查看训练结果

print("特征所占百分比:{}".format(sum(pca.explained_variance_ratio_)))
print(pca.explained_variance_ratio_)

print("PCA 降维后数据:")
# 将数据 x 从原始特征空间转换到主成分空间
new_x = pca.transform(x)
print(new_x) 

在这里插入图片描述

对降维数据进行划分数据集

from sklearn.model_selection import train_test_split

# 将降维后的数据 new_x 和目标变量 y 划分为训练集和测试集,测试集比例为 0.2,随机种子为 0
x_train,x_test,y_train,y_test = train_test_split(new_x,y,test_size=0.2,random_state=0)

进行逻辑回归模型训练

# 导入逻辑回归分类器
from sklearn.linear_model import LogisticRegression

# 实例化逻辑回归分类器
classifier = LogisticRegression()
# 使用训练集数据进行逻辑回归分类器的训练,传入特征变量 x_train 和目标变量 y_train
classifier.fit(x_train,y_train)  

自测和使用测试集测试并打印分类报告

from sklearn import metrics
# 使用训练好的分类器对训练集进行预测
train_pred = classifier.predict(x_train)

# 打印训练集的分类报告,评估分类器在训练集上的性能
print(metrics.classification_report(y_train,train_pred))
print(train_pred)

# 使用训练好的分类器对测试集进行预测
test_pred = classifier.predict(x_test)
# 打印测试集的分类报告,评估分类器在测试集上的性能
print(metrics.classification_report(y_test,test_pred))
print(test_pred)

在这里插入图片描述


http://www.kler.cn/a/507549.html

相关文章:

  • Kafka常用命令
  • 前端【2】html添加样式、CSS选择器
  • 如何在Mac上使用Brew更新Cursor应用程序
  • 阀井可燃气体监测仪,开启地下管网安全新篇章-旭华智能
  • 【物联网】ARM核介绍
  • Rust 强制类型转换和动态指针类型的转换
  • 1.快慢指针-力扣-283-移动零
  • 软件测试入门—功能需求分析:以一个旅游管理系统为例
  • LeetCode 1426 题:数元素解题全解析
  • 【机器学习实战入门项目】MNIST数字分类机器学习项目
  • 用C++实现一个基于模板的观察者设计模式
  • MySQL的不同SQL模式导致行为不同?
  • 【北京迅为】iTOP-4412全能版使用手册-第七十六章 Qt界面切换
  • Kubernetes(k8s)和Docker Compose本质区别
  • 20.<Spring图书管理系统①(登录+添加图书)>
  • 6.3、OTN 保护
  • Linux 文件权限详解
  • Unity Dots理论学习-3.ECS有关的模块(2)
  • 【FlutterDart】MVVM(Model-View-ViewModel)架构模式例子-http版本(30 /100)
  • 阿里云通义实验室自然语言处理方向负责人黄非:通义灵码2.0,迈入 Agentic AI
  • matlab函数的主要目的是对包含在 Excel 电子表格中的实验数据进行模型拟合
  • 【k8s面试题2025】3、练气中期
  • 《机器学习》——SVD(奇异分解)降维
  • Go语言的编程范式
  • SpringBoot:RestTemplate与IllegalArgumentException
  • Springboot项目Jackson支持多种接收多种时间格式