【数学建模】常用算法-主成分分析PCA的Python实现

这篇具有很好参考价值的文章主要介绍了【数学建模】常用算法-主成分分析PCA的Python实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1前言

本文主要讲解主成分分析析法(PCA)的python实现,后续会跟进实例分析

2 原理-代码实现

2.1 实现步骤

主成分分析PCA是一种应用广泛的和降维方法,对其实现做以下归纳【数学建模】常用算法-主成分分析PCA的Python实现

2.2 代码实现

导入包

import numpy as np
  • 定义计算协方差矩阵函数
    X为输入的数据,m为样本数据的条数,也就是X的行数。
    对X进行标准化,方法为:减去均值除以方差,这部分的原理不懂的可以百度一下。
    标准化之后的数据就是均值为0,方差为1的标准正态分布。
# 计算协方差矩阵
def calc_cov(X):
    m = X.shape[0] # 样本的数量,行数
    # 数据标准化
    X = (X - np.mean(X, axis=0)) / np.var(X, axis=0) # 标准化之后均值为0,方差为1
    return 1 / m * np.matmul(X.T, X) # matmul为两个矩阵的乘积
  • 定义PCA的流程
    首先计算输入数据X的协方差,然后计算其特征值记为:eigenvalues,计算其特征向量记为:eigenvectors
    计算特征值和特征向量用的是 np.linalg.eig()函数,使用起来十分方便
    然后接下来就是计算出矩阵P,用Y=XP计算出降维后的数据Y
def pca(X, n_components):
    # 计算协方差矩阵
    cov_matrix = calc_cov(X)
    # 计算协方差矩阵的特征值和对应特征向量
    eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) # eigenvalues特征值,eigenvectors特征向量
    # 对特征值排序
    idx = eigenvalues.argsort()[::-1]
    # 取最大的前n_component组
    eigenvectors = eigenvectors[:, idx]
    eigenvectors = eigenvectors[:, :n_components]
    # Y=XP转换
    return np.matmul(X, eigenvectors)

2.3鸢尾花数据集例子

导入数据

from sklearn import datasets
import matplotlib.pyplot as plt
# 导入鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

查看数据的形状,其结果为(150, 4)

X.shape
# (150, 4)

计算协方差矩阵

cov_matrix = calc_cov(X) # 计算特征值
cov_matrix

【数学建模】常用算法-主成分分析PCA的Python实现
可以看到协方差矩阵为4*4的矩阵,然后我们计算该矩阵的特征值和特征向量

eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) # eigenvalues特征值,eigenvectors特征向量

【数学建模】常用算法-主成分分析PCA的Python实现
然后计算我们需要的P,这里我们保留3个主成分

idx = eigenvalues.argsort()[::-1]
# 取最大的前n_component组
eigenvectors = eigenvectors[:, idx]
eigenvectors = eigenvectors[:, :3]

得到了一个4行3列的矩阵
【数学建模】常用算法-主成分分析PCA的Python实现
然后利用P求得降维后的数据

# Y=PX转换
np.matmul(X, eigenvectors)

降维后的数据为(150, 4)*(4, 3)=(150, 3)
也就是150条,3列的数据,数据由原来的4维降低到了3维
【数学建模】常用算法-主成分分析PCA的Python实现

3 基于Sklearn的实现

# 导入sklearn降维模块
from sklearn import decomposition
# 创建pca模型实例,主成分个数为3个
pca = decomposition.PCA(n_components=3) # 写我们需要几个主成分
# 模型拟合
pca.fit(X)
# 拟合模型并将模型应用于数据X
X_trans = pca.transform(X)

# 颜色列表
colors = ['navy', 'turquoise', 'darkorange']
# 绘制不同类别
for c, i, target_name in zip(colors, [0,1,2], iris.target_names):
    plt.scatter(X_trans[y == i, 0], X_trans[y == i, 1], 
            color=c, lw=2, label=target_name)
# 添加图例
plt.legend()
plt.show()

【数学建模】常用算法-主成分分析PCA的Python实现文章来源地址https://www.toymoban.com/news/detail-404256.html

到了这里,关于【数学建模】常用算法-主成分分析PCA的Python实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模-最优包衣厚度终点判别法(主成分分析)

    💞💞 前言 hello hello~ ,这里是viperrrrrrr~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页:viperrrrrrr的博客 💥 欢迎学习数学建模算法、大数据、前端等知识,让我们一起向目标进发!        包衣是将片剂的外表面均匀地包裹上一层衣膜的过程,旨在控制药

    2024年04月17日
    浏览(42)
  • 数学建模——古代玻璃制品的成分分析与鉴别的设计

    摘  要 本文针对不同类别文物样品的相关数据,利用数学模型及分析算法,探求不同玻璃文物中类型、颜色、纹饰、化学成分等数据之间存在的差异与联系,探索古代玻璃文物化学成分之间存在的规律,探究对未知类别玻璃文物进行鉴别的机理。 问题一中,利用卡方检验从

    2024年02月08日
    浏览(45)
  • 数学建模学习(102):成分数据分析之中心对数比转换【已修改】

    为什么要写这篇文章?背景源于2022国赛C题的评阅要点,很多参加数模的同学应该都看到了,估计几乎没有人听说过这个方法。因此,本文对该方法进行一个讲解。当然,其实你在这次比赛中没有用到这个方法,也不影响你的国奖。在我国赛辅导的几个同学中,我也是教他们

    2024年02月06日
    浏览(43)
  • 2022全国数学建模-C 题复盘 古代玻璃制品的成分分析与鉴别

    上个月参加了全国数学建模大赛做了C题,很幸运获得省一并送评国奖,整理了一下程序并重新复盘了一下,在这里简单展示 问题一、二、三的部分小问 解题思路与过程以及python程序。 读取、展示数据: data1:   data2: data3: 预处理: 1)填补表单1颜色缺失值以及表单2化学成分

    2024年02月09日
    浏览(42)
  • 【Python数学建模常用算法代码——蒙特卡洛模型】

    蒙特卡洛方法的理论支撑其实是概率论或统计学中的大数定律。基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果。下面我们以三个经典的小实验来学习下蒙特卡洛算法思想。 实验原理 在正方形内部有一

    2024年02月02日
    浏览(51)
  • 数学建模学习(2):数学建模各类常用的算法全解析

    常见的评价算法  1.层次分析法 基本思想         是定性与定量相结合的多准则决策、评价方法。将决策的有关元素分解成 目标层、准则层和方案层 ,并通过人们的 判断对决策方案的 优劣进行排序 ,在此基础上进行定性和定量分析。它把人的思维过程层次化、数量化,

    2024年02月09日
    浏览(53)
  • 数学建模十大经典算法和常用算法

    1、蒙特卡罗算法: 该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时通过模拟可以来检验自己模型的正确性。 2、数据拟合、参数估计、插值等数据处理算法: 比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于算法,通常使用Matlab作为

    2024年02月07日
    浏览(45)
  • 数学建模常用算法—马尔可夫预测

    今天数模君带大家学习一下数学建模中的预测算法之马尔科夫预测。 目录 模型的含义 实例分析 马尔可夫(Markov)预测法,就是一种关于事件发生的概率预测方法。它是根据事件的目前状况来预测其将来各个时刻(或时期)变动状况的一种预测方法。马尔可夫预测法是地理预测

    2024年02月09日
    浏览(50)
  • 数学建模-32种常用算法汇总

    全国大学生数学建模竞赛(以下简称\\\"数学建模竞赛\\\")是由中国高等教育学会主办,旨在促进大学生对数学和相关学科的学习和研究,培养创新精神和综合素质的全国性大学生学科竞赛活动。该竞赛一般在每年的十月份举办,是目前国内规模最大、影响力最广的大学生学科竞

    2024年02月13日
    浏览(38)
  • 数学建模常用算法—多目标规划

    前面我们已经学习了线性规划及非线性规划,接下来带大家一起学习多目标规划模型。 目录 模型的含义 求解思路 建立目标规划的条件 目标规划的目标函数 目标规划的模型应用 模型的建立 目标规划的一般数学模型 模型示例与求解 多目标规划是数学规划的一个分支。研究多

    2023年04月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包