機械学習理論研究室
← AI体験の一覧
「近くにあるものは、たぶん同じ仲間」。たったこれだけの考え方で、コンピュータはものごとを分類できます。これをk近傍法といいます。近くの何個に聞くかは、数 k で決めます。k を変えると、色の切りかわる線がガタガタから滑らかへと変わります。
気温と湿度だけをメモした、ある年の記録があります。その日を「暑い」と感じたかどうかを、この2つの数字だけで当ててみます。点1つが1日ぶんの記録です。質問で分ける木とまったく同じデータを使っています。
図の上をなぞる(スマホは指でドラッグする)と、緑のしるしが動いて判定がその場で変わります。
距離 = √{ (気温のちがい)² + (湿度のちがい)² }
2点のちがいをそれぞれ2乗して足し、平方根を取ります。定規で測るのと同じ、ふつうの距離です。この距離で近い順に k 個選んで多数決するのが、k近傍法(k-nearest neighbor method)です。
ここでは気温と湿度を、それぞれの目盛りの幅でそろえてから距離を測っています。そろえないと何が起きるかは、STEP 3 で確かめます。
この方法には「学習」の時間がありません。覚えることはデータそのものだけで、聞かれたときに初めて近いものを探します。決定木のように、あらかじめ質問を作っておく必要がないのです。
決定木は「気温が28℃より高いか」のような質問しか作れないので、境界はたての線とよこの線だけになります。ななめの境界は階段のかたちでしか真似できません。
k近傍法は、境界をあらかじめ決めた形で表しません。近い点に聞いた結果をつなげたものが、そのまま境界になります。だからななめでも曲がっていても、自由なかたちが作れます。上の「ななめに分かれるデータ」を選んで、決定木のときの階段と見くらべてみてください。
そのかわり、決定木のように「なぜその判定になったか」を質問の並びとして説明することはできません。得意なことと不得意なことが、ちょうど入れかわっています。
今度は自分でデータを作ってみましょう。色を選んで図の上をタップすると、その色の点が置けます。置きながら k を動かすと、境界がどう変わるか確かめられます。
気温は℃、湿度は%で測ります。単位がちがうのに、そのまま引き算して距離にしてよいのでしょうか。気温は20〜38℃で、動く幅は18しかありません。湿度は30〜95%で、幅は65もあります。そのまま足すと、幅の大きい湿度ばかりが効いてしまいます。
データが増えるほど、答えるのが重くなります。 判定のたびに、覚えているデータ全部との距離を測り直すからです。上の「1回の判定で測る距離の回数」を見てください。置いた点の数とぴったり同じになっています。100万件のデータがあれば、1回答えるのに100万回の距離計算が要ります。決定木が質問を数回たどるだけで答えられるのとは対照的です。
軸の数が増えると、「近い」が役に立たなくなります。 2つや3つの数で表されるデータなら、「近い」はそのままの意味です。しかし軸が何百もあると、どの2点の距離もほとんど同じ値に近づきます。いちばん近い点といちばん遠い点の差がなくなり、多数決の相手を選ぶ意味が薄れます。これを次元の呪いといいます。
k = 1 は、学習したデータに完璧に合います。 自分自身がいちばん近い点だからです。でもそれは、新しいデータに強いという意味ではありませんでした。合わせすぎる曲線で見た、多項式の次数を上げすぎたときと同じことが起きています。手元のデータに合わせる力が強すぎると、覚えなくてよい誤差まで覚えてしまいます。