距離関数とは?MBRにおける類似度計算の4つの基本性質を解説
距離関数とは?
距離関数(distance function)は、MBR(Memory-Based Reasoning/メモリベース推論)がデータ間の類似度を計算する際に用いる基本的な仕組みです。数学的に「真の距離計量」と呼ばれるものにおいて、点Aから点Bまでの距離 d(A,B) は、次の4つの性質を満たします。
距離計量が満たす4つの基本性質
明確性(Well-defined) ― 任意の2点間の距離は常に定義され、非負の実数として与えられます。すなわち d(A,B) ≥ 0 です。
同一性(Identity) ― ある点からその点自身への距離は常にゼロになります。すなわち d(A,A) = 0 です。
対称性(Commutativity) ― 向きは結果に影響しません。AからBへの距離とBからAへの距離は等しく、d(A,B) = d(B,A) が成り立ちます。この性質があるため、たとえば「一方通行」のような概念は距離の世界には存在しません。
三角不等式(Triangle Inequality) ― AからBへ向かう途中で中間点Cを経由しても、距離が縮まることはありません。すなわち d(A,B) ≤ d(A,C) + d(C,B) が成り立ちます。
MBRにおける距離の役割
MBRにおいて「点」とは、データベース内のレコード(データ)そのものを指します。こうした距離の定義は類似度計算の基礎となりますが、実際にはこれらの制約を多少緩和しても、MBRは十分に良好な動作を示します。
たとえば、ニュース記事の分類に関するケーススタディで用いられた距離関数は対称ではありませんでした。記事Aから記事Bへの距離と、BからAへの距離が必ずしも一致しなかったのです。それでも、その類似度尺度は分類という目的に対しては十分に有用でした。
距離が「明確性」を持つということは、すべてのレコードがデータベース内のどこかに必ず近傍(隣接レコード)を持つことを意味します。MBRは近傍情報なしには機能しないため、これは重要な前提条件です。また、「同一性」の性質により、「あるレコードに最も類似するのはそのレコード自身である」という直感的な考え方が自然に成立します。
「対称性」と「三角不等式」は、最近傍が局所的かつ明確に定義されることを保証します。つまり、新しいレコードを挿入したとしても、既存のレコード同士の距離が縮まることはありません。類似性はあくまで、一度に2つのレコードの間だけで評価される問題です。ただし、距離測度によって最近傍を求める方法自体は明確に定義されているものの、得られる最近傍の集合には特異な特徴が現れることがあります。
フィールド距離関数の組み合わせと重み付け
どのレコードが近傍となるかは、各フィールド(項目)ごとの距離関数をどのように組み合わせて、レコード全体の距離関数を作るかによって変わります。実際、合計(summation)方式では2番目に近い近傍だったレコードが、ユークリッド距離では最も遠い近傍になることもあります。合計方式や正規化方式と比べると、ユークリッド距離は「すべてのフィールドが比較的近い」ような近傍を選びやすい傾向があります。
さらに、合計・ユークリッド・正規化のいずれの関数にも重み付けを導入でき、フィールドごとに距離への寄与度を変えることが可能です。MBRは通常、すべての重みを1に設定すると良好な結果を得られます。ただし、事前知識をモデルに反映させたい場合には重みを活用できます。たとえば、分類に大きな影響を与えると想定される特定のフィールドの重みを高くする、といった使い方です。
-
PHPのimplode()関数とは?配列を文字列に結合する方法を解説
この記事では、PHPのimplode()関数の使い方について解説します。implode()関数は、PHPにあらかじめ組み込まれている定義済み関数の一つです。この関数を利用することで、配列の要素を結合して、ひとつの文字列を生成することができます。implode()関数は、配列の各要素を自分で指定した区切り文字(デリミタ)でつなぎ、文字列を作成します。この関数は2つのパラメータを受け取りますが、そのうち1つは任意(オプション)、もう1つは必須となっています。それでは、それぞれのパラメータについて詳しく見ていきましょう。構文implode(separator, array)パラメータseparato
-
PHPのheader()関数とは?主な用途と使い方を実例付きで解説
header()関数は、PHPにあらかじめ用意されているネイティブ関数です。この関数を使用すると、Webサーバーがクライアント(ブラウザ)へ実際の出力を行う前に、HTTPヘッダーの内容を制御することができます。 header関数は、サーバーが返すHTTPレスポンスのヘッダーを設定する役割を担います。PHPでは、ページのリダイレクト、タイムゾーンの設定、キャッシュ制御など、さまざまな場面でheader関数が活用されています。 以下に、PHPにおけるheader()関数の代表的な用途を紹介します。 1. ページのリダイレクト あるWebページから別のWebページへユーザーを転送(リダイレクト)し