首页 > 其他分享 >亦菲喊你来学机器学习(20) --PCA数据降维

亦菲喊你来学机器学习(20) --PCA数据降维

时间:2024-09-10 20:23:06浏览次数:3  
标签:1.00 20 -- 来学 降维 train PCA 数据 特征

文章目录

PCA数据降维

主成分分析(Principal Component Analysis, PCA)是一种常用的数据降维技术,它可以在保留数据集中最重要的特征的同时,减少数据的维度。PCA通过创建一个新的特征空间来实现这一点,这个新空间是由原始数据的主成分(即方差最大的方向)定义的。

本篇所用数据:
链接: 训练数据
提取码: 9hgj

一、降维

数据的特征又叫做数据的维度,所谓降维,即是减少数据的特征。

相较于随机森林的不同,随机森林是筛选出权重较大的特征,其余的特征都进行特征工程处理(即去除)。

但是PCA降维可以理解为将所有的特征压缩到另一个特征空间,将多个维度的特征映射在一个维度上,从而减少它总的维度。

二、优缺点

优点

  1. 计算方法简单,容易实现。
  2. 可以减少指标筛选的工作量。
  3. 消除变量间的多重共线性。
  4. 在一定程度上能减少噪声数据。

缺点

  1. 特征必须是连续型变量。
  2. 无法解释降维后的数据是什么。
  3. 贡献率小的成分有可能更重要。

三、参数

PCA(n_components=None,copy=True,whiten=False,svd_solver='auto',tol=0.0,
    iterated_power='auto',random_state=None)

主要参数:

-- n_components:这个参数可以帮我们指定希望PCA降维后的特征维度数目。
				 指定整数,表示要降维到的目标,【比如十维的数据,指定n_components=5,表示将十维数据降维到五维】
    			 如果为小数,表示累计方差百分比。
        
-- copy: 类型:bool,True或者False,缺省时默认为True。表示是否在运行算法时,将原始训练数据复制一份,保护原数据。

-- whiten:判断是否进行白化。所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1.对于PCA降维本身来说,一般不需要白化。			  如果你PCA降维后有后续的数据处理动作,可以考虑白化。默认值是False,即不进行白化。

-- svd_solver:指定奇异值分解SVD的方法,【按默认设置即可】,有4个可以选择的值:
    - randomized一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法。
    - full则是传统意义上的SVD,使用了scipy库对应的实现。
    - arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的		sparse SVD实现。
    - 默认是auto,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了。

四、实例应用

目标流程:使用PCA进行特征降维 -----> 使用逻辑回归模型进行分类任务

1. 读取文件

使用pandas库的read_excel函数读取名为’hua.xlsx’的Excel文件,并将内容存储在DataFrame 类型数据data中。

import pandas as pd  
data = pd.read_excel('hua.xlsx')

2. 分离特征和目标变量

通过iloc索引器,x被设置为DataFrame中除最后一列外的所有列(即特征),而y被设置为最后一列(即目标变量或标签)。

x = data.iloc[:,:-1]  
y = data.iloc[:,-1]

3. 使用PCA进行降维

导入PCA类并创建一个PCA实例,设置n_components=0.90意味着希望保留的数据方差比例为90%。然后,使用fit方法计算数据的主成分。

from sklearn.decomposition import PCA  
pca = PCA(n_components=0.90)  
pca.fit(x)

4. 打印特征所占百分比和具体比例

这两行代码分别打印了保留的总方差百分比和每个主成分解释的方差比例。

print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))  
print(pca.explained_variance_ratio_)
--------------------
特征所占百分比:0.9287327483408421	#百分结果通常不会与设定值正好相同,但肯定会比设定值大
[0.84389796 0.08483479]

5. PCA降维后的数据

使用transform方法将原始特征x映射到PCA的主成分空间中,得到降维后的数据new_x。

new_x = pca.transform(x)  
print(new_x)
---------------
PCA降维后数据:
[	#展示部分结果
 [-0.64329795  0.06460986]
 [-1.17974815  0.04201328]
 [-0.10025387  0.3220728 ]
 [ 0.12824342  0.03129845]
 [-1.99954745  0.05762851]
 …… ……
]

6. 划分数据集

使用train_test_split函数将降维后的特征new_x和目标变量y划分为训练集和测试集,测试集占20%。

x_train,x_test,y_train,y_test = train_test_split(new_x,y,test_size=0.2,random_state=0)

7. 训练逻辑回归模型

导入LogisticRegression类并创建一个实例,然后使用训练数据x_train和y_train来训练模型。

from sklearn.linear_model import LogisticRegression  
classifier_PCA = LogisticRegression()  
classifier_PCA.fit(x_train,y_train)

8. 评估模型性能

使用训练好的模型对训练集和测试集进行预测,并使用classification_report函数打印出分类报告,包括精确度、召回率、F1分数等指标,以评估模型在训练集和测试集上的性能。

  • 训练集
from sklearn import metrics  
train_pre = classifier_PCA.predict(x_train)  
print(metrics.classification_report(y_train,train_pre)) 
--------------------
              precision    recall  f1-score   support

           0       0.92      0.96      0.94        25
           1       0.96      0.93      0.94        27

    accuracy                           0.94        52
   macro avg       0.94      0.94      0.94        52
weighted avg       0.94      0.94      0.94        52
  • 测试集
test_pre = classifier_PCA.predict(x_test)  
print(metrics.classification_report(y_test,test_pre))
-------------------
              precision    recall  f1-score   support

           0       1.00      1.00      1.00         5
           1       1.00      1.00      1.00         9

    accuracy                           1.00        14
   macro avg       1.00      1.00      1.00        14
weighted avg       1.00      1.00      1.00        14

这样我们就完成了使用PCA进行特征降维,并使用逻辑回归模型进行分类任务的完整流程。

总结

本篇介绍了:

  1. PCA降维指的是减少数据特征。
  2. PCA适用于:
    1. 数据维度高的时候
    2. 将数据可视化时:将维度转化为二维或三维等
  3. 完整的PCA处理流程。

标签:1.00,20,--,来学,降维,train,PCA,数据,特征
From: https://blog.csdn.net/m0_74896766/article/details/142044367

相关文章

  • Vue CLI:初学者指南与深入理解
    VueCLI:初学者指南与深入理解简介VueCLI是一个强大的工具,它帮助开发者快速搭建Vue.js项目。无论你是初学者还是有经验的开发者,VueCLI都能提供便利的功能来加快开发流程。本文将带你从安装VueCLI开始,逐步创建一个简单的Vue应用,并深入理解其背后的一些核心概念。......
  • “论剑”智算时代,长沙已经站在计算产业的“华山之巅”
    文|智能相对论作者|陈泊丞共赴全新十年之约,长沙又来搞大事情了!2024互联网岳麓峰会以“AI汇湘江数智领航未来”为主题,全面聚焦在“AI+”时代把握数字化、网络化、智能化发展机遇,积极响应当前人工智能技术迅猛发展的势头及其在经济、社会等领域的强势影响力,为湖南数字产业发展理......
  • 欢迎来到我的Java世界“抽象类”
    前言在上篇中我们学习到了继承的概念、语法等等,那么小编将来为大家方享下一篇Java中的抽象类。1.抽象类的概念2.抽象类的语法3.抽象类的特性4.抽象类的作用一:讲到抽象类,大家是不是会很迷惑什么是抽象类?在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并......
  • 第一章 什么是支付
    前言  本文中有很多概念性的东西,有的是我自己润色的自己的理解,有的是整合了多种互联网上的一些简介。希望看完这篇文章,能够对支付有一个大体的概念,在这方面开展工作的时候有所帮助。从我个人理解上来说,我的观点是了解更多的相关概念能够让后面软件系统落地的时候想的更......
  • 《深度学习》OpenCV 高阶 图像金字塔 用法解析及案例实现
    目录一、图像金字塔1、什么是图像金字塔2、图像金字塔作用    1)金字塔尺度间的图像信息补充    2)目标检测与识别    3)图像融合与拼接    4)图像增强与去噪    5)图像压缩与编码二、用法解析1、向下采样        1)概念......
  • OpenCV-模板匹配
    文章目录一、简介1.定义与原理2.算法与方法3.参数解释二、代码实现1.读取数据2.检查图像是否成功加载3.获取模板的高度和宽度4.模板匹配5.计算匹配区域坐标6.显示图像7.全部代码三、总结一、简介在OpenCV中,模型匹配(或称为模板匹配)是一种用于在图像中查找与给定模板......
  • Java【类和面向对象】
    Java作为一种面向对象的编程语言,支持类、对象、继承、封装、多态、接口、抽象、方法、方法重载的概念。1.类和对象1.1基本概念1.1.1类(Class)一组相关属性和行为的集合。可以看成是一类事物的模板,用于定义对象的蓝图,包括属性和方法(描述该类事物)。1.1.2对象(Object)一类事物......
  • Springboot车辆充电桩管理系统的设计与实现mv56d
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景与意义随着新能源汽车的普及,车辆充电桩的数量急剧增加,如何高效、智能地管理这些充电桩成为亟待解决的问题。一个完善的车辆充电桩管理......
  • Springboot宠物救助系统v6550程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着城市化进程的加快,流浪宠物问题日益严重,成为社会关注的焦点。传统救助方式受限于信息不流通、资源分配不均等问题,难以高效解决流浪......
  • Springboot宠物达人交流社区系统p9n9u(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景与意义随着宠物成为越来越多家庭的重要成员,宠物主人对宠物养护、训练、健康等方面的知识需求日益增长。然而,缺乏专业的交流平台使得许......