見出し画像

【ステップ4備忘録】ゼロから作るDeep Learning ❺【生成モデル編】ステップ4 混合ガウスモデルを読む

ゼロから作るDeep Learning ❺【生成モデル編】ステップ4では混合ガウスモデルをテーマに自然の多峰性分布をふまえて混合ガウスモデルを解説しています。この記事は、本書を読むための予備知識としてお読み頂ければと思います。なお、本記事では機械学習のライブラリ「scikit-learn」を用いて 混合ガウスモデルを実装します👨‍🎓


多峰性分布とは?

多峰性分布とは、ヒストグラムで見ると複数の山を持つような分布のことです。つまり、データの中に複数の異なるグループが存在していることを示唆しています。

自然界における多峰性分布の例

自然界では、様々な現象が多峰性分布を示します。以下にいくつかの例を挙げます。

  • 個体サイズ分布: ある種の生物の個体サイズが、小さい個体群と大きい個体群に分かれることがあります。これは、異なる生活の戦略を持つ個体群が混在していることを示唆しています。

  • 性表現: 性の表現型が連続的な変異を示す場合、多峰性分布になることがあります。例えば、ある種の魚では、雄は大きく派手な個体と小さく地味な個体の2つのタイプに分かれることがあります。

  • 遺伝子頻度: 遺伝子多型において、ある遺伝子座の対立遺伝子頻度が複数のピークを持つことがあります。

混合ガウスモデルについて

混合ガウスモデル(Gaussian Mixture Model、GMM) は、複数のガウス分布(正規分布)を組み合わせて、複雑なデータ分布をモデル化するための手法です。

GMMの特徴

  • クラスタリング: データを複数のグループ(クラスタ)に分類できます。

  • 確率分布の推定: データの生成過程を確率的にモデル化できます。

  • 柔軟性: 様々な形のデータ分布を表現できます。

  • 応用範囲: クラスタリング、異常検知、データ生成など、幅広い分野で活用されています。

GMMの仕組み

GMMは、各データ点が複数のガウス分布のいずれかから生成されたと仮定します。そして、各データ点に対して、どのガウス分布から生成された可能性が高いか(所属確率)を計算します。この所属確率に基づいて、ガウス分布のパラメータ(平均、分散)を調整し、よりデータにフィットするモデルを構築していきます。

機械学習ライブラリscikit-learnを使ったGMMの実装

機械学習ライブラリのscikit-learnを使うと簡単にGMMを実装する事が出来ます😃

ライブラリのインポート

from sklearn.mixture import GaussianMixture
import numpy as np
import matplotlib.pyplot as plt

データの生成

# データの生成
np.random.seed(0)
data = np.concatenate([np.random.normal(loc=i, scale=1, size=(100, 2)) for i in range(3)])

インスタンスを作成

# GMMのインスタンスを作成
gmm = GaussianMixture(n_components=3)

※プログラミングにおける「インスタンス」とは、クラスという設計図から生成された具体的なオブジェクトのことを指します。クラスは属性(プロパティ)や機能(メソッド)を定義したもので、インスタンスはそのクラスを基に作られた実体です。例えば、「車」というクラス(設計図)があった場合、そのクラスをインスタンス化することで、具体的な「車」というオブジェクトが生成されます。インスタンスを生成することで、クラスで定義されたメソッドや変数を使用することができます😃

データに対してGMMをフィット

# データに対してGMMをフィット
gmm.fit(data)

クラスタリング結果を取得

# クラスタリング結果を取得
labels = gmm.predict(data)

結果を可視化します

# 可視化
plt.scatter(data[:, 0], data[:, 1], c=labels)
plt.title('Gaussian Mixture Model')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()


クラスタリング結果を散布図としてプロット

まとめ

GMMは、複雑なデータ分布を柔軟にモデル化できる強力な手法です。クラスタリング、異常検知など、様々な分野で活用されています。ただし、ハイパーパラメータの設定や計算コストといった課題もあります。また、ライブラリの「scikit-learn」はAIや機械学習を学ぶ上で、とても役に立つライブラリです。今回は本書の「ステップ4 混合ガウスモデルを読む」ために、本書とは別のアプローチをご紹介しました。これから「ゼロから作るDeep Learning ❺【生成モデル編】」をお読みになる方は参考にしてみてください😊

この記事のコードは、下記のnoteの記事を参考にさせて頂きました。なお記事の内容、コーディングはGoogle Geminiにもアドバイスを頂いています😃


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?