因子分析によるアイリスデータセットの構造の明らかにし方

Machine LearningMachine LearningBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

因子分析は、データ内のパターンを明らかにするために使用される統計的手法です。これは、観測変数間の相関関係を説明する潜在変数を特定するためによく使用されます。この実験では、アイリスデータセットを使用して、因子分析がどのようにデータの根底にある構造を明らかにするために使用できるかを示します。

VMのヒント

VMの起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、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("Iris特徴量相関行列")
plt.tight_layout()

バリマックス回転を用いた因子分析を実行する

ここでは、バリマックス回転を用いてアイリスデータセットに対して因子分析を実行し、データの根底にある構造を明らかにします。結果を主成分分析(PCA)と回転なしの因子分析と比較します。

## バリマックス回転を用いた因子分析を実行する
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(["Comp. 1", "Comp. 2"])
fig.suptitle("因子")
plt.tight_layout()
plt.show()

結果を分析する

ここでは、因子分析の結果を分析して、アイリスデータセットの根底にある構造がどのように明らかになるかを見てみます。

結果を解釈する

ここでは、因子分析の結果を解釈して、アイリスデータセットの根底にある構造を洞察するために、結果を解釈します。

まとめ

この実験では、バリマックス回転を用いた因子分析を使って、アイリスデータセットの根底にある構造を明らかにしました。結果を主成分分析(PCA)と回転なしの因子分析と比較し、データの根底にある構造を洞察するために結果を分析しました。