Day50:常用降维算法详解与案例
上一节中,我们介绍了聚类这种无监督学习算法,在本节中,我们将介绍另一种无监督方法——降维算法。降维算法可以帮助我们将高维数据映射到低维空间,从而减少特征数量,去除冗余信息,并保留数据的主要结构和变化趋势。这有助于可视化数据、减少计算成本和处理高维数据的困难。
1. 主成分分析(PCA)
主成分分析是一种常用的降维算法,它通过线性变换将原始数据映射到一个新的特征空间,使得新特征之间的相关性尽可能低。
- 算法步骤:
- 标准化数据集,使每个特征的均值为0,方差为1。
- 计算数据集的协方差矩阵。
- 对协方差矩阵进行特征值分解,得到特征值和特征向量。
- 选择前k个特征值对应的特征向量作为主成分,构建投影矩阵。
- 将原始数据集映射到新的特征空间。
- 优点:可以在保留数据变异性的同时降低数据维度;简单、快速,并且易于实现;适用于线性相关的数据集。
- 缺点:对异常值和噪声敏感;无法处理非线性关系;只能对数值型数据进行降维。
我们来看看使用sklearn库中的PCA算法进行降维的代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 创建示例数据集
np.random.seed(0)
n_samples = 1000
X = np.random.randn(n_samples, 2) # 2维特征
# 创建PCA对象,指定降维后的维度
pca = PCA(n_components=1)
# 使用数据集进行降维
X_reduced = pca.fit_transform(X)
# 绘制降维结果图
plt.scatter(X_reduced, np.zeros_like(X_reduced))
plt.title('PCA Dimensionality Reduction')
plt.xlabel('Principal Component')
plt.show()
在上述代码中,我们使用np.random
生成了一个二维的示例数据集。然后,我们使用PCA
类创建了一个PCA对象,并指定降维后的维度为1。接下来,我们使用数据集进行降维,并将降维后的结果绘制成散点图。
2. 线性判别分析(LDA)
线性判别分析是一种常用的降维算法,主要用于分类问题,故它不是无监督的学习方法。它通过投影变换将原始数据映射到一个新的特征空间,使得同类样本的投影尽可能近,不同类样本的投影尽可能远。
- 算法步骤:
- 计算每个类别样本的均值向量和类内散度矩阵。
- 计算所有类别样本的总体均值向量和总体散度矩阵。
- 计算类间散度矩阵和类内散度矩阵的广义特征值和广义特征向量。
- 选择前k个广义特征值对应的广义特征向量作为投影矩阵。
- 将原始数据集映射到新的特征空间。
- 优点:能够找到能够最好地区分类别的投影方向;可以在降维的同时实现分类任务;适用于有监督学习的降维问题。
- 缺点:无法处理非线性关系;对于高维数据,可能出现维度灾难;需要有标签的数据集。
我们来看看使用sklearn库中的LDA算法进行降维的代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# 创建示例数据集
np.random.seed(0)
n_samples = 1000
X1 = np.random.multivariate_normal(mean=[0, 0], cov=[[1, 0], [0, 1]], size=n_samples // 2)
X2 = np.random.multivariate_normal(mean=[3, 3], cov=[[1, 0], [0, 1]], size=n_samples
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
大模型-AI小册 文章被收录于专栏
1. AI爱好者,爱搞事的 2. 想要掌握第二门语言的Javaer或者golanger 3. 决定考计算机领域研究生,给实验室搬砖的uu,强烈建议你花时间学完这个,后续搬砖比较猛 4. 任何对编程感兴趣的,且愿意掌握一门技能的人