降维算法实战项目(1)—使用PCA对二维数据降维(Python代码+数据集)

这篇具有很好参考价值的文章主要介绍了降维算法实战项目(1)—使用PCA对二维数据降维(Python代码+数据集)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、PCA算法

PCA算法为主成分分析算法,在数据集中找到“主成分”,可以用于压缩数据维度。

我们将首先通过一个2D数据集进行实验,以获得关于PCA如何工作的直观感受,然后在一个更大的图像数据集上使用它。

PCA算法的好处如下:

1.使得数据集更易使用

2.降低算法的计算开销

3.去除噪声

4.使得结果更易理解

线性回归和神经网络算法,都可以先使用PCA对数据进行降维。

关于PCA算法的理论部分,可以参考我之前的博客:

https://blog.csdn.net/wzk4869/article/details/126017831?spm=1001.2014.3001.5501

二、PCA实战项目

老样子,先放上需要使用的数据集:

链接:https://pan.baidu.com/s/1_8yJo58oCuuo6ZasaC5R3A
提取码:6666

导入需要的包

import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy.io import loadmat
from numpy import *
import pandas as pd

导入数据集

def load_dataset():
    path='./data/ex7data1.mat'
    two_dimension_data=loadmat(path)
    X=two_dimension_data['X']
    return X

我们看一下对应的数据集:

[[3.38156267 3.38911268]
 [4.52787538 5.8541781 ]
 [2.65568187 4.41199472]
 [2.76523467 3.71541365]
 [2.84656011 4.17550645]
 [3.89067196 6.48838087]
 [3.47580524 3.63284876]
 [5.91129845 6.68076853]
 [3.92889397 5.09844661]
 [4.56183537 5.62329929]
 [4.57407171 5.39765069]
 [4.37173356 5.46116549]
 [4.19169388 4.95469359]
 [5.24408518 4.66148767]
 [2.8358402  3.76801716]
 [5.63526969 6.31211438]
 [4.68632968 5.6652411 ]
 [2.85051337 4.62645627]
 [5.1101573  7.36319662]
 [5.18256377 4.64650909]
 [5.70732809 6.68103995]
 [3.57968458 4.80278074]
 [5.63937773 6.12043594]
 [4.26346851 4.68942896]
 [2.53651693 3.88449078]
 [3.22382902 4.94255585]
 [4.92948801 5.95501971]
 [5.79295774 5.10839305]
 [2.81684824 4.81895769]
 [3.88882414 5.10036564]
 [3.34323419 5.89301345]
 [5.87973414 5.52141664]
 [3.10391912 3.85710242]
 [5.33150572 4.68074235]
 [3.37542687 4.56537852]
 [4.77667888 6.25435039]
 [2.6757463  3.73096988]
 [5.50027665 5.67948113]
 [1.79709714 3.24753885]
 [4.3225147  5.11110472]
 [4.42100445 6.02563978]
 [3.17929886 4.43686032]
 [3.03354125 3.97879278]
 [4.6093482  5.879792  ]
 [2.96378859 3.30024835]
 [3.97176248 5.40773735]
 [1.18023321 2.87869409]
 [1.91895045 5.07107848]
 [3.95524687 4.5053271 ]
 [5.11795499 6.08507386]]
(50, 2)

绘制散点图

def plot_scatter(X):
    plt.figure(figsize=(12,8))
    plt.scatter(X[:,0],X[:,1])
    plt.show()

我们看一下可视化后的散点图:

降维算法实战项目(1)—使用PCA对二维数据降维(Python代码+数据集)
去均值化
降维算法实战项目(1)—使用PCA对二维数据降维(Python代码+数据集)
我们返回的结果是去均值化后的数据,并生成散点图:

def demean(X):
    X_demean=(X-mean(X,axis=0))
    plt.figure(figsize=(12,8))
    plt.scatter(X_demean[:,0],X_demean[:,1])
    plt.show()
    return X_demean

降维算法实战项目(1)—使用PCA对二维数据降维(Python代码+数据集)
计算数据的协方差矩阵
降维算法实战项目(1)—使用PCA对二维数据降维(Python代码+数据集)

def sigma_matrix(X_demean):
    sigma=(X_demean.T @ X_demean)/X_demean.shape[0]
    return sigma
[[1.34852518 0.86535019]
 [0.86535019 1.02641621]]

计算特征值、特征向量

def usv(sigma):
    u,s,v=linalg.svd(sigma)
    return u,s,v
[[-0.76908153 -0.63915068]
 [-0.63915068  0.76908153]]
====================================================================================================
[2.06768062 0.30726078]
====================================================================================================
[[-0.76908153 -0.63915068]
 [-0.63915068  0.76908153]]

对数据进行降维

对数据进行降维,降维后得到Z,在二维数据中Z数据为一条直线点(一维)。

def project_data(X_demean, u, k):
    u_reduced = u[:,:k]
    z=dot(X_demean, u_reduced)
    return z
[[ 1.49876595]
 [-0.95839024]
 [ 1.40325172]
 [ 1.76421694]
 [ 1.40760243]
 [-0.87367998]
 [ 1.27050164]
 [-2.5506712 ]
 [-0.01469839]
 [-0.83694188]
 [-0.70212917]
 [-0.58711016]
 [-0.12493311]
 [-0.74690506]
 [ 1.67629396]
 [-2.10275704]
 [-0.9594953 ]
 [ 1.11633715]
 [-2.37070273]
 [-0.69001651]
 [-2.39397485]
 [ 0.44284714]
 [-1.98340505]
 [-0.01058959]
 [ 1.83205377]
 [ 0.62719172]
 [-1.33171608]
 [-1.4546727 ]
 [ 1.01919098]
 [ 0.01489202]
 [-0.07212622]
 [-1.78539513]
 [ 1.41318051]
 [-0.82644523]
 [ 0.75167377]
 [-1.40551081]
 [ 1.82309802]
 [-1.59458841]
 [ 2.80783613]
 [-0.32551527]
 [-0.98578762]
 [ 0.98465469]
 [ 1.38952836]
 [-1.03742062]
 [ 1.87686597]
 [-0.24535117]
 [ 3.51800218]
 [ 1.54860441]
 [ 0.34412682]
 [-1.55978675]]

还原数据

def recover_data(z, u, k):
    u_reduced = u[:,:k]
    X_recover=dot(z, u_reduced.T)
    return X_recover
[[-1.15267321 -0.95793728]
 [ 0.73708023  0.61255577]
 [-1.07921498 -0.89688929]
 [-1.35682667 -1.12760046]
 [-1.08256103 -0.89967005]
 [ 0.67193114  0.55841316]
 [-0.97711935 -0.81204199]
 [ 1.96167412  1.63026324]
 [ 0.01130426  0.00939449]
 [ 0.64367655  0.53493198]
 [ 0.53999458  0.44876634]
 [ 0.45153559  0.37525186]
 [ 0.09608375  0.07985108]
 [ 0.57443089  0.47738488]
 [-1.28920673 -1.07140443]
 [ 1.61719161  1.34397859]
 [ 0.73793012  0.61326208]
 [-0.85855429 -0.71350765]
 [ 1.82326369  1.51523626]
 [ 0.53067896  0.44102452]
 [ 1.84116185  1.53011066]
 [-0.34058556 -0.28304605]
 [ 1.5254002   1.26769469]
 [ 0.00814426  0.00676834]
 [-1.40899873 -1.17095842]
 [-0.48236157 -0.40087002]
 [ 1.02419824  0.85116724]
 [ 1.11876191  0.92975505]
 [-0.78384096 -0.65141661]
 [-0.01145318 -0.00951825]
 [ 0.05547094  0.04609952]
 [ 1.37311442  1.14113651]
 [-1.08685103 -0.90323529]
 [ 0.63560376  0.52822303]
 [-0.57809841 -0.4804328 ]
 [ 1.08095241  0.89833319]
 [-1.40211102 -1.16523434]
 [ 1.2263685   1.01918227]
 [-2.15945492 -1.79463038]
 [ 0.25034779  0.20805331]
 [ 0.75815106  0.63006683]
 [-0.75727974 -0.62934272]
 [-1.0686606  -0.888118  ]
 [ 0.79786104  0.6630681 ]
 [-1.44346296 -1.19960017]
 [ 0.18869505  0.15681637]
 [-2.70563051 -2.24853349]
 [-1.19100306 -0.98979157]
 [-0.26466158 -0.21994889]
 [ 1.19960319  0.99693877]]

数据可视化

fig, ax = plt.subplots(figsize=(12, 8))
ax.scatter(X_demean[:,0],X_demean[:,1])
ax.scatter(list(X_recover[:, 0]), list(X_recover[:, 1]),c='r')
ax.plot([X_demean[:,0],list(X_recover[:, 0])][X_demean[:,1],list(X_recover[:, 1])])
plt.show()

降维算法实战项目(1)—使用PCA对二维数据降维(Python代码+数据集)文章来源地址https://www.toymoban.com/news/detail-469968.html

完整版代码如下:

import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy.io import loadmat
from numpy import *
import pandas as pd
"""
PCA对二维数据进行降维
"""

def load_dataset():
    path='./data/ex7data1.mat'
    two_dimension_data=loadmat(path)
    X=two_dimension_data['X']
    return X

def plot_scatter(X):
    plt.figure(figsize=(12,8))
    cm=mpl.colors.ListedColormap(['blue'])
    plt.scatter(X[:,0],X[:,1],cmap=cm)
    plt.show()

"""
对X去均值,并可视化图像
"""
def demean(X):
    X_demean=(X-mean(X,axis=0))
    plt.figure(figsize=(12,8))
    plt.scatter(X_demean[:,0],X_demean[:,1])
    plt.show()
    return X_demean

"""
计算协方差矩阵
"""
def sigma_matrix(X_demean):
    sigma=(X_demean.T @ X_demean)/X_demean.shape[0]
    return sigma

"""
计算特征值、特征向量
"""
def usv(sigma):
    u,s,v=linalg.svd(sigma)
    return u,s,v

def project_data(X_demean, u, k):
    u_reduced = u[:,:k]
    z=dot(X_demean, u_reduced)
    return z

def recover_data(z, u, k):
    u_reduced = u[:,:k]
    X_recover=dot(z, u_reduced.T)
    return X_recover

if __name__=='__main__':
    X=load_dataset()
    print(X)
    print('=='*50)
    print(X.shape)
    print('=='*50)
    plot_scatter(X)
    X_demean=demean(X)
    sigma=sigma_matrix(X_demean)
    print(sigma)
    print('=='*50)
    u, s, v=usv(sigma)
    print(u)
    print('=='*50)
    print(s)
    print('=='*50)
    print(v)
    print('=='*50)
    z = project_data(X_demean, u, 1)
    print(z)
    print('=='*50)
    X_recover = recover_data(z, u, 1)
    print(X_recover)
    print('=='*50)
    fig, ax = plt.subplots(figsize=(12, 8))
    ax.scatter(X_demean[:,0],X_demean[:,1])
    ax.scatter(list(X_recover[:, 0]), list(X_recover[:, 1]),c='r')
    ax.plot([X_demean[:,0],list(X_recover[:, 0])],[X_demean[:,1],list(X_recover[:, 1])])
    plt.show()

到了这里,关于降维算法实战项目(1)—使用PCA对二维数据降维(Python代码+数据集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数据降维之主成分分析法PCA

    参考链接:https://www.bilibili.com/video/BV1E5411E71z 主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。 在用统计分析方法研究多变量的课题时,变量个数太多就会增

    2023年04月11日
    浏览(42)
  • Python PCA(主成分分析法)降维的两种实现

            PCA降维,一般是用于数据分析和机器学习。它的作用是把一个高维的数据在保留最大信息量的前提下降低到一个低维的空间,从而使我们能够提取数据的主要特征分量,从而得到对数据影响最大的主成分,便于我们对数据进行分析等后续操作。         例如,

    2023年04月17日
    浏览(44)
  • 机器学习:基于PCA对人脸识别数据降维并建立KNN模型检验

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 大家好,我

    2024年02月01日
    浏览(41)
  • 数据特征工程 | 基于PCA算法(Python)

    随着数据量的不断增加和数据维度的不断扩展,如何进行高效的数据降维处理成为了一个热门话题。在数据分析领域,PCA算法作为一种常用的数据降维方法,可以对多个特征进行降维,提高计算效率和降低存储空间需求。本文以波士顿房价数据集为例,探讨如何利用PCA算法对

    2024年02月08日
    浏览(38)
  • 机器学习-PCA降维【手撕】

    降维算法中的”降维“,指的是降低特征矩阵中特征的数量,其目的是为了让算法运算更快,效果更好,同时可以方便数据可视化。过高的维度特征维度的特征矩阵无法通过可视化,数据的性质也就比较难理解。其中主要用到的降维方法为PCA和SVD 在降维中,我们会减少特征的

    2024年01月24日
    浏览(47)
  • 第10章 PCA降维技术

        1. 内容介绍 本章详细介绍了PCA 主成分分析算法基本原理、python 实现PCA 算法方法以及sklearn实现方法等内容。 2. 理论目标 了解PCA 主成分分析算法基本原理 了解python 实现PCA 算法方法以及sklearn实现方法 3. 实践目标 掌握PCA 算法实现方法,能完成python 实现PCA算法过程 掌握

    2024年02月09日
    浏览(76)
  • 多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型

    效果一览 文章概述 多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

    2024年02月13日
    浏览(51)
  • 计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型,本文将介绍如何使用主成分分析(PCA)实现简易的人脸识别模型。首先,我们将简要介绍PCA的原理及其在人脸识别中的应用。接着,我们将通过实例演示如何使用Python实现

    2024年02月03日
    浏览(42)
  • 机器学习(五):混合高斯聚类(求聚类标签)+PCA降维(3维降2维)习题

    使用混合高斯模型 GMM,计算如下数据点的聚类过程: (Data = np.array([1,2,6,7])) 均值初值为: (mu_1, mu_2 = 1, 5) 权重初值为: (w_1, w_2 = 0.5, 0.5) 方差: (std_1, std_2 = 1, 1) (K = 2) 10 次迭代后数据的聚类标签是多少? 采用python代码实现: 聚类标签输出结果: [0 0 1 1] 也就是说,10 次

    2023年04月08日
    浏览(36)
  • 【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

    最近在写论文,导师那里很严格,所以我打算去知网下载文章进行参考,但是需要money,在同学的推荐下拿到了某宝一家免费的知网接口,今天就是对该网站的分析,最后成品会开源!在分析的时候被对方耍了一下,对方有一个登陆页面,登陆了后才发现只是个导航,其实登

    2023年04月22日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包