机器学习---降维算法

news/2024/10/25 1:31:57/

知其然知其所以然

    • 【写在前面】
    • 主成分分析(PCA)
      • 原理部分
      • 代码部分
      • 可视化部分
    • 线性判别分析(LDA)
      • 原理部分
      • 代码部分
      • 可视化部分
    • 独立成分分析(ICA)
      • 原理部分
      • 代码部分
      • 可视化部分
    • t-SNE降维算法
      • 原理部分
      • 代码部分
      • 可视化部分

【写在前面】

【以下使用的数据量很少很少,因此在散点图中展示不出具体算法特点,请读者自行实验。】
常用的降维算法有主成分分析(PCA)、线性判别分析(LDA)、独立成分分析(ICA)、t-SNE等。以下是这些算法的Python代码示例,分享一下我对降维的理解:

对一个样本矩阵,一是换特征,找一组新的特征来重新表示;二是减少特征,新特征的数目要远小于原特征的数目。这样一来就可以得到数量少且比较好的几个变量一构建模型。但是,降维也可能会导致信息的损失和模型的过拟合,因此需要谨慎使用。

  1. 创建数据
  2. 创建模型对象
  3. 拟合数据
  4. 转换数据
  5. 输出数据

主成分分析(PCA)

原理部分

  • 通常把转化生成的综合指标称之为主成分
  • 每个主成分都是原始变量的线性组合,且每个主成分之间互不相干
  • 主成分分析(PCA)是一种常用的数据降维技术,它通过线性变换将高维数据转换为低维数据,同时保留原始数据的主要特征。PCA的基本思想是将原始数据映射到一个新的坐标系中,使得新坐标系下数据的方差最大化。这个新坐标系的轴称为主成分,每个主成分都是原始数据中的线性组合。PCA的应用广泛,例如在图像处理、信号处理、模式识别、数据挖掘等领域中都有广泛应用。在数据分析中,PCA可以用于降低数据的维度,减少数据冗余,提高数据处理效率,同时也可以帮助我们发现数据的内在结构和规律,从而更好地理解数据。
  • 在实际应用中,PCA的步骤主要包括数据标准化、计算协方差矩阵、求解特征值和特征向量、选取主成分和投影数据等。通过PCA,我们可以得到一些重要的结果,例如主成分的贡献率、主成分的方差解释比例、主成分的系数等。这些结果可以帮助我们更好地理解数据的结构和特征,从而为后续的数据分析和建模提供更好的基础。

代码部分

from sklearn.decomposition import PCA
import numpy as np# 创建数据
X = np.array([[1, 2, 3, 6, 10, 22, 3, 2, 3], [4, 5, 6, 8, 9, 23, 5, 2, 6], [7, 8, 9, 10, 2, 24, 9, 9, 5]])# 创建PCA对象
pca = PCA(n_components=2)# 拟合数据
pca.fit(X)# 转换数据
X_new = pca.transform(X)print(X_new)

在这里插入图片描述

可视化部分

在这里插入图片描述

线性判别分析(LDA)

原理部分

线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的监督学习算法,它既可以作为分类器,也可以作为降维技术。LDA的主要思想是将数据投影到一个低维空间中,使得不同类别之间的距离最大化,同一类别内部的距离最小化。这样可以在保留尽量多的信息的同时,将数据进行有效的分类。LDA的主要步骤包括:

  1. 计算每个类别的均值向量和整个数据集的均值向量。
  2. 计算类内散度矩阵(within-class scatter matrix)和类间散度矩阵(between-class scatter matrix)。
  3. 计算投影矩阵,将数据投影到低维空间中。
  4. 使用投影矩阵将数据进行降维或分类。

LDA的优点包括:

  1. 在保留尽量多信息的同时,可以将数据进行有效分类。
  2. 可以用于降维,减少数据维度,便于可视化和处理。
  3. 适用于高维数据集。

LDA的缺点包括:

  1. 对于非线性可分的数据集,LDA的效果会受到影响。
  2. 对于不平衡的数据集,可能会导致分类结果出现偏差。
  3. 在计算类内散度矩阵时,需要计算每个类别的协方差矩阵,如果数据维度很高,计算量会很大。

代码部分

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import numpy as np# 创建数据
X = np.array([[1, 2, 3, 6, 10, 22, 3, 2, 3], [4, 5, 6, 8, 9, 23, 5, 2, 6], [7, 8, 9, 10, 2, 24, 9, 9, 5]])
y = np.array([0, 1, 0])# 创建LDA对象
lda = LinearDiscriminantAnalysis(n_components=1)# 拟合数据
lda.fit(X, y)# 转换数据
X_new = lda.transform(X)print(X_new)

在这里插入图片描述

可视化部分

在这里插入图片描述

独立成分分析(ICA)

原理部分

  • 在机器学习中,ICA被广泛应用于信号处理、图像处理、语音识别等领域。
  • ICA的基本思想是:假设存在一组独立的成分,它们通过线性组合形成了观测信号。通过对观测信号进行分解,可以得到独立的成分。
  • ICA的目标是找到一组线性变换,使得变换后的信号成分之间相互独立。
  • ICA的应用场景包括:语音信号分离、图像分离、生物信号分析等。例如,ICA可以用于将多个人说话的混合语音信号分离成单独的语音信号,或者将一张复杂的图像分解为不同的成分。

代码部分

from sklearn.decomposition import FastICA
import numpy as np# 创建数据
X = np.array([[1, 2, 3, 6, 10, 22, 3, 2, 3], [4, 5, 6, 8, 9, 23, 5, 2, 6], [7, 8, 9, 10, 2, 24, 9, 9, 5]])# 创建ICA对象
ica = FastICA(n_components=2)# 拟合数据
ica.fit(X)# 转换数据
X_new = ica.transform(X)print(X_new)

在这里插入图片描述

可视化部分

在这里插入图片描述

t-SNE降维算法

原理部分

  • TSNE(t-Distributed Stochastic Neighbor
    Embedding)是一种非线性降维算法,用于将高维数据降至二维或三维,以便于可视化。
  • 该算法的基本思想是,将高维数据映射到低维空间中,使得在原始空间中相似的数据点在低维空间中也保持相似,而不相似的数据点在低维空间中则距离较远。
  • TSNE算法主要分为两个步骤:首先,通过高斯核函数计算每个数据点与其它数据点之间的相似度,然后将这些相似度转化为概率分布。接着,在低维空间中,通过KL散度最小化的方法,将这些概率分布转化为新的低维空间中的概率分布。最终,通过梯度下降算法,将低维空间中的数据点的位置不断调整,使得其与高维空间中的数据点的相似度尽可能地保持一致。
  • TSNE算法的优点是能够在保持数据点之间的相对距离的同时,有效地将高维数据映射到低维空间中,从而便于可视化和分析。但是,该算法的计算复杂度较高,需要较长的计算时间和计算资源。

代码部分

from sklearn.manifold import TSNE
import numpy as np# 创建数据
X = np.array([[1, 2, 3, 6, 10, 22, 3, 2, 3], [4, 5, 6, 8, 9, 23, 5, 2, 6], [7, 8, 9, 10, 2, 24, 9, 9, 5]])# 创建t-SNE对象
tsne = TSNE(n_components=2)# 转换数据
X_new = tsne.fit_transform(X)print(X_new)

在这里插入图片描述

可视化部分

在这里插入图片描述


http://www.ppmy.cn/news/34977.html

相关文章

第十四届蓝桥杯三月真题刷题训练——第 22 天

目录 第 1 题:受伤的皇后_dfs 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 2 样例输出 2 评测用例规模与约…

2023最全的Web自动化测试介绍(建议收藏)

做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP。 有的人可能就会说,我没这个Java基础,没有Selenium基础,能行吗?测试虽然属于计算机行业,但其实并不需要太深入的编程知识&…

安全防御 --- 防火墙

防火墙 1、基础 (1)防御对象:授权用户;非授权用户 (2)含义: 防火墙是一种隔离(非授权用户所在区域间)并过滤(对受保护网络中的有害流量或数据包&#xff0…

2. 01背包问题

文章目录QuestionIdeasCodeQuestion 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi ,价值是 wi 。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入…

与chatGPT神聊,引领你深入浅出系统调用

在操作系统的教学中,系统调用的作用不言而喻,但是,对系统调用常常是雾里看花,似乎明白,又难以真正的触及,即使在代码中调用了系统调用,比如调用fork()创建进程&#xff0…

【Python语言基础】——Python 字典方法

Python语言基础——Python 字典方法 文章目录Python语言基础——Python 字典方法一、Python 字典方法一、Python 字典方法 Python 有一组可以在字典上使用的内建方法。 方法 描述 clear() 删除字典中的所有元素 copy() 返回字典的副本 fromkeys() 返回拥有指定键和值的字典 ge…

Linux编译cpprestsdk库

本文用的Linux系统为Ubuntu22.04,自带GCC11.3.0。 依赖 ①编译需要boost库,本文用的库版本为boost-1.82.0.beta1.tar.gz。 ②编译需要openssl库,这里使用的版本为openssl-1.1.1s.tar.gz。 ③编译需要cmake库,本文使用的是cmake-3…

5G将在五方面彻底改变制造业

想象一下这样一个未来,智能机器人通过在工厂车间重新配置自己,从多条生产线上组装产品。安全无人机处理着从监视入侵者到确认员工停车等繁琐的任务。自动驾驶汽车不仅可以在建筑物之间运输零部件,还可以在全国各地运输。工厂检查可以在千里之…