全2349文字
PR

仕事や学業で人工知能(AI)の知識が必要なことが増えてきた。AIを支える中心的な技術が機械学習だ。本特集では、AIの歴史と全体像から基本的な機械学習アルゴリズムのPython実装までを幅広く解説する。

 AIライブラリを使わずに、k平均法によるクラスタリングを実装してみます。

 k平均法では、次の2つのステップでグループ分けを行います。

[画像のクリックで拡大表示]

 ステップ1で乱数を使うので、同じデータでもグループ分けの結果が毎回少し異なる可能性がある点が、k平均法の特徴です。

 各データが属する中心点は、データと中心点の“距離”を計算することで決めます。距離にはいくつかの種類がありますが、ここではユークリッド距離を使います。2点間のユークリッド距離は、いわゆる直線距離のことで、図5のように三平方の定理で簡単に計算できます。

図5 ●2点間のユークリッド距離は三平方の定理を使って計算できる
図5 ●2点間のユークリッド距離は三平方の定理を使って計算できる
[画像のクリックで拡大表示]

 今回はプログラムを簡単にするために、k=2にしたいと思います。つまり、データを2つのグループに分けます。また、ステップ2での“繰り返し”は重心点の位置が変化しなくなるまでではなく、3回に留める簡易的な実装にします。

グループに分けるcalcDist関数を作る

 それでは実装を始めます。初めに、2つあるグループの中心点のどちらに各データが近いのかを判定し、2つのグループに分ける「calcDist関数」を定義します。これはリスト3のようになります。簡単に解説しましょう。

リスト3 ●calcDist関数のプログラム
リスト3 ●calcDist関数のプログラム
[画像のクリックで拡大表示]

 calcDist関数は次の4つの引数を持ちます。

[画像のクリックで拡大表示]

 各データがどのグループに属するのかは辞書で管理することにします。そこで、データを格納したリストのインデックスをキーとする辞書groupsを作ります。

[画像のクリックで拡大表示]

 k=2にするので、2つの中心点の座標は(cxs[0],cys[0])と(cxs[1],cys[1])です。これらの中心点の座標と各データの座標を使ってユークリッド距離を計算し、どちらの中心点に近いのかを判定します。

[画像のクリックで拡大表示]

 中心点(cxs[0],cys[0])に近い場合はグループ0、中心点(cxs[1],cys[1])に近い場合はグループ1とします。0または1の値を辞書groupsに設定します。なお、ここでは2つの距離を比較することだけが目的で、距離の値そのものは必要ありません。よって、正確な距離の値を出すための平方根の計算は省略しています。

 最後に、辞書groupsを戻り値として返して、calcDist関数は終了します。