机器学习 | 使用scikit-learn学习Python中的PCA(主成分分析)

news2024/11/15 16:01:19

为什么选择PCA?

  • 当有许多输入属性时,很难将数据可视化。在机器学习领域有一个非常著名的术语“维度诅咒”。
  • 基本上,它指的是数据集中的属性数量越多,对机器学习模型的准确性和训练时间产生不利影响。
  • 主成分分析(PCA)是解决这个问题的一种方法,用于更好的数据可视化和提高准确性。

PCA是如何工作的?

  • PCA是在应用任何ML算法之前执行的无监督预处理任务。PCA基于“正交线性变换”,这是一种将数据集的属性投影到新坐标系上的数学技术。描述最大方差的属性称为第一主成分,并放置在第一个坐标处。
  • 类似地,在描述方差方面处于第二位的属性被称为第二主成分,依此类推。简而言之,完整的数据集可以用主成分来表示。通常,超过90%的方差可以由两个或三个主成分解释。
  • 因此,主成分分析或PCA通过选择捕获关于数据集的最大信息的最重要属性来将数据从高维空间转换到低维空间。

Python实现

  • 要在Scikit learn中实现PCA,在应用PCA之前必须标准化/规范化数据。
  • PCA是从sklearn. decomposition导入的。我们需要选择所需数量的主成分。
  • 通常,n_components被选择为2以获得更好的可视化效果,但这取决于数据。
  • 通过fit和transform方法,传递属性。
  • 主成分的值可以使用components 检查,而每个主成分解释的方差可以使用explained_variance_ratio计算。

1.导入所有库

# import all libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

2.加载数据

从sklearn. datasets加载breast_cancer数据集。很明显,数据集有569个数据项,具有30个输入属性。有两种输出类别-良性和恶性。由于有30个输入要素,因此无法将此数据可视化。

#import the breast _cancer dataset
from sklearn.datasets import load_breast_cancer
data=load_breast_cancer()
data.keys()

# Check the output classes
print(data['target_names'])

# Check the input attributes
print(data['feature_names'])

输出
在这里插入图片描述

3.应用PCA

  • 在PCA之前标准化数据集。
  • 从sklearn.decomposition导入PCA。
  • 选择主成分的数量。

这里我们选择3。执行完这段代码后,我们知道x的维数是(569,3),而实际数据的维数是(569,30)。因此,很明显,利用PCA,维度的数量从30减少到3。如果我们选择n_components=2,则维度将减少到2。

# construct a dataframe using pandas
df1=pd.DataFrame(data['data'],columns=data['feature_names'])

# Scale data before applying PCA
scaling=StandardScaler()

# Use fit and transform method
scaling.fit(df1)
Scaled_data=scaling.transform(df1)

# Set the n_components=3
principal=PCA(n_components=3)
principal.fit(Scaled_data)
x=principal.transform(Scaled_data)

# Check the dimensions of data after PCA
print(x.shape)

输出

(569,3)

4.检查特征

principal.components_提供了一个数组,其中行数表示主成分的数量,而列数等于实际数据中的特征数量。 我们可以很容易地看到,当n_components被选择为3时,有三行。但是,与实际数据一样,每行有30列。

# Check the values of eigen vectors
# prodeced by principal components
principal.components_

在这里插入图片描述

5.绘制主成分图(可视化)

绘制主成分图以更好地显示数据。 虽然我们取了n_components =3,但这里我们分别使用前2个主成分和3个主成分绘制了一个二维图和三维图。对于三个主成分,我们需要绘制一个3D图。颜色显示原始数据集的2个输出类-良性和恶性。很明显,主成分在两个输出类之间显示出明显的分离。

plt.figure(figsize=(10,10))
plt.scatter(x[:,0],x[:,1],c=data['target'],cmap='plasma')
plt.xlabel('pc1')
plt.ylabel('pc2')

在这里插入图片描述
对于三个主成分,我们需要绘制一个3D图。x[:,0]表示第一主成分。类似地,X[:,1]和X[:,2]表示第二主成分和第三主成分。

# import relevant libraries for 3d graph
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(10,10))

# choose projection 3d for creating a 3d graph
axis = fig.add_subplot(111, projection='3d')

# x[:,0]is pc1,x[:,1] is pc2 while x[:,2] is pc3
axis.scatter(x[:,0],x[:,1],x[:,2], c=data['target'],cmap='plasma')
axis.set_xlabel("PC1", fontsize=10)
axis.set_ylabel("PC2", fontsize=10)
axis.set_zlabel("PC3", fontsize=10)

在这里插入图片描述

6.计算方差比

Explained_variance_ratio提供了主成分解释了多少变化的概念。

# check how much variance is explained by each principal component
print(principal.explained_variance_ratio_)

输出

array([0.44272026, 0.18971182, 0.09393163])

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

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

相关文章

使用Postman工具接口测试

文章目录 一、接口1.1 接口的概念1.2 接口的类型 二、接口测试2.1 概念2.2 原理2.3 特点 三、HTTP协议3.1 http协议简介3.2 URL格式3.3 HTTP请求3.3.1 请求行3.3.2 请求头3.3.3 请求体 3.4 HTTP响应3.4.1 状态行3.4.2 响应头3.4.3 响应体 3.4 传统风格接口3.5 RESTful风格接口 …

二网络复习

软路由: 1. ikuai 实现了一个多宽带线路的一个聚合可用家庭环境 2. Linux通过开启路由转发模拟路由器 (仅学习使用) #开启路由转发命令 vim /etc/sysctl.conf net.ipv4.ip_forward 1 sys…

C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(1)

1、FRIENDS c允许类声明为其它类,其它类的成员函数,或者非成员函数为friend。可以访问protected与private数据成员与成员函数。例如,假设你有两个类Foo与Bar。你可以指定Bar类是Foo类的一个friend: class Foo {friend class Bar;…

《声入人心》团综重启,芒果能否再造一个群像神话?

随着《声入人心》团综《吾湖音乐局》于9月20日宣布重启,芒果的又一群像综艺“杀”回了市场。 从2018年音综市场冲出的一匹黑马,到2024年“声人”分散在影视综各个领域,这六年间芒果上演了无数次“狼来了”,但这一次团综是真的来了…

实现一个超轻量级实例分割网络的思路

文章目录 前言一、基本思路二、picodet三、yolact三、picodetyolact总结 前言 在某些工业领域,由于成本问题算力有限,只能实时跑一些超轻量级网络,拿目标检测来说,例如yolo-fast,pp-picodet这些。如果要跑实例分割&am…

魅思-视频管理系统 getOrderStatus SQL注入漏洞复现

0x01 产品简介 魅思-视频管理系统是一款集成了视频管理、用户管理、手机端应用封装等功能的综合性视频管理系统。该系统不仅以其强大的视频管理功能、灵活的用户管理机制、便捷的手机端应用封装功能以及高安全性和现代化的界面设计,成为了市场上备受关注的视频管理系统之一。…

分布式数据库——HBase基本操作

启动HBase: 1.启动hadoop,进入hadoop的sbin中 cd /opt/hadoop/sbin/ 2.初始化namenode hdfs namenode -format 3.启动hdfs ./start-all.sh 4.启动hbase cd /opt/hbase/bin ./start-hbase.sh 5.使用jps查看进程 jps 以下图片则是hbase启动成功~ 运行HBase ./hbase sh…

软考中项第3版新教程变化,2张表格看到底

近期正在着手做《信息系统项目管理师一站通关》书友会的见面礼包时,无意中在电脑中翻到不知道什么时候保存的2张表格,出处已经记不得了,这2张表格对软考中项第3版新教程的变化点总结的言简意赅,有价值分享出来给你。 第1张表格如下…

使用C计算数码管段码

前言 平时使用数码管时为了避免使用跳线往往不会按照顺序焊接数码管的段选引脚,为了焊接的方便段选引脚可能会焊接的乱七八糟的,此时标准的段码表就用不了了,需要重新去计算。因为在焊接时为了考虑布线可能每次焊的顺序都会有不同&#xff0c…

使用vite+react+ts+Ant Design开发后台管理项目(三)

前言 本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术…

使用AI进行需求分析的案例研究

生成式 AI 的潜在应用场景似乎无穷无尽。虽然这令人兴奋,但也可能让人不知所措。因此,团队在使用这项技术时需要有明确的目标:关键是要明确生成式 AI 在团队工作中能产生哪些实质性影响。 在软件工程中,一个引人注目的应用场景是…

QMT如何获取股票基本信息?如上市时间、退市时间、代码、名称、是否是ST等。QMT量化软件支持!

获取股票概况 包含股票的上市时间、退市时间、代码、名称、是否是ST等。 #获取合约基础信息数据 该信息每交易日9点更新 #内置Python 提示 旧版本客户端中,函数名为ContextInfo.get_instrumentdetail 调用方法 内置python ContextInfo.get_instrument_detai…

全连接神经网络

这里写目录标题 全连接神经网络vs前馈神经网络基于全连接神经网络的手写数字识别使用Pytorch实现纯Python实现 全连接神经网络的局限 端到端学习 深度学习有时也称为端到端机器学习(end-to-end machine learning)。这里所说的端到端是指从一端到另一端的…

西门子因为TC在与PTC及达索的混战中占据优势,西门子与SAP的合作价值几何?(2)

今天这篇文章是通过腾讯会议先录了一个视频然后转录的,看看效果怎么样。 主要是我昨天写了一篇公众号的文章,这篇文章是转自国外的一个记者。写的是他对这个工业软件三巨头西门子、达索和PTC之间的竞争做的一个访谈性质的文章,谈了他的一些看…

1.1.5 计算机网络的性能指标(上)

信道: 表示向某一方向传送信息的通道(信道!通信线路)一条通信线路在逻辑上往往对应一条发送信道和一条接收信道。 速率: 指连接到网络上的节点在信道上传输数据的速率。也称数据率或比特率、数据传输速率。 速率单…

python常见的魔术方法

什么是魔术方法 Python类的内置方法,各自有各自的特殊功能,被称之为魔术方法 常见的魔术方法有以下: __init__:构造方法 __str__:字符串方法 __lt__:小于、大于符号比较 __le__:小于等于、大于等于符合比较 __eq__:等于符合比较__init__ c…

【论文速看】DL最新进展20240925-医学图像分割、目标跟踪、图像超分

目录 【医学图像分割】【目标跟踪】【图像超分】 【医学图像分割】 [2024] UU-Mamba: Uncertainty-aware U-Mamba for Cardiovascular Segmentation 论文链接:https://arxiv.org/pdf/2409.14305 代码链接:https://github.com/tiffany9056/UU-Mamba 在深…

【NLP】循环神经网络--RNN学习.day3

一.初步认识RNN 循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的深度学习模型。与传统的静态神经网络相比,RNN 可以有效处理输入数据的时间序列特性。这使得 RNN 在处理自然语言处理(NLP)、时间…

【Python报错已解决】TypeError: forward() got an unexpected keyword argument ‘labels‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

使用API有效率地管理Dynadot域名,注册域名服务器(NS)信息

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…