在分析鸢尾花数据集时,发现萼片长度、花瓣长度和花瓣宽度高度相关,而萼片宽度则相对独立。矩阵分解技术能够揭示这些潜在的模式。虽然对结果组件应用旋转不会本质上提高派生潜在空间的预测价值,但它可以帮助可视化其结构。例如,通过最大化权重平方和来找到的Varimax旋转,发现了一个结构,其中第二个组件仅对萼片宽度有正向载荷。
首先,使用Python的scikit-learn库来加载鸢尾花数据集,并对其进行标准化处理。标准化是数据预处理的重要步骤,它能够确保每个特征在分析中具有相同的权重。
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
# 加载数据
data = load_iris()
X = StandardScaler().fit_transform(data["data"])
feature_names = data["feature_names"]
接下来,绘制鸢尾花特征的协方差矩阵,以可视化特征之间的相关性。协方差矩阵是一个方阵,其对角线上的元素是各个特征的方差,非对角线上的元素是特征之间的协方差。通过这个矩阵,可以直观地看到哪些特征是相关的。
import matplotlib.pyplot as plt
import numpy as np
# 计算协方差矩阵
corr_matrix = np.corrcoef(X.T)
# 绘制协方差矩阵
fig, ax = plt.subplots()
im = ax.imshow(corr_matrix, cmap='RdBu_r', vmin=-1, vmax=1)
ax.set_xticks(np.arange(len(feature_names)))
ax.set_xticklabels(feature_names, rotation=90)
ax.set_yticks(np.arange(len(feature_names)))
ax.set_yticklabels(feature_names)
plt.colorbar(im)
ax.set_ylabel("$r$", rotation=0)
ax.set_title("鸢尾花特征相关性矩阵")
plt.tight_layout()
plt.show()
现在,使用因子分析来进一步探索数据,并应用Varimax旋转来优化组件的结构。因子分析是一种降维技术,它试图找到数据中的潜在因子,这些因子可以解释数据的方差。Varimax旋转是一种常用的旋转方法,它通过最大化权重的平方和来寻找更清晰的结构。
from sklearn.decomposition import PCA, FactorAnalysis
# 定义不同的方法
methods = [
("PCA", PCA()),
("未旋转的FA", FactorAnalysis()),
("Varimax 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=2)
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()
通过因子分析和Varimax旋转,得到了以下结果:
这些结果展示了不同方法下鸢尾花数据集的因子结构,为提供了数据的深入理解。