Python におけるロバストな共分散推定

Machine LearningMachine LearningBeginner
今すぐ練習

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

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

はじめに

この実験では、Python の scikit-learn ライブラリを使ってロバストな共分散行列を推定する方法を学びます。このチュートリアルでは、ロバストな共分散推定の概念を紹介し、アウトライアが混入したデータセットの共分散行列を推定するためにどのように使用できるかを示します。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお尋ねください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/covariance("Covariance Estimators") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/covariance -.-> lab-49272{{"Python におけるロバストな共分散推定"}} ml/sklearn -.-> lab-49272{{"Python におけるロバストな共分散推定"}} end

ライブラリのインポート

最初のステップは、必要なライブラリをインポートすることです。このチュートリアルでは、NumPy、Matplotlib、および scikit-learn を使用します。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.covariance import MinCovDet, EmpiricalCovariance

データの生成

このステップでは、n_samples 個のサンプルと n_features 個の特徴を持つランダムなデータセットを生成します。また、データセットにいくつかのアウトライアを追加します。

n_samples = 80
n_features = 5

## ランダムなデータセットを生成する
rng = np.random.RandomState(42)
X = rng.randn(n_samples, n_features)

## データセットにアウトライアを追加する
n_outliers = 20
outliers_index = rng.permutation(n_samples)[:n_outliers]
outliers_offset = 10.0 * (
    np.random.randint(2, size=(n_outliers, n_features)) - 0.5
)
X[outliers_index] += outliers_offset

ロバストな共分散行列の推定

このステップでは、最小共分散決定 (MCD) 推定器を使用して、データセットのロバストな共分散行列を推定します。

## データセットのロバストな共分散行列を推定する
mcd = MinCovDet().fit(X)
robust_cov = mcd.covariance_

経験的共分散行列の推定

このステップでは、最大尤度推定 (MLE) 推定器を使用して、データセットの経験的共分散行列を推定します。

## データセットの経験的共分散行列を推定する
emp_cov = EmpiricalCovariance().fit(X).covariance_

共分散行列を比較する

このステップでは、データセットの推定されたロバストな共分散行列と経験的共分散行列を比較します。

## 推定された共分散行列を比較する
print("Robust Covariance Matrix:")
print(robust_cov)
print("\nEmpirical Covariance Matrix:")
print(emp_cov)

結果を可視化する

このステップでは、ロバストな共分散推定と経験的共分散推定の結果を可視化します。

## 結果を可視化する
fig, ax = plt.subplots()

## データセットをプロットする
inliers_index = np.arange(n_samples)[~np.in1d(np.arange(n_samples), outliers_index)]
ax.scatter(
    X[inliers_index, 0], X[inliers_index, 1], color="black", label="Inliers"
)
ax.scatter(X[outliers_index, 0], X[outliers_index, 1], color="red", label="Outliers")

## 推定された共分散行列をプロットする
for covariance, color, label in zip(
    [emp_cov, robust_cov], ["green", "magenta"], ["MLE", "MCD"]
):
    v, w = np.linalg.eigh(covariance)
    u = w[0] / np.linalg.norm(w[0])
    angle = np.arctan2(u[1], u[0])
    angle = 180 * angle / np.pi
    v = 2.0 * np.sqrt(2.0) * np.sqrt(v)
    ell = mpl.patches.Ellipse(
        mcd.location_,
        v[0],
        v[1],
        180 + angle,
        color=color,
        label=label,
        alpha=0.2,
    )
    ell.set_clip_box(ax.bbox)
    ell.set_facecolor(color)
    ax.add_artist(ell)

## プロットオプションを設定する
plt.legend()
plt.title("Robust Covariance Estimation")
plt.show()

まとめ

このチュートリアルでは、Python の scikit - learn ライブラリを使ってロバストな共分散行列を推定する方法を学びました。また、最小共分散決定 (MCD) 推定器を使ってアウトライアが混入したデータセットの共分散行列を推定する方法も学びました。