《机器学习》——PCA降维

news/2025/1/17 17:38:20/

文章目录

  • 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.ppmy.cn/news/1563937.html

相关文章

淘宝 URL 采集商品详情数据的常见方法

一、通过淘宝开放平台(如果有资质) 注册成为淘宝开发者 访问淘宝开放平台官方网站,按照要求填写开发者信息,包括企业或个人身份验证等步骤。这一步是为了获取合法的 API 使用权限。 了解商品详情 API 淘宝开放平台提供了一系列…

ubuntu Android : adb logcat 过滤多个log

指定字符串的log,可以用下面的形式,注意加-E和单引号: adb shell " logcat | grep -E strings1|strings2 " 参考:Android : adb logcat 过滤多个log 用adb shell “ logcat | grep -E ‘strings1| strings2 ‘ “ 形…

Chapter 3-11. Detecting Congestion in Fibre Channel Fabrics

Link Failure — Link Reset Failed Nonempty Recv Queue (LR Rcvd B2B) Direction — Ingress Congestion方向 - 入口拥塞 Severity — Severe严重程度 - 严重 LR Rcvd B2B stands for Link Reset (LR) primitive received but ingress frames are still queued. LR Rcvd B…

uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推

uniApp开通unipush1.0个推,SpringBoot程序集成 一、APP开通unipush1.0个推(商户App源码仅支持1.0个推) 1.app模块配置开通推送 2.应用开通推送 3.开通后点击消息推送菜单会看到如下页面 完成以上步骤后 此时android 仅支持在线推送。 4.配置各厂商离线推送 暂未…

VirtualBox环境中vscode报错:提取扩展时出错。Failed to fetch

问题现象: VSCode切换到扩展并筛选特色时(为了触发联网),提示提取扩展时出错。Failed to fetch 拔网线复现不了,完全没有网络VSCode只会提示离线 虚拟机内Edge浏览器访问https://marketplace.visualstudio.com/直接报ERR_CONNECTION_REFUSED…

yt-dlp脚本下载音频可选设置代理

import yt_dlp# 配置:是否使用代理 use_proxy = True # 设置为 False 可关闭代理# 代理地址 proxy_url = socks5://127.0.0.1:1089URLS = [https://www.bilibili.com/video/BV1WTktYcEcQ/?spm_id_from=333.1007.tianma.6-2-20.click&vd_source=dcb58f8fe1faf749f438620b…

50_Lua垃圾回收

1.Lua垃圾回收机制概述 Lua采用了一种自动内存管理机制,称为垃圾回收(Garbage Collection, GC)。垃圾回收的主要目的是回收程序中不再被使用的内存,从而避免内存泄漏。Lua的垃圾回收器负责回收动态分配的对象,如函数、用户数据、表、字符串、线程、内部结构等。Lua的垃圾…

Grails应用http.server.requests指标数据采集问题排查及解决

问题 遇到的问题:同一个应用,Spring Boot(Java)和Grails(Groovy)混合编程,常规的Spring Controller,可通过Micromete Pushgateway, 采集到http.server.requests指标数据,注意下面的指标名称是点号&#…