機械学習 はじめよう

第9回 線形回帰[後編]

この記事を読むのに必要な時間:およそ 3.5 分

前回の前編では「最小二乗法」を紹介する中で,機械学習は数多くのことを仮定して,その中で一番良い答えを見つけるものだということを見てもらいました。

特に「最小二乗法」でデータ点から直線を推定する場合,次の3つのことを仮定していたことを学びました。

  • 変数間の関係を関数で表す
  • 関数のモデルは直線(1次式)を考える
  • パラメータを選ぶ指標として二乗誤差を用いる

今回はこれらの仮定を振り返りながら,一般化された,より柔軟な機械学習の手法を紹介しましょう。

戻らないけど「回帰」

先ほどの仮定の1番目,⁠変数間の関係を関数で表す」ことを機械学習では「回帰」と呼びます。つまり機械学習の世界で「回帰問題を解く」といった場合は,この仮定をしていることになります。

「回帰」という言葉の由来

「どうして関数を求めることを『回帰』と呼ぶの? 何か戻るの?」と思うかもしれません。この名前は,もともと「平均回帰」という現象を説明する手法として初めに導入されたのですが,応用を繰り返すうちに使われ方が変化していき,⁠回帰」という名前だけが残ってしまったのです。

英語版のWikipediaの回帰(Regression)の項では,⁠回帰」の歴史的な経緯についてもう少し説明されていますので,気になる方は読んでみるとおもしろいでしょう。

変数が2個の回帰問題

ここで,最初に「変数が2個の回帰問題」を,少しきちんとした言葉で定式化しておきましょう。

  • 実数をとる入力変数の値 xn と目標変数の値 tn の組 (n=1,...,N) が与えられているとき,すべての n について f(xn)=tn (n=1,...,N) を満たす関数 f のうち「もっとも適切なもの」を求める
  • ただし,値には誤差が含まれていることも考慮することが望ましい

回帰問題のポイントは,⁠わかっている値が有限個」「値の誤差」です。実はそれぞれが2番目と3番目の仮定に対応してます。

一般に仮定は弱ければ弱いほど良いですよね。2番目の仮定「関数のモデルは直線(1次式)を考える」は少し強い(狭い)ので,これを弱めてもう少し表現力の高い関数を使えるようにしたいところです。

しかし,有限個の点から決まる実数関数なんて無数に存在するため,弱めすぎるわけにもいきません。データ点さえ通ればいいのなら,フリーハンドで書いたようなぐにゃぐにゃのグラフでも,あるいは単純に各点を直線で結んだ折れ線グラフでも問題ないということになります。

それから前回,二乗誤差の最小化は,各点での誤差の分散を最小化してくれることを説明しました。すると3番目の仮定は,各点にできるだけ同じくらいの誤差がのるように調整するということになるため,こちらは一定の必然性があると言えそうです。

線形回帰

そこで,目下の関心は2番目の仮定「関数のモデルは直線(1次式)を考える」をどのように弱めることができるか,という点に絞って考えましょう。

その答えの一つが,これから紹介する「線形回帰」です。⁠線形」とついていますが,これは関数のモデルが1次関数(直線)ということではなく,モデルの式が線形結合の形をしているためです。

基底関数

「線形回帰」では,まず「基底関数」というものを定めます。文字通り,関数を表現するベースとして使うものです。基底関数に特別な条件はないので自由に好きな関数が使えるのですが,中でもよく使われる基底関数2種類を紹介しましょう。

  • 多項式基底:

    画像

  • ガウス基底:

    画像

多項式基底は文字通り「多項式で表される関数を想定する」ための基底です。

ガウス基底はデータ点の情報を近い距離に効率的に反映させることのできる基底で,次の図のように釣鐘型になっています。exp()の中身が2次式なところが正規分布の確率密度関数と同じですが,基底関数は確率ではないので正規化(面積=1)は行っていません。ガウス基底のパラメータμと s は適当に選びます。例えばμを0.1,s を0.1から1.0まで0.1刻みに選んだ場合,ガウス基底のグラフは次のようになります。

画像

それぞれ表現できる範囲が違いますから,一概にどちらが良い基底関数であるとは言えません。ここまでの話の流れを踏まえてもらっていれば,⁠ああ,なるほど,今度はここからが仮定になるんだね」とピンとくるのではないでしょうか。

以降の説明ではわかりやすさを優先して多項式基底を使いますが,求めたい関数についての情報が少ない場合などは,まずガウス基底を試してみるのが良いかもしれません。

線形回帰の求め方

この基底関数は最初に決めて固定し,その線形和を求めたい関数 f(x) とします。各基底関数に与えられる重み wi をパラメータとすることで,⁠想定する関数の集合」を得ることができます。

画像

パラメータ wi を決定すれば f(x) が求まりますので,wi を適切に決める方法があればいいのですが,それには引き続き二乗誤差を使うことにしましょう。ただし一般的な記法にあわせて,二乗和を2で割ったものを使います注1)⁠

画像

一見複雑ですが,xn と tn が定数であることを思い出せば,これは単なるwiの2次式です。したがって,これを最小にするwiを求めることができて,求めたい関数 f(x) も決まります。

これが「線形回帰」の基本的な流れです。

注1
2で割っていることは今回の範囲では全く本質的ではないのですが,次回以降の話との整合性のためにこの形式を用います。

著者プロフィール

中谷秀洋(なかたにしゅうよう)

サイボウズ・ラボ(株)にてWebアプリ連携や自然言語処理を中心に研究開発を行いながら,英単語タイピングゲーム iVocaをサービス提供している。

URLhttp://d.hatena.ne.jp/n_shuyo/
Twitterhttp://twitter.com/shuyo

コメント

  • 上のグラフ

    自信ないですが、上のガウス関数グラフは、s=0.1と固定してμを0.1刻みで操作しているのではないですか?本文では逆になっていると思います。

    Commented : #3  hoge (2012/03/11, 11:31)

  • ご指摘ありがとうございます

    ご指摘のとおりでしたので,修正させていただきました。
    今後ともよろしくお願いいたします。

    Commented : #2  gihyo.jp編集部 (2011/11/15, 20:25)

  • 誤植

    http://gihyo.jp/dev/serial/01/machine-learning/0009
    ガウス基底:
    のところが二乗になってません。

    Commented : #1  makoto (2011/10/30, 15:24)

コメントの記入