当前位置: 首页 > news >正文

机器学习之 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 特别适用于高维数据集,在保证数据信息不丢失的前提下,能够简化数据处理流程,提高模型的泛化能力。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 外排序之文件归并排序实现
  • 解锁 macOS 剪贴板历史记录,高效复制、粘贴技巧
  • Maven项目父模块POM中不应包含实际依赖(dependency)
  • 【Clickhouse】Clickhouse数据库简介
  • 如何选择web服务
  • Spring Boot Admin集成与自定义监控告警
  • HOT100(九)多维动态规划
  • EmguCV学习笔记 VB.Net 11.3 DNN其它
  • Ubuntu上安装libdc1394-22-dev出现无法定位安装包的解决办法
  • ④JdbcTemplate与声明式事务
  • UE5学习笔记21-武器的射击功能
  • 【小沐学OpenGL】Ubuntu环境下glew的安装和使用
  • 2.10鼠标事件
  • malloc中的mmap是如何分配内存的
  • Leetcode第414周赛第二题:3281. 范围内整数的最大得分
  • 【Leetcode】101. 对称二叉树
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • echarts花样作死的坑
  • JavaScript-Array类型
  • JavaScript新鲜事·第5期
  • Leetcode 27 Remove Element
  • Odoo domain写法及运用
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • V4L2视频输入框架概述
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 区块链共识机制优缺点对比都是什么
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • elasticsearch-head插件安装
  • "无招胜有招"nbsp;史上最全的互…
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #565. 查找之大编号
  • #VERDI# 关于如何查看FSM状态机的方法
  • #职场发展#其他
  • (¥1011)-(一千零一拾一元整)输出
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (C++)八皇后问题
  • (C语言)逆序输出字符串
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)PySpark3:SparkSQL编程
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)c52学习之旅-流水LED灯
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)c++ std::pair 与 std::make
  • (自用)网络编程
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Core引入性能分析引导优化
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net mvc 获取url中controller和action
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 生成二级域名
  • .NET的数据绑定
  • @SuppressWarnings(unchecked)代码的作用