机器学习之 PCA降维

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.mzph.cn/web/52112.shtml

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

相关文章

持久化分析

目录 介绍步骤WMI持久化分析注册表映像劫持IFEO持久化 介绍 1、WMI 的全称是 Windows Management Instrumentation,即 Windows 管理规范,在 Windows 操作系统中,随着 WMI 技术的引入并在之后随着时间的推移而过时,它作为一项功能…

Golang | Leetcode Golang题解之第387题字符串中的第一个唯一字符

题目: 题解: type pair struct {ch bytepos int }func firstUniqChar(s string) int {n : len(s)pos : [26]int{}for i : range pos[:] {pos[i] n}q : []pair{}for i : range s {ch : s[i] - aif pos[ch] n {pos[ch] iq append(q, pair{ch, i})} e…

用亚马逊云科技Graviton高性能/低耗能处理器构建AI向量数据库(上篇)

简介: 今天小李哥将介绍亚马逊推出的云平台4代高性能计算处理器Gravition,并利用该处理器构建生成式AI向量数据库。利用向量数据库,我们可以开发和构建多样化的生成式AI应用,如RAG知识库,特定领域知识的聊天机器人等。…

聚铭网络受邀成为ISC终端安全生态联盟首批成员单位

近日,在2024数博会这一行业盛会上,全国首个专注于终端能力的联盟——ISC终端安全生态联盟正式成立,聚铭网络受邀成为该联盟的首批成员单位之一。 ISC终端安全生态联盟由360集团发起,并联合20余家业内领先企业共同创立。联盟旨在通…

Rk3588 Android12 AIDL 开发

AIDL (Android Interface Definition Language) 和 HIDL (HAL Interface Definition Language) 都是 Android 系统中用于定义接口的工具,但它们有不同的用途和特性。 AIDL (Android Interface Definition Language) 用途: 主要用于应用程序之间的进程间…

Windows键盘快捷方式

键盘快捷方式是两个或多个键的组合,可用于执行通常需要鼠标或其他指针设备才能执行的任务。 使用键盘快捷方式你可以更轻松地与电脑进行交互,从而在使用 Windows 和其他应用时节省时间和精力。 大多数应用还提供加速键,以让你能够更轻松地使…

大数据-120 - Flink Window 窗口机制-滑动时间窗口、会话窗口-基于时间驱动基于事件驱动

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

自定义 SpringBoot Starter

文章目录 一、自定义 starter1.1 创建 maven 项目1.2 创建邮件配置属性类1.3 创建模拟邮件发送服务类1.4 创建自动配置类1.5 spring.factories 相关配置1.6 打包成依赖 二、测试项目2.1 创建项目2.2 application.yml 配置2.3 测试应用 参考资料 本文源码位于 java-demos/spring…

Restful风格接口开发

一、项目搭建 安装nestjs脚手架 // 安装nestjs脚手架 npm i nestjs/cli// 新建 nest new [名字]//选择要用的工具 npm / yarn / pnpm 文件信息: 【main.ts】: 入口文件,通过NestFactory(由nestjs/core库抛出的对象&#x…

微信小程序手写签名

微信小程序手写签名组件 该组件基于signature_pad封装,signature_pad本身是web端的插件,此处将插件代码修改为小程序端可用。 signature_pad.js /*!* Signature Pad v5.0.3 | https://github.com/szimek/signature_pad* (c) 2024 Szymon Nowak | Releas…

九盾叉车U型区域警示灯,高效照明和安全警示

叉车运作的环境比较复杂,在方便人们物流运输的同时也存在着很大的安全隐患,特别是叉车碰撞人的事故发生率很高,那我们该怎么在减少成本的同时又能避免碰撞事故的发生呢? 九盾叉车U型区域警示灯,仅需一盏灯安装在叉车尾…

十一 面向对象技术(考点篇)试题

A ;D,D。实际答案:C;D,D 考的很偏了。UML 2.0基础结构的设计目标是定义一个元语言的核心 UML 2.0 【InfrastructureLibrary】,通过对此核心的复用,除了可以定义一个自展的UML元模型,也可以 Infr…

基于IP子网的VLAN典型配置举例(H3C,其他厂商同理)

基于IP子网的VLAN典型配置举例 1. 组网需求 如下图所示,办公区的主机属于不同的网段192.168.5.0/24和192.168.50.0/24,Device C在收到来自办公区主机的报文时,根据报文的源IP地址,使来自不同网段主机的报文分别在指定的VLAN中传…

7、Django Admin删除默认应用程序

admin文件 from django.contrib.auth.models import User, Groupadmin.site.unregister(User) admin.site.unregister(Group) 显示效果: 前 后

基于FreeRTOS的STM32多功能手表

前言 项目背景 项目演示 使用到的硬件 项目原理图 目前版本实现的功能 设计到的freertos知识 实现思路 代码讲解 初始化GPIO引脚、配置时钟 蜂鸣器初始化以及软件定时器创建 系统默认创建的defaultTaskHandle 创建七个Task,代表七个功能 ShowTimeTask …

2024.9自然语言及语言处理设计开发工程师专项培训通知!

为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求,深入实施人才强国战略和创新驱动发展战略,加强全国数字化人才队伍建设,持续推进人工智能从业人员…

Epoll 用法

Epoll 监听 EPOLL_CTL_DEL EPOLL_CTL_ADD epoll_event event event.events event.data.fd

双指针(3)_快慢指针_快乐数问题

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 双指针(3)_快慢指针_快乐数问题 收录于专栏【经典算法练习】 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1.…

Android Studio gradle下载太慢了!怎么办?(已解决)

Android Studio!你到底干了什么?! 不能高速下载gradle,我等如何进行app编程?! 很简单,我修改gradle地址不就是了。 找到gradle-wrapper.properties文件 修改其中distributionUrl的地址。 将 ht…

ES配合高德地图JS-API实现地理位置查询

目录 实现功能点 技术选型 具体实现 Vue3整合高德地图JS API-2.0 添加商户:前端 添加商户:后端/ES 查询用户当前地理坐标 获取附近(指定距离)的商户 总结/测试Demo代码地址 测试概述:用户使用高德地图组件获取商户…