机器学习之主成分分析案例-红酒主成分分析

🍷 机器学习实战:使用PCA与sklearn红酒数据集进行特征降维与模型预测对比

在机器学习中,主成分分析(PCA)是一种有效的降维技术,它通过寻找数据中的主成分来减少特征数量,同时尽量保留数据的结构。本案例将使用Python的scikit-learn库,结合红酒数据集,展示如何使用PCA进行特征降维,并比较降维前后模型预测性能的变化。

📚 数据集介绍

红酒数据集是scikit-learn内置的数据集之一,它包含了178个样本,每个样本有13个特征,描述了红酒的物理化学特性,以及一个表示红酒原产地的目标变量。

🤖 案例分析

我们将通过以下步骤进行PCA分析和模型预测对比:

  1. 加载数据并分割数据集。
  2. 使用PCA进行数据降维。
  3. 训练分类模型(使用降维后数据)。
  4. 训练同样的分类模型(不使用PCA)。
  5. 对比两种情况下模型的预测性能。
📝 Python代码实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 加载红酒数据集
wine = load_wine()
X, y = wine.data, wine.target# 数据预处理:标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 创建PCA模型,设置要保留的主成分数量
pca = PCA(n_components=2)# 应用PCA降维
X_pca = pca.fit_transform(X_scaled)# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
X_train_pca, X_test_pca = train_test_split(X_pca, test_size=0.2, random_state=42)# 创建分类模型
classifier = LogisticRegression(max_iter=10000)# 训练模型(使用原始数据)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
accuracy_no_pca = accuracy_score(y_test, y_pred)# 训练模型(使用PCA降维后的数据)
classifier.fit(X_train_pca, y_train)
y_pred_pca = classifier.predict(X_test_pca)
accuracy_with_pca = accuracy_score(y_test, y_pred_pca)# 评估模型
print("Accuracy without PCA:", accuracy_no_pca)
print("Accuracy with PCA:", accuracy_with_pca)
print("Report without PCA",classification_report(y_test, y_pred))
print("Report with PCA",classification_report(y_test, y_pred_pca))# 打印解释的方差比
explained_variance = pca.explained_variance_ratio_.sum()
print(f"Total explained variance by the first 2 components: {explained_variance:.2%}")# 可视化PCA降维后的数据
plt.figure(figsize=(10, 8))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, edgecolor='none', alpha=0.5, cmap='viridis')
plt.colorbar()
plt.title('PCA of Wine Dataset')
plt.show()
🔍 代码解析
  1. 数据加载与预处理:

    • 使用load_wine()加载红酒数据集。
    • 利用StandardScaler()对数据进行标准化。
  2. PCA降维:

    • 使用PCA类进行降维,这里选择保留2个主成分。
    • fit_transform方法用于拟合模型并转换数据。
  3. 模型训练与预测:

    • 使用LogisticRegression分类器进行训练和预测。
    • 对比使用原始数据和PCA降维后的数据进行模型训练的结果。
  4. 评估模型:

    • 使用accuracy_score来评估模型的准确率。
  5. 分析PCA效果:

    • explained_variance_ratio_.sum()计算所选主成分解释的总方差比例。
  6. 可视化:

    • 使用散点图可视化降维后的数据,颜色代表红酒的类别。
执行效果:

程序执行结果
红酒数据集主成分分析

🎯 结论

通过PCA,我们成功地将红酒数据集从13维降至2维,同时保留了数据的大部分信息。然后,我们使用降维后的数据训练了逻辑回归分类器,并与未降维的数据进行了预测性能的对比。结果表明,尽管PCA降维后的数据丢失了一些信息,但模型的预测准确率并没有显著下降,这表明PCA有效地保留了数据中的关键特征,同时减少了模型训练的复杂性和潜在的过拟合风险。此外,通过计算解释的方差比例,我们确认了前2个主成分足以保留数据的主要特征,从而验证了PCA降维策略的合理性。最后,通过可视化,我们可以直观地看到不同类别的红酒在降维后的空间中是如何分布的,这有助于我们理解PCA如何捕捉数据的关键结构。
PCA的优点和缺点
优点

  • 最常用的降维方法之一,易于理解和实现。
  • 能够捕捉数据中的主要变化方向。
  • 通过线性变换可以减少特征的数量。
    缺点
  • 对于非线性关系的数据降维效果可能不佳。
  • 不考虑类别信息。

别忘了给这篇帖子点个赞👍,如果喜欢的话,也可以收藏,关注我了解更多人工智能相关知识哦!😉

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

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

相关文章

人工智能全景图2.0 | 一文了解人工智能学科

大家好,这是一节人工智能的科普视频,试图用40多分钟的时间,带你宏观了解人工智能学科,对人工智能有个初步的、全景式的把握,这对你学习具体人工智能细节大有裨益,也是我珍贵的总结。 视频链接(建…

灰色关联分析【系统分析+综合评价】

系统分析: 判断哪个因素影响最大 基本思想:根据序列曲线几何形状的相似程度来判断其练习是否紧密 绘制统计图并进行分析 确定子序列和母序列 对变量进行预处理(去量纲、缩小变量范围) 熟练使用excel与其公式和固定&#xff08…

一套成熟的实验室信息管理系统源码,.Net 检验系统LIS源码,实现从采集、检测、报告、归档的全程跟踪管理

一套成熟的实验室信息管理系统源码。在长期的医疗信息化实践中,我们分析总结了大量客户实例,建立了以病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标的产品开发思路,将医学检验、科室管理和财务统计等检验科室/实验室…

电脑基础知识 | 电脑的基本组成

电脑作为我们日常工作和娱乐的重要工具,扮演着举足轻重的角色。当我们谈论电脑的基本组成时,其实是在探讨电脑硬件和软件两个核心部分。硬件是电脑看得见、摸得着的物理设备,而软件则是运行在这些硬件之上的程序和指令。两者相辅相成&#xf…

【GoLang】Golang 快速入门(第一篇)

目录 1.简介: 2.设计初衷: 3.Go语言的 特点 4.应用领域: 5.用go语言的公司: 6. 开发工具介绍以及环境搭建 1.工具介绍: 2.VSCode的安装: 3.安装过程: 4.Windows下搭建Go开发环境--安装和配置SDK 1.搭建Go开发环境 - 安装…

如何优化 PostgreSQL 中的连接查询性能?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 如何优化 PostgreSQL 中的连接查询性能?一、理解连接查询的基本原理二、优化连接查询的关键…

Pyqt5新手教程

PyQt界面开发的两种方式:可视化UI 编程式UI (1)可视化UI:基于Qt Designer可视化编辑工具进行组件拖放、属性设置、布局管理等操作创建界面。 一是将其保存为.ui文件,然后在PyQt应用程序中加载和使用.ui文件。 二是使用…

企业级数据分析平台合集介绍

企业发展离不开数据分析,数据分析推动着企业运营、决策和战略规划。它正逐步深入到各行各业的核心业务流程中,从传统的金融、零售、制造业扩展到医疗健康、教育、能源等更多领域。企业正通过数据分析平台实现数据资源的最大化利用,推动业务与…

音频剪辑里的几种基础操作

音频对于视频的重要性,怎么强调都不为过,它在视频里扮演着举足轻重的角色,对观众有着极为深远的影响。下面为您阐述音频在视频中的关键意义: ① 情感传递:音频有强大的情感传达能力,借助声音的起伏变化、音…

项目标红,识别不了maven项目,解决办法

首先,检查 preferences 其次,检查IDEA 的 jdk。File-》Project Structure 最后: 1. 2. mvn clean install -Dmaven.test.skiptrue 跳过单元测试 maven跳过单元测试-maven.test.skip和skipTests的区别-CSDN博客

CAD框架介绍

1、适用范围:矢量编辑软件如 服装模板软件、CAD软件、绘图软件 2、支持PLT,DXF,PDF,GCode(服装裁割指令)等矢量文件导入 3、支持简易的自动手动排料 4、直线,曲线等编辑功能 5、分页输出绘图指令 6、良好的框架结构:绘图引擎…

【MP4】mp4文件详解(二)—— mp文件分析工具

文章目录 一、前言二、MP4文件分析工具1、软件工具1.1、UltraEdit1.2、Hexinator1.3、mp4info1.4、mp4explorer1.5、MediaInfo 2、在线工具2.1、Online Mp4 Parser2.2、MP4Box.js / ISOBMFF Box Structure Viewer 一、前言 MP4文件分析工具可以帮助你查看和分析MP4视频文件中的…

从混乱到有序:Codigger 软件项目体检助力软件项目管理

在软件项目管理的奇妙世界里,程序员可弟哥就像是一位勇敢的探索者,他深知项目管理中那些常见的难题。 项目进度常常如同脱缰的野马,难以掌控,导致交付日期不断延迟,这让可弟哥十分头疼。成本也仿佛是个调皮的小精灵&am…

Vuex、Redux状态管理库

目录 状态管理库 单一事实来源:存储更新所有组件状态 Vuex 安装 配置 src->store index:拆分模块modules vue2 vue3 main index【以Conversation模块为例】【拆分state等属性】 store state() { return state; }类似于 vue中data() retu…

微软“蓝屏”事件:对全球IT基础设施韧性与安全性的深刻反思

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

数据传输安全--IPSEC

目录 IPSEC IPSEC可以提供的安全服务 IPSEC 协议簇 两种工作模式 传输模式 隧道模式 两个通信保护协议(两个安全协议) AH(鉴别头协议) 可以提供的安全服务 报头 安全索引参数SPI 序列号 认证数据 AH保护范围 传输模…

软考-软件设计师(2)-操作系统概述:多级索引、PV操作、段页式存储、磁盘管理、进程管理、有限自动机、I/O设备管理软件分层等高频考点

场景 软考-软件设计师-操作系统概述模块高频考点整理。 以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。 注: 博客:霸道流氓气质-CSDN博客 实现 知识点 文件系统多级索引 求文件系统多级索引的最大长度 二级索引=一级索引*一级索引…

vue3使用el-input-number,只能是整数,并且没有四舍五入

效果图 element plus上自带了个属性precision,设置**:precision“0”**,也可以没有小数点,但它这个是四舍五入的,不满足我的需要 我主要用的事件是blur的,input的试过发现值改变了,但是页面显示的没有改变,…

奔跑利润如何释放?来看看怎么分析现货黄金的跟踪止损位

跟踪止损位是现货黄金交易和资金管理中一个重要的概念。我们做现货黄金的时候,将仓位分成两部分(或以上)。第一部分,我们在首个目标位获利离场,剩下那部分就可以让它奔跑,看看市场会不会走出大行情&#xf…

Java 集合中的 Vector 类和 Stack 类

一.介绍 Java 集合框架提供了一组强大的类和接口来处理和操作对象集合。其中,Vector 和 Stack 类提供了以顺序方式存储和管理元素的基本功能。这两个类都是传统集合的一部分,但由于它们的同步性质和特定用例,它们仍然具有相关性。Vector 类实…