仕事や学業で人工知能(AI)の知識が必要なことが増えてきた。AIを支える中心的な技術が機械学習だ。本特集では、AIの歴史と全体像から基本的な機械学習アルゴリズムのPython実装までを幅広く解説する。
機械学習のアルゴリズムは難しい…という印象をもたれがちですが、基本的なアルゴリズムは比較的シンプルなので、それほど難しくありません。
そこでこのPart 3では、scikit-learnなどのAIライブラリを使わずに、Pythonで線形回帰とk平均法を実現する方法を説明します。これらのアルゴリズムの実装方法はいくつかありますが、ここでは基本的な仕組みがよくわかるように、簡易的な方法で実装することにします。
線形回帰を実装してみよう
線形回帰の中でも最もシンプルな「単回帰」を実装してみます。
単回帰では、最小二乗法を使って、散布図の各データからの距離の2乗の総和を最小にする直線の式を求めます(図1)。計算上、距離がマイナスの値になることがあるので、すべて0以上の値にするために2乗する点が、最小二乗法の特徴です。
求める直線の式は「回帰式」と呼ばれるもので、次の通りです。
つまり、直線の傾き(a)と切片(b)の値を計算することで回帰式を求めることになります。
総当たりの力技で計算する
ここでは、各データからの距離の2乗の総和を最小にする傾き(min_a)と切片(min_b)を、総当たりで計算する方法で最小二乗法を実装します。あまり使うべきではないとされる3重ループが登場する泥臭い力技になりますが、数学的な概念があまり出て来ないので、わかりやすい方法だと思います。なお、計算の負荷を軽くするために、精度は小数点第1位までとします。
実装したいのは、次のように使える「myFit関数」です。
データ(ここでは(2,2)、(4,3)、(6,5))をxとyのリストで用意しておき、これらをmyFit関数の引数に渡すと、傾き(a)と切片(b)を返してくれる、という関数です。