全2993文字
PR

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

 機械学習のアルゴリズムは難しい…という印象をもたれがちですが、基本的なアルゴリズムは比較的シンプルなので、それほど難しくありません。

 そこでこのPart 3では、scikit-learnなどのAIライブラリを使わずに、Pythonで線形回帰とk平均法を実現する方法を説明します。これらのアルゴリズムの実装方法はいくつかありますが、ここでは基本的な仕組みがよくわかるように、簡易的な方法で実装することにします。

線形回帰を実装してみよう

 線形回帰の中でも最もシンプルな「単回帰」を実装してみます。

 単回帰では、最小二乗法を使って、散布図の各データからの距離の2乗の総和を最小にする直線の式を求めます(図1)。計算上、距離がマイナスの値になることがあるので、すべて0以上の値にするために2乗する点が、最小二乗法の特徴です。

図1 ●最小二乗法のイメージ
図1 ●最小二乗法のイメージ
[画像のクリックで拡大表示]

 求める直線の式は「回帰式」と呼ばれるもので、次の通りです。

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

 つまり、直線の傾き(a)と切片(b)の値を計算することで回帰式を求めることになります。

総当たりの力技で計算する

 ここでは、各データからの距離の2乗の総和を最小にする傾き(min_a)と切片(min_b)を、総当たりで計算する方法で最小二乗法を実装します。あまり使うべきではないとされる3重ループが登場する泥臭い力技になりますが、数学的な概念があまり出て来ないので、わかりやすい方法だと思います。なお、計算の負荷を軽くするために、精度は小数点第1位までとします。

 実装したいのは、次のように使える「myFit関数」です。

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

 データ(ここでは(2,2)、(4,3)、(6,5))をxとyのリストで用意しておき、これらをmyFit関数の引数に渡すと、傾き(a)と切片(b)を返してくれる、という関数です。