机器学习:对数据进行降维(PCA和SVD)

news2025/1/11 7:12:22

目录

前言

一、PCA

1.PCA是什么?

2.PCA的实现使用步骤

3.PCA参数解释

4.代码实现

5.PCA的优缺点

二、SVD

1.SVD是什么?

2.SVD的实现步骤

3.代码实现

总结


前言

        数据降维是将高维数据转换为较低维度的过程,同时尽量保留数据中的关键信息。这有助于减少计算复杂性、减轻噪声影响,并可能揭示数据中的潜在模式。常用的降维技术包括主成分分析(PCA)、奇异值分解(SVD)等。

 

一、PCA

1.PCA是什么?

         主成分分析(PCA)是一种降维技术,用于将数据投影到低维空间,同时尽可能保留数据的方差。使用 PCA 可以提高计算效率,减少噪音,并发现数据中的重要模式

 

2.PCA的实现使用步骤

  1. 数据标准化:将数据缩放到均值为0、方差为1的标准范围,以确保不同特征对分析的贡献相同。
  2. 计算协方差矩阵:通过计算特征之间的协方差,来了解特征间的关系。
  3. 求解特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
  4. 选择主成分:根据特征值的大小选择前几个最大的特征值所对应的特征向量,这些特征向量构成新的特征空间。
  5. 转换数据:将原始数据投影到新的特征空间中,得到降维后的数据。

 

3.PCA参数解释

导入方式

from sklearn.decompsition import PCA

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,表示将十维数据降维到五维】如果为小数,表示累计方差百分比。0.9

copy : 类型:bool,True或者False,缺省时默认为True。

意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算。【按默认为True】

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

主要属性:

components_:array, shape (n_components, n_features) 指表示主成分系数矩阵

explained_variance_降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。

explained_variance_ratio_降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。【一般看比例即可 >90%】

 

4.代码实现

  • 这段代码是对鸢尾花的数据进行降维,然后使用逻辑回归进行分类
'''PCA降维只能捕捉线性关系,不适用于非线性数据'''

import pandas as pd

data = pd.read_excel('hua.xlsx')

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

'''对特征进行降维'''
from sklearn.decomposition import PCA

pca = PCA(n_components=0.9)  # 设置n_components=0.9表示保留足够的主成分  以解释至少90%的数据方差

pca.fit(x)  # 使用数据 x 训练PCA模型,计算数据的主成分。

print(f"特征所占百分比:{sum(pca.explained_variance_ratio_)}")
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)

new_x = pca.transform(x)  # 将原始数据 x 投影到选定的主成分上 new_x = pca.fit_transform(x) 可以省去pca.fit(x)
print(new_x)

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

lg = LogisticRegression(C=2)
lg.fit(x_train, y_train)

from sklearn import metrics

train_pre = lg.predict(x_train)
print(metrics.classification_report(y_train, train_pre))

test_pre = lg.predict(x_test)
print(metrics.classification_report(y_test, test_pre))


'''不进行降维'''
from sklearn.model_selection import train_test_split

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

from sklearn.linear_model import LogisticRegression

lg = LogisticRegression()
lg.fit(x_train, y_train)

from sklearn import metrics

train_pre = lg.predict(x_train)
print(metrics.classification_report(y_train, train_pre))

test_pre = lg.predict(x_test)
print(metrics.classification_report(y_test, test_pre))

输出:

  • 上面一个混淆矩阵是降维之后的
  • 下面一个混淆矩阵是降维之前的
  • 说明进行降维不一定能提高模型的正确率
特征所占百分比:0.9287327483408421
[0.84389796 0.08483479]   # 主成分特征所占百分比
[1.2415529  0.12480997]   # 主成分特征的方差
              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

              precision    recall  f1-score   support

           0       0.96      0.92      0.94        25
           1       0.93      0.96      0.95        27

    accuracy                           0.94        52
   macro avg       0.94      0.94      0.94        52
weighted avg       0.94      0.94      0.94        52

 

5.PCA的优缺点

  • 优点:
    • 1.计算方法简单,容易实现。
    • 2.可以减少指标筛选的工作量。
    • 3.消除变量间的多重共线性。
    • 4.在一定程度上能减少噪声数据。
  • 缺点:
    • 1.特征必须是连续型变量。
    • 2.无法解释降维后的数据是什么。
    • 3.贡献率小的成分有可能更重要。

 

二、SVD

1.SVD是什么?

奇异值分解(SVD)是一种矩阵分解技术,用于将任意矩阵 A 分解为三个矩阵的乘积:                                                        A=UΣVT

其中:

  • U 是一个正交矩阵,包含了 A 的左奇异向量。
  • Σ 是一个对角矩阵,包含了奇异值。
  • VT 是 A 的右奇异向量的转置。

 

2.SVD的实现步骤

  1. 计算协方差矩阵(如果适用):对于数据矩阵,计算其协方差矩阵。
  2. 进行 SVD 分解:将矩阵 A 分解为 U, Σ, 和 VT,即 A=UΣVT。
  3. 提取奇异值:从 Σ 中提取奇异值,按降序排列。
  4. 选择主成分(如需要):选择前几个最大的奇异值对应的列,从 U 和 VT 中提取相应的向量。
  5. 构建低秩近似(如需要):使用选定的奇异值和对应的向量构建矩阵的低秩近似。

 

3.代码实现
 

  • 因为SVD是对矩阵进行降维,所以先把图片转换成矩阵格式,即数组
  • 然后对其进行奇异值分解,得到u,sig和vt三个矩阵
  • 然后选取u矩阵前k行,sig的对角矩阵和vt矩阵前k列组合压缩之后的图片
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image


def pic_compress(k, pic_array):
    global u, sigma, vt, sig, new_pic

    u, sigma, vt = np.linalg.svd(pic_array)  # 进行奇异值分解
    sig = np.eye(k) * sigma[:k]
    new_pic = np.dot(np.dot(u[:, :k], sig), vt[:k, :])
    size = u.shape[0] * k + sig.shape[0] * sig.shape[1] + k * vt.shape[1]
    return new_pic, size


img = Image.open('a.jpg')
ori_img = np.array(img)
new_img, size = pic_compress(100, ori_img)  # 压缩的维度
print('original size:' + str(ori_img.shape[0] * ori_img.shape[1]))
print('original size:' + str(size))
fig, ax = plt.subplots(1, 2)
ax[0].imshow(ori_img, cmap='gray')
ax[0].set_title('before compress')
ax[1].imshow(new_img, cmap='gray')
ax[1].set_title('after compress')
plt.show()

输出:

第一行是原图所占空间大小,第二行是压缩之后所占空间大小

original size:1365760
compress size:244700

 

总结

        数据降维不一定能提高模型的正确率,但是可以帮助我们更快速地处理数据

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

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

相关文章

【人工智能学习笔记】4_2 深度学习基础之多层感知机

感知机概述 感知机是人工智能最早的模型,是一种有监督的算法,本质上是一个二分类问题,是神经网络和支持向量机的基础缺点:感知机智能解决单纯的线性问题 感知机的过程 多层感知机的层级结构 多层感知机的层级结构主要包括输入层、隐藏层和输出层、可以用于拟合非线性函数。…

达梦CASE_SENSITIVE参数解析

1. 参数含义 标识符大小写敏感,默认值为 Y。 当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。 CASE_SENS…

HarmonyOS开发实战( Beta5.0)蓝牙实现服务端和客户端通讯详解

鸿蒙HarmonyOS开发往期必看: HarmonyOS NEXT应用开发性能实践总结 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) 介绍 本示例分为服务端和客户端两个功能模块。 服务端创建蓝牙…

Cisco SD-WAN (Viptela) 20.15.1 发布,新增功能概览

Cisco SD-WAN (Viptela) version 20.15.1 ED - 软件定义广域网 Cisco SD-WAN powered by Viptela 请访问原文链接:https://sysin.org/blog/cisco-sd-wan-20/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 支持 S…

SAP会计凭证导入ABAP开发模板+注意点—附带源码

会计凭证导入 前言:开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。 使用bapi BAPI_ACC_DOCUMENT_CHECK 校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。 BAPI_ACC_DOCUMENT_POST 正式…

优化Python脚本,提高处理Office文档和数据的效率

目录 引言 性能优化的基本原则 1. 确定性能瓶颈 2. 优先优化最耗时的部分 3. 避免过度优化 4. 保持代码可读性 优化Python脚本处理Office文档和数据的方法 1. 使用高效的库和模块 2. 利用内置函数和高效的数据结构 3. 并发与异步编程 4. 缓存与重用 5. 自动化办公场…

8月更新速递丨秋风送爽,EasyTwin产品能力升级不停~

秋高气爽,金桂飘香,微风中已有几分凉意🍂~在过去的8月中,EasyTwin从**「多元异构数据融合」、「场景编辑及开发能力提升」**两方面,对产品进行了一轮全新的产品更新优化⬇️ 多元异构数据融合 GIS数据融…

Rust 赋能前端: 视频抽帧

❝ 如果你能想得到,就能做得到 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder ❝ 此篇文章所涉及到的技术有 WebAssembly Rust wasm-bindgen 线程池 ViteReact/Vue(下面的内容,在各种前端框架中都用) 因为&#xf…

ZYNQ 7020 学习记录-2呼吸灯(模块化)

系列文章目录 1.点灯 2.呼吸灯(模块化) 文章目录 系列文章目录前言一、模块实例化二、呼吸灯1.原理解释2.按键消抖模块3.呼吸灯模块4.顶层模块5.上板验证 总结 前言 由于研究生课题组所需学习ZYNQ,以下是本人自学ZYNQ的学习记录&#xff0c…

MySQL数据库教程合集

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

【Qt】Qml界面中嵌入C++ Widget窗口

1. 目的 qml做出的界面漂亮,但是执行效率低,一直想找一个方法实现qml中嵌入c界面。现在从网上找到一个方法,简单试了一下貌似可行,分享一下。 2. 显示效果 3. 代码 3.1 工程结构 3.2 pro文件 需要添加widgets > QT quick …

数据集 VisDrone-Dataset 无人机检测跟踪数据集 >> DataBall

开源数据集 VisDrone-Dataset 无人机检测跟踪数据集-机器视觉目标跟踪 人工智能 深度学习 无人机或通用无人驾驶飞行器(UAV)配备相机后,已被迅速部署到包括农业、航拍、快速递送和监视在内的广泛应用中。因此,自动理解从这些平台收…

如何在Layui框架中实现列表操作后返回编辑页面并带参数刷新表单

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

C#匿名方法

在C#中,匿名函数是一种没有名字的方法,可以在代码中定义和使用。 我们已经提到过,委托是用于引用与其具有相同标签的方法。换句话说,可以使用委托对象调用可由委托引用的方法。 匿名方法(Anonymous methods&#xff…

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGis接口说明文档)

OSGeo4W简介 更高级的 QGIS 用户应该使用 OSGeo4W 包。此安装程序可以并行安装多个版本的 QGIS,并且还可以进行更高效的更新,因为每个新版本仅下载和安装更改的组件。      OSGeo4W 存储库包含许多来自 OSGeo 项目的软件。包括 QGIS 和所有依赖项&a…

Codeforces practice C++ 2024/9/11 - 2024/9/13

D. Mathematical Problem Codeforces Round 954 (Div. 3) 原题链接:https://codeforces.com/contest/1986/problem/D 题目标签分类:brute force,dp,greedy,implementation,math,two pointers…

威雅学校:解锁新学期!与威雅共赴秋实之约

【常州威雅】 九月的风,轻拂过青春的扉页; 新学期的篇章,正待你我提笔书写。 常州威雅再度迎来开学季,我们已准备好为威雅学子们提供一个充满活力与挑战的学习环境。在这里,新的故事将被书写,新的梦想将被点燃&#xf…

Van-ZYL算法

系统模型:由于观测散射矩阵一定是对称的(系统压缩后的测量结果),且原S矩阵是互易的。此时系统由R T转置 Shv Svh 目标的互易 Ohv Ovh 接收数据的固有属性 R T转置 目标互易接收数据固有属性推导 本文串扰模型有两种理解。 1、…

这个桌面日历真不错 笔记 提醒 生日记录 打卡 翻译都有 真的太方便了!

这个桌面日历真不错 笔记 提醒 生日记录 打卡 翻译都有 真的太方便了!日历产品非常的多,如何选择一个合适自己的桌面日历,这个很重要,今天小编给大家介绍这个芝麻日历,一起看下它有些什么功能,是不是你需要…

RFID射频模块(MFRC522 STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 MFRC522.h文件 MFRC522.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 RC522 RFID射频模块是一款广泛应用于非接触式RFID系统中的核心组件,由NXP&…