在数据分析中,经常会遇到需要从多个变量中提取出潜在模式的情况。鸢尾花数据集是一个经典的多变量数据集,包含了鸢尾花的萼片长度、萼片宽度、花瓣长度和花瓣宽度四个特征。通过矩阵分解技术,可以揭示这些特征之间的相关性,并尝试找出数据中的潜在结构。
在本研究中,使用了主成分分析(PCA)和因子分析(FA)两种方法来探索鸢尾花数据集。PCA是一种常用的降维技术,它通过线性变换将原始数据投影到新的坐标系中,使得数据的方差最大化。而因子分析则是一种统计方法,用于描述观察到的变量之间的相关性,通过提取少数几个不可观测的潜在变量(因子)来解释这些相关性。
在应用这些技术时,通常会对数据进行标准化处理,以消除不同量纲带来的影响。在本例中,使用了标准化缩放器(StandardScaler)来对鸢尾花数据集中的特征进行标准化。然后,计算了特征之间的相关性矩阵,并使用热图来可视化这些相关性。
通过观察相关性矩阵,发现花瓣长度和花瓣宽度之间存在高度相关性,而萼片宽度的相关性则相对较低。这表明在数据中可能存在一些冗余信息。为了进一步探索这些潜在的模式,对PCA和FA的结果进行了旋转处理。旋转是一种优化技术,它可以帮助更好地理解因子之间的结构关系。
在本研究中,使用了方差最大化旋转(varimax rotation),这是一种常见的旋转方法,它通过最大化因子载荷的平方和来寻找一个更清晰的因子结构。通过这种旋转,发现第二个因子主要与萼片宽度相关,这为提供了一个更直观的数据结构视图。
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA, FactorAnalysis
from sklearn.preprocessing import StandardScaler
# 加载鸢尾花数据集
data = load_iris()
X = StandardScaler().fit_transform(data["data"])
feature_names = data["feature_names"]
# 绘制鸢尾花特征的相关性热图
ax = plt.axes()
im = ax.imshow(np.corrcoef(X.T), cmap="RdBu_r", vmin=-1, vmax=1)
ax.set_xticks([0, 1, 2, 3])
ax.set_xticklabels(list(feature_names), rotation=90)
ax.set_yticks([0, 1, 2, 3])
ax.set_yticklabels(list(feature_names))
plt.colorbar(im).ax.set_ylabel("$r$", rotation=0)
ax.set_title("鸢尾花特征相关性矩阵")
plt.tight_layout()
# 运行因子分析并应用方差最大化旋转
n_comps = 2
methods = [
("PCA", PCA()),
("未旋转的FA", FactorAnalysis()),
("方差最大化旋转的FA", FactorAnalysis(rotation="varimax")),
]
fig, axes = plt.subplots(ncols=len(methods), figsize=(10, 8), sharey=True)
for ax, (method, fa) in zip(axes, methods):
fa.set_params(n_components=n_comps)
fa.fit(X)
components = fa.components_.T
print("\n\n%s:\n" % method)
print(components)
vmax = np.abs(components).max()
ax.imshow(components, cmap="RdBu_r", vmax=vmax, vmin=-vmax)
ax.set_yticks(np.arange(len(feature_names)))
ax.set_yticklabels(feature_names)
ax.set_title(str(method))
ax.set_xticks([0, 1])
ax.set_xticklabels(["成分1", "成分2"])
fig.suptitle("因子")
plt.tight_layout()
plt.show()
通过上述代码,首先加载了鸢尾花数据集,并对其进行了标准化处理。然后,计算了特征之间的相关性矩阵,并使用热图进行了可视化。接下来,对PCA和FA的结果进行了方差最大化旋转,以探索数据中的潜在结构。
在因子分析中,发现萼片宽度与其他特征的相关性较低,这可能表明它在数据集中具有一定的冗余性。通过旋转处理,能够更清晰地看到数据中的潜在模式,这对于理解数据集的结构和进行进一步的分析具有重要意义。