鸢尾花数据集的因子分析

在分析鸢尾花数据集时,发现萼片长度、花瓣长度和花瓣宽度高度相关,而萼片宽度则相对独立。矩阵分解技术能够揭示这些潜在的模式。虽然对结果组件应用旋转不会本质上提高派生潜在空间的预测价值,但它可以帮助可视化其结构。例如,通过最大化权重平方和来找到的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旋转来优化组件的结构。因子分析是一种降维技术,它试图找到数据中的潜在因子,这些因子可以解释数据的方差。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旋转,得到了以下结果:

  • PCA结果:
  • 未旋转的FA结果:
  • Varimax FA结果:

这些结果展示了不同方法下鸢尾花数据集的因子结构,为提供了数据的深入理解。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485