次の形式でいくつかのトレースを説明するデータセットがあります。
traceId1: event1 time1 event2 time2 ... eventN timeN
traceId2: event1 time1 event2 time2 ... eventM-1 timeM-1 eventM timeM
.
.
.
つまり、このファイルにはいくつかのトレースが含まれています。各トレースは、いくつかのイベントとこれらのイベントが発生する時刻で構成されます。各トレースの長さは異なる場合があります。したがって、データを行列に変換することはできません。
各トレースをオブジェクトとして保持するクラスPointを作成しました。また、トレースの各ペア間の距離を計算するためのカスタマイズされた関数を作成しました。メトリックを使用してBallTreeを構築しようとすると、次のようになります。
File "/home/yangzhao/anaconda3/lib/python3.5/site-packages/numpy/core/numeric.py", line 474, in asarray
return array(a, dtype, copy=False, order=order)
TypeError: float() argument must be a string or a number, not 'Point'
この投稿に基づくと、BallTreeはfloatに変換できるデータ型のみを受け入れるようです。これは2013年に投稿されたので、現在回避策はありますか?たとえば、クラス定義にfloatメソッドを記述しますか?
PS:PythonでBallTreeを自分で書くことはできますが、最適化されていないため、動作が遅くなります。また、システムは再帰の最大深度を制限しているため、完全なデータセットでは機能しません。BallTreeもC ++で実装しましたが、代わりにPythonでその関数を呼び出すことをお勧めしますか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加