机器学习之 PCA降维

news2024/12/25 9:25:36

1.PCA 降维简介

主成分分析(Principal Component Analysis, PCA)是一种统计方法,用于在数据集中寻找一组线性组合的特征,这些特征被称为主成分。PCA 的目标是通过变换原始特征空间到新的特征空间,从而减少数据的维度,同时尽量保留数据中的重要信息。

PCA 的主要步骤包括:

  1. 计算协方差矩阵:反映各特征之间的相关性。
  2. 求解协方差矩阵的特征值和特征向量:特征值反映了主成分的重要性,特征向量指示了主成分的方向。
  3. 选择主成分:选择那些具有较大特征值的主成分,这些主成分能够解释数据的大部分变异。
  4. 数据投影:将原始数据投影到选定的主成分上,从而实现降维。

2.实例:

 接下来我们进行实例讲解:

实验数据

本次实验使用的数据集来自 Excel 文件 hua.xlsx。数据集包含多个特征和一个标签列。特征数据 X 包括所有除最后一列之外的列,而标签数据 y 则是最后一列。

代码讲解
  1. 读取数据并划分特征和标签

    import pandas as pd
    from sklearn.decomposition import PCA
    
    # 读取Excel文件中的数据
    data = pd.read_excel('hua.xlsx')
    
    # 数据划分:X表示特征数据,y表示标签数据
    X = data.iloc[:, :-1]
    y = data.iloc[:, -1]

    解释:

    • 使用 pd.read_excel 读取 Excel 文件。
    • 使用 iloc 选取特征数据和标签数据。
  2. 使用 PCA 进行主成分分析

    # 使用PCA进行主成分分析,保留累计贡献率达到90%的主成分
    pca = PCA(n_components=0.9)
    pca.fit(X)
    
    # 输出所有主成分的方差比率之和
    print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))
    # 输出每个主成分的方差比率
    print(pca.explained_variance_ratio_)
    
    # 将原始特征数据转换到新的特征空间
    new_x = pca.transform(X)
    print('PCA降维后数据:\n', new_x)

    解释:

    • 使用 PCA 类进行主成分分析,n_components=0.9 表示保留累计贡献率达到 90% 的主成分。
    • fit 方法拟合 PCA 模型。
    • explained_variance_ratio_ 属性返回每个主成分的方差比率。
    • transform 方法将原始特征数据转换到新的特征空间。
    • 输出结果:
  3. 数据划分与模型训练

    from sklearn.model_selection import train_test_split
    
    # 使用降维后的数据划分训练集和测试集
    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()
    classifier.fit(x_train, y_train)
    
    # 对训练集进行预测
    ytrain_pred = classifier.predict(x_train)
    print(ytrain_pred)
    
    # 对测试集进行预测
    ytest_pred = classifier.predict(x_test)
    print(ytest_pred)
    
    # 导入评价指标模块
    from sklearn import metrics
    
    # 输出训练集上的分类报告
    print(metrics.classification_report(y_train, ytrain_pred))
    
    # 输出测试集上的分类报告
    print(metrics.classification_report(y_test, ytest_pred))

    解释:

    • 使用 train_test_split 方法将降维后的数据划分为训练集和测试集。
    • 使用 LogisticRegression 分类器进行训练和预测。
    • 使用 classification_report 打印分类报告。
    • 训练集和测试集的输出结果:
对比分析

为了更好地理解 PCA 降维的效果,我们可以在使用 PCA 降维之前和之后分别训练逻辑回归模型,并比较它们的性能。

  1. 使用原始数据划分训练集和测试集

    # 使用原始数据划分训练集和测试集
    x_train_orig, x_test_orig, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
    
    # 创建逻辑回归分类器
    classifier = LogisticRegression()
    classifier.fit(x_train_orig, y_train)
    
    # 对训练集进行预测
    ytrain_pred_orig = classifier.predict(x_train_orig)
    print(ytrain_pred_orig)
    
    # 对测试集进行预测
    ytest_pred_orig = classifier.predict(x_test_orig)
    print(ytest_pred_orig)
    
    # 导入评价指标模块
    from sklearn import metrics
    
    # 输出训练集上的分类报告
    print(metrics.classification_report(y_train, ytrain_pred_orig))
    
    # 输出测试集上的分类报告
    print(metrics.classification_report(y_test, ytest_pred_orig))

    解释:

    • 使用原始数据划分训练集和测试集。
    • 训练和预测逻辑回归模型。
    • 输出分类报告。
输出对比:

原始特征数据的分类报告:

降维特征数据的分类报告:

3.总结

通过以上步骤,我们完成了 PCA 降维的过程,并使用逻辑回归模型进行了分类任务。PCA 降维不仅可以减少数据的维度,还可以提高模型的训练效率。通过对比降维前后的分类报告,我们可以评估 PCA 降维对模型性能的影响。PCA 特别适用于高维数据集,在保证数据信息不丢失的前提下,能够简化数据处理流程,提高模型的泛化能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2108609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AGV行业遇冷,叉车AGV逆风崛起:180家企业掀起血战

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 在自动化物流领域,一场悄然发生的变革正引领着行业风向的转折。尽管2024年以来,整体AGV(自动引导车)行业因下游市场需求疲软而遭遇增速…

打造安心宠物乐园:EasyCVR平台赋能猫咖/宠物店的智能视频监控解决方案

随着宠物经济的蓬勃发展,宠物店与猫咖等场所对顾客体验、宠物安全及健康管理的需求日益提升。然而,如何确保这些场所的安全与秩序,同时提升顾客体验,成为了经营者们关注的焦点。引入高效、智能的视频监控方案,不仅能够…

uniapp交互反馈

页面交互反馈可以通过:uni.showToast(object)实现,常用属性有 ioc值说明 值说明success显示成功图标,此时 title 文本在小程序平台最多显示 7 个汉字长度,App仅支持单行显示。error显示错误图标,此时 title 文本在小程序平台最多显示 7 个汉字…

【Linux】多线程:POSIX库、线程管理、线程ID

目录 一、POSIX线程库 二、线程ID 三、动态库加载 四、再谈线程ID 一、POSIX线程库 原生库:指的是操作系统自带的库,如POSIX线程库,在类Unix系统中通常是原生支持的。这些库是操作系统的一部分,提供了系统级的线程管理功能。 …

基于人工智能的植物病害检测系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 植物病害的早期检测对于农业生产至关重要,它有助于及时采取措施防止病害扩散,减少作物损失。通过人工智能技术…

css问题:display:flex布局+justify-content: space-between; 最后一行不能左对齐

解决方法1: display: flex;margin: 10px var(--leftRight); --leftRight: 动态计算一行减去item的宽度后剩下的间距 解决方法2:网格布局 display: grid;grid-template-columns: repeat(5, 1fr);margin: 10px auto; 完整代码: &l…

C++ 继承学习笔记

1.继承概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段,它允许程序员在 保 持原有类特性的基础上进行扩展 ,增加功能,这样产生新的类,称派生类。继承 呈现了面向对象 程序设计的层次结构 &#xf…

奥威让您更懂现金流情况

企业现金流一旦出了问题都是大问题,会直接影响到企业的日常运作,甚至直接关系到企业能不能继续存活,因此现金流量表是企业财务分析中重要报表之一,也是企业监控财务监控情况的重要手段之一。那么这么重要的一份现金流量表该怎么做…

科研绘图系列:R语言折线图(linechart plots)

文章目录 介绍加载R包导入数据数据预处理画图组合图形介绍 在R语言中,折线图(Line Plot)是一种常用的数据可视化类型,用于展示数据随时间或有序类别变化的趋势。折线图通过连接数据点来形成一条或多条线,这些线条可以清晰地表示数据的变化方向、速度和模式。 加载R包 k…

基于Spring Boot的宠物领养系统的设计与实现

基于Spring Boot的宠物领养系统的设计与实现 springboot138宠物领养系统的设计与实现 摘 要 如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一…

第 1 章:原生 AJAX

原生AJAX 1. AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。AJAX 不是新的编程语言,而是一种将现有的标准组合在一…

JavaWeb案例

环境搭建 先创建好数据库,建表并插入数据 create database talis; use talis;-- 部门管理 create table dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null com…

Springboot整合【Kafka】

1.添加依赖 在pom.xml文件中添加以下依赖&#xff1a; <!-- 进行统一的版本管理--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.3</version>&l…

【全网最全】2024年数学建模国赛A题30页完整建模文档+成品论文+代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 2024年高教社杯数学建模国赛A题“板凳龙”闹元宵&#xff1a;建立舞龙队的运动轨迹和速度的空间几何、运动学和优化模型 本文文章较长&#xff0c;建议先看…

ardupilot开发 --- MQTT 篇

原图&#xff1a;ardupilot-onboardComputer-4Glink-console.drawio 白嫖党请点赞、收藏、关注 你说在一起要算命 前言参考文献 前言 为什么在ardupilot开发过程中要用到MQTT &#xff1f; 客户要求向他们的指挥中心平台推送视频流和飞控数据&#xff0c;即要将图数传数据推送给…

代码随想录:96. 不同的二叉搜索树

96. 不同的二叉搜索树 class Solution { public:int numTrees(int n) {int dp[30]{0};//由i个结点组成的二叉搜索树有多少种dp[0]1; for(int i1;i<n;i)for(int j0;j<i;j)//j表示根节点左子树有j个结点dp[i]dp[j]*dp[i-j-1];//对根节点左右子树结点数量遍历//数量有左子树…

【计算机网络】TCP连接如何确保传输的可靠性

一、确保可靠传输的机制 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、提供可靠交付的、面向字节流的、支持全双工的传输层通信协议 1、序列号 seq TCP头部中的序号&#xff0c;占32位&#xff08;4字节&#xff09;&#xff1b; 发送方给报文段分配一个序列号&a…

CSS中 特殊类型的选择器 伪元素如何使用

一、什么是伪元素 在 CSS 中&#xff0c;伪元素是一种特殊类型的选择器&#xff0c;它允许你为元素的特定部分添加样式&#xff0c;而这些部分在 HTML 文档中并不实际存在。伪元素通常用于创建装饰性效果&#xff0c;如添加边框、背景、阴影等&#xff0c;而不需要额外的 HTML…

PHPJWT的使用

今天得空整理整理JWT的代码 首先&#xff0c;我们得知道什么是JWT&#xff1f; JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC7519&#xff09;&#xff0c;用于在网络应用环境中安全地传输声明信息。它是一种紧凑的、URL安全的令牌格式&#xff0…

(一)使用Visual Studio创建ASP.NET Core WebAPI项目

1.创建webAPI项目 选择ASP.NET Core Web API项目模版&#xff08;基于.Core框架可以支持多种系统环境&#xff0c;所以我们选择.Core框架&#xff09;&#xff0c;点下一步。 2.项目名称 项目名称设置为&#xff1a;CoreWebAPI&#xff0c;点下一步 3.选择框架 选择.NET6.0框…