カスタム距離関数について話している。distancefcn は確かに適切な場所だと思います。しかし、MATLAB の SOM の実装のために別の距離関数を作成することは文書化されていないようです。
nntype.distanceFcn のデフォルト値は「linkdist」です。ニューラル ネットワーク ツールボックスの距離関数は次のとおりです。
>> help nndistance Neural Network Toolbox 距離関数.
boxdist - Box distance function.
dist - Euclidean distance weight function.
linkdist - Link distance function.
mandist - Manhattan distance function.
私たちが見つけることができるように:
>> カスタムのヘルプ:
距離関数... dist とそのサブ関数のパッケージ +dist をテンプレートとして使用します。
これで、カスタム関数を実装する方法がわかったので、少し役に立ちました。ファイル dist を開いて「名前を付けて保存」を試みると、そのパッケージの場所を見つけることができます。Windows の場合、これは次のとおりです: C:\Program Files\MATLAB\R2015b\toolbox\nnet\nnet\nndistance
基本的に、カスタムの距離測定を作成するには、フォルダー内の 16 個の関数すべてを使用して、新しい距離測定に合わせてdist.m
書き直す必要があります。+dist
距離関数自体 (これは で実装されています) を更新するだけでは十分では+dist/apply.m
ありませんが、導関数 `+dist/dz_dp.m' も更新する必要があります。
コサイン類似距離を使用する最も簡単な方法は、正規化された内積を使用することです。dist が行うことを行う代わりに、代わりに(p' * p)
統計ツールボックスを使用したいと思いますpdist(p, 'cosine')
。カスタム距離関数を記述する際に重み関数 normprod が役立つと思いますが、それだけでは十分ではありません。また、悲しいことに、ニューラル ネットワーク ツールボックスはコメントされていません。のコードdist
は 2005 年に書かれたので、Mathworks はこの分野では活動していないようです。個人的にはSOMToolboxを使っていますが、コサイン距離関数もありません。
私はインターネットを検索しましたが、カスタム距離関数を実装している人を見つけることができませんでした. この目的のために重み関数 normprod を変更しようとしましたが、内部チェックがどこかで失敗しているようです (エラーCOSDIST.dz_dp is not consistent with numerical derivative.
)
TLDR: 答えは、4 つの組み込み距離関数のいずれかを使用するか、カスタム距離関数を作成することだと思います。