鸢尾花数据集的因子分析

在数据分析中,经常会遇到需要从多个变量中提取出潜在模式的情况。鸢尾花数据集是一个经典的多变量数据集,包含了鸢尾花的萼片长度、萼片宽度、花瓣长度和花瓣宽度四个特征。通过矩阵分解技术,可以揭示这些特征之间的相关性,并尝试找出数据中的潜在结构。

在本研究中,使用了主成分分析(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的结果进行了方差最大化旋转,以探索数据中的潜在结构。

因子分析中,发现萼片宽度与其他特征的相关性较低,这可能表明它在数据集中具有一定的冗余性。通过旋转处理,能够更清晰地看到数据中的潜在模式,这对于理解数据集的结构和进行进一步的分析具有重要意义。

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