通过因子分析揭示鸢尾花数据集结构

Machine LearningMachine LearningBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

因子分析是一种用于揭示数据中模式的统计方法。它常用于识别解释观测变量之间相关性的潜在变量。在本实验中,我们将使用鸢尾花数据集来说明如何使用因子分析来揭示数据的潜在结构。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/decomposition("Matrix Decomposition") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/preprocessing -.-> lab-49327{{"通过因子分析揭示鸢尾花数据集结构"}} sklearn/decomposition -.-> lab-49327{{"通过因子分析揭示鸢尾花数据集结构"}} sklearn/datasets -.-> lab-49327{{"通过因子分析揭示鸢尾花数据集结构"}} ml/sklearn -.-> lab-49327{{"通过因子分析揭示鸢尾花数据集结构"}} end

加载鸢尾花数据集并绘制特征的协方差

我们将首先加载鸢尾花数据集,并绘制特征的协方差,以查看它们之间的相关性。

import matplotlib.pyplot as plt
import numpy as np

from sklearn.decomposition import FactorAnalysis, PCA
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris

## 加载鸢尾花数据
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()

运行具有方差最大化旋转的因子分析

现在,我们将对鸢尾花数据集运行具有方差最大化旋转的因子分析,以揭示数据的潜在结构。我们将把结果与主成分分析(PCA)和未旋转的因子分析进行比较。

## 运行具有方差最大化旋转的因子分析
n_comps = 2

methods = [
    ("PCA", PCA()),
    ("未旋转的因子分析", FactorAnalysis()),
    ("方差最大化因子分析", 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)和未旋转的因子分析进行了比较,并对结果进行了分析,以深入了解数据的潜在结构。