digits dataset 是一个包含手写数字图像的数据集,是机器学习入门常用的数据集之一。这个数据集由1797个8x8像素的手写数字图像组成,每个图像可以看作是一个8x8的矩阵。每个图像都是灰度的,矩阵的每个元素代表一个像素的灰度值。这些图像代表了0到9的数字,每个数字大约有200个样本。前200个数字长这样子:
1.小规模:数据集的规模相对较小,非常适合用于算法测试。
2.多类分类:包含10个类别(0-9的数字)。
3.高维特征:每个图像可以看作是64维的特征向量(8x8像素,如下图所示)。
1. images:一个形状为 (1797, 8, 8) 的数组,存储了每个图像的8x8像素矩阵。
2. data:一个形状为 (1797, 64) 的数组,是将每个8x8的图像矩阵展平成一个64维的特征向量。所有像素值都被转换成了一个长向量,这样这些向量就可以直接用于机器学习模型的输入。这种展平操作也是图像处理中常见的数据预处理步骤。
3. target:一个形状为 (1797,) 的数组,存储了每个图像所代表的数字类别,即0到9之间的整数。
4. target_names:一个列表,包含了目标类别的名称,即从0到9的数字。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# 加载数据集
digits = load_digits()
X = digits.data # 数据集中的特征(64维向量)
y = digits.target # y变量存储了每个样本对应的标签(0-9的数字)
# 标准化数据
scaler = StandardScaler()
X_standardized = scaler.fit_transform(X)
# 执行 PCA,降维到2维
pca = PCA(n_components=2) # 我们将数据降到2维
X_pca = pca.fit_transform(X_standardized)
# 输出主成分解释的方差比例
print("主成分解释的方差比例:", pca.explained_variance_ratio_)
print("前两个主成分的累积解释方差:", np.sum(pca.explained_variance_ratio_))# 可视化降维后的数据# # 绘制累积方差图表(如果要展示所有主成分的累积方差比率,前面的语句应改为:pca=PCA()不指定降维的维度)
# plt.figure(figsize=(8, 4))
# plt.plot(np.arange(1, len(pca.explained_variance_ratio_) + 1), np.cumsum(pca.explained_variance_ratio_), marker='o')
# plt.xlabel('主成分数量')
# plt.ylabel('累积解释方差比率')
# plt.title('PCA 累积解释方差比率')
# plt.grid(True)# plt.show()
plt.figure(figsize=(8, 6))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', edgecolor='k', s=40)
plt.xlabel('主成分 1')
plt.ylabel('主成分 2')
plt.colorbar(scatter, label='数字标签')
plt.title('数字数据集PCA(二维投影)')
plt.grid(True)plt.show()
对于上面的手写数据集,第一主成分通常是解释数据中方差最大的方向,即在这个方向上,数据的“扩散”或“扩展”最大;而第二主成分是在正交于第一主成分的条件下(即互相独立,相关系数为零),解释方差第二多的方向。
1、首先找到球的“中心点”:也就是它们平均位置的地方,这就像是数据的“平均值”。
2、观察球的分散情况:观察球在地板上沿着不同方向的分散情况,你会发现球沿着某些方向比沿着其他方向分散得更广。
3、找到分散最广的方向:假如沿着某个特定的方向(比如从左到右)测量,球的距离差异最大,也就是说,沿着这个方向,球的位置差异最大。这个方向就是方差最大的方向。
4、计算主成分:在PCA中,我们寻找的就是这样的方向,但不是在二维的地板上,而是在数据可能存在的多维空间中。PCA会计算出那个方向(主成分),它能够最好地代表数据点之间的差异。
5、降维:一旦找到了方差最大的方向,PCA还会寻找第二个方向,它与第一个方向正交(即两者之间形成90度角),并且能够捕捉到剩余的最大方差。这个过程可以继续,直到所有的主成分都被找到。
在PCA中,第一个主成分(PC1)就是那个捕捉数据中方差最大的方向,第二个主成分(PC2)是与第一个正交且捕捉次大方差的方向,以此类推。通过这种方式,PCA能够将数据降维到最重要的几个方向上,同时尽可能保留原始数据的信息。