2021-05-28

FileMaker用IPSアプリケーション・テンプレート ― QuickIPS ―


お知らせ

 屋内測位システム『TPC_IPS Ver1.0』を2022/4/1にリリースしました。

 同製品に関する質問またはデモを希望されるお客様はこちらよりお申し込みください。

 同製品のカタログのダウンロードはこちらをクリックしてください。

 尚、外部のIPS/RTLSと連携して動作するIPSアプリケーション・テンプレート『QuickIPS』及び 『TPC_IPS Web API』 も順次リリースを予定しています。


IPSとは

  小社では屋内測位システム(TPC_IPS)の開発を行っています。 IPSとは一言で言い表すと屋内用GPSであり、屋内に存在する人やモノの位置を把握するシステムです。屋内や地下では、GPS等の衛星技術では位置測位が不能であったり、十分な測位精度を出せなかったりするため、屋内で位置測位をおこなうシステムがIPS(Indoor Positioning System)であり、IoT(Internet of Things)技術の1つでもあります。

  図は倉庫におけるIPSのイメージで、ビーコンやタグと呼ばれる発信機を人やモノに取り付け、ビーコンが発する信号() を受信端末 で読み取り()、この信号情報をコンピュータで解析することにより各ビーコンの位置を測位します。この測位情報はネットワークを介して社内あるいは社外のユーザが照会することができます。 下図のように多くのモノを管理するIPSは、Asset Tracking システム(資産管理システム)と呼ばれることもあります。

【IPS/Asset Tracking システムのイメージ】

FileMaker によるIPS用ユーザアプリケーション

 下図はIPSのシステム構成例です。この例では、IPSが位置測位ユーザアプリケーションの2つのシステムに分かれています。位置測位は文字通り、各ビーコンの座標を算出します。 小社製品・TPC_IPS では2021年5月現在、BLE4のビーコンを使用して測位を行っていますが、 最近では AirTag で採用された UWB が注目されています。今後は単なる忘れ物タグにとどまらない IPS/Asset Tracking用のUWB製品が市場に現れるものと期待されます。
注:
 UWB IPS製品には UbisenseZebra といったものが以前からありますが非常に高価なため、導入は一部の大企業等に留まっていました。AirTag や SmartTag の出現は、低価格UWB IPS の普及に貢献するかもしれません。

TPC_IPSの位置測位については過去に記事(末尾のリンク参照)にしていますので、本稿では FileMaker を使用したユーザアプリケーション・テンプレート ― QuickIPS― の概要をご紹介します。

注:
QuickIPS は TPC_IPS にバンドルされますが、単体として2022年春にリリース予定です。

※ QuickIPS の仕様・予定等は、予告無く変更されることがあります。

【IPS構成図】
注:
上図の構成例ではビーコン/タグを物品に取り付け、センサーを経由してサーバで位置測位を行いますが、これはAsset Tracking (資産管理)等で見られる方式です。一方、携帯電話端末等にアプリケーションをインストールし、ビーコン/タグを屋内の特定の場所に固定、端末のアプリで端末ユーザの測位計算を行う方式もあります。こちらはよりGPS的なIPSとなります。

代表的なユーザアプリケーション

 上図のように各ビーコンやタグの情報はサーバ機に送られ、サーバ機はその情報に基づき位置情報を算出し、さらにその位置情報はビーコン(タグ)のIDと共にデータベースに蓄積されます。
 ユーザアプリケーションはデータベースの位置情報データにアクセスし、ユーザの要求仕様に基づきデータを加工してPCやスマホ上に表示します。代表的なユーザアプリケーションとして、以下の3つが挙げられます。
  1. フロアマップ ― 人・モノの位置をフロアマップ図上に表示
  2. ヒートマップ ― 人の滞留情報を表示
  3. 動線追跡 ― 人・モノの移動を線で表示
 このうち1と2については FileMaker 単体で作成が可能です。 QuickIPS はこの2つを実装した、ユーザによるカスタマイズが可能なテンプレートです。

 尚、動線追跡(オブジェクトトラッキング)は、QuickIPS と TPC_IPS の次々バージョンで搭載する予定です。動線追跡については、本Blogの別稿を参照してください。

QuickIPS デモビデオ

QuickIPS の概要を11分程のビデオにまとめました。


なぜ FileMaker なのか?

   理由は他のツールに比べ少ない工数で、グラフィカルなアプリを作成できるからです。IPSユーザアプリケーションのプロトタイプ開発にも適しています。 以下では、QuickIPS の諸機能を詳しくご紹介します。

散布図グラフを用いたフロアマップ

 下図は FileMaker の散布図グラフ機能を使用したビーコン位置を表示するフロアマップです。 予め位置情報表示用のマップ(画像ファイル)を用意しておき、FileMakerのレイアウト上に取り込み、そのマップ上に散布図グラフを配置しています。
 この方法はメリットは、後述する座標データを丸める必要が無いこと、作成が簡単なことですが、ビーコンが近接して検知されるとビーコン名が重なったり、細かいビーコン情報を表示できない点が難点です。

複数ビーコンが近接して検知されると、ビーコン名が重なってしまう

オブジェクトを用いたフロアマップ

 この方式はユーザが予め定めた座標(定点座標)にSVGスポットアイコン()やビーコン情報オブジェクトを配置しておき、測位されたビーコンの情報をこれらのオブジェクトを使用して表示します。
  散布図方式と異なり、同一座標上の複数ビーコンを表示したり、実座標と異なって表示されているビーコンを赤く表示したり、表示フォントの大きさを変更したり(◀ A ▶ を使用)と、機能をカスタマイズできます。

外部システムを使用する際の測位座標の"丸め"

 TPC_IPS の測位機能は、ビーコン座標を定点座標丸めて算出することができます。
 しかし外部システムと QuickIPS を併用する場合は、外部システムでこの丸め処理を行う必要があります。

例:
図のように定点座標(×)を定めたとします。この時、外部システムが以下のようにビーコンを検知したとします。括弧内はx,y座標です。

<外部システムによる測位座標>
 
ビーコンA(0.2, 1.1)
ビーコンB(3.2, 3.6)
ビーコンC(1.5, 2.1)

 この時、各測位座標から最も近い定点座標(×)を各ビーコンの座標と決定します(丸め処理)。ビーコンA(0.2, 1.1)は定点座標(1, 1)に丸め、B(3.2, 3.6)に(3, 3)に、C(1.5, 2.1)は定点座標(2, 2)に丸めます。
注:
 最も近い定点座標(最近傍点)を求めるにはプログラムを自作する手もありますが、K-nearest neighbor(k = 1)のライブラリがあれば、これを使用すると楽ちんと思います。FileMakerで knn なカスタム関数を作成し、外部データベースからデータを取り込む際にこの関数を当てて丸め処理を行うことも可能かもしれませんが、かなり大変と思います。 Brian Dunning氏のカスタム関数公開サイトにはknnなカスタム関数は見当たりませんでした。
 ちなみに TPC_IPS の測位アルゴリズム・TCOTは三点測位的な座標算出を行うため、元の測位座標は定点座標とはほぼ100%一致しません。このため TCOT実行時に、scikit-learn の KNeighbors により定点座標に丸めるオプションを用意しています。

オブジェクトを用いたヒートマップ

 ヒートマップは、人・モノが多く集まる場所を色分けして表示します。ヒートマップも測位座標の丸めを行う必要があります。

青、黄色、赤の順で人・モノの密集度を表示

エラーグラフ

 エラーグラフは静止した状態のビーコンの実座標と測位座標との誤差を折れ線グラフで表示します。 この機能は測位システムの技術担当者が、測位の精度を調べる際に有用な機能となります。

横軸がスキャン実行時刻、縦軸に誤差、誤差値が小さい程、測位精度は高い
 
 グラフに表示するビーコンをピッカー(後述)で選択すると、[Time]で指定した時間の範囲内で測位誤差が縦軸に表示されます。

 IPS導入テスト時には、運用に耐えうる測位精度が得られるかチェックを行いますが、本機能はその際に有用です。 また、屋内環境の変化によっても測位精度は変化するため、適時この機能を使用し、測位精度をチェックするようにします。

注:
 AUTOモードで自動更新ボタン実行中、またはMANUALモードで更新ボタンをクリックした際は、エラーグラフは最新の測位情報により更新されます。

QuickIPS の基本操作について

 QuickIPS の基本操作について簡単に説明します。

AUTO、MANUAL、HISTORYの3モードについて


 QuickIPS には AUTO、MANUAL、HISTORY の3つのモードがあります。各モードは、下図の"実行モード"をクリックしてプルダウンメニューから選択します。

AUTOモード

ボタンが画面右上に表示されるので、これをクリックするとフロアマップ、ヒートマップ、エラーグラフを最新のデータにより自動的更新します。■をクリックすると、自動更新を停止します。

MANUALモード

 このモードはAUTOモードとは異なり、自動更新されません。最新情報で更新するには、画面右上に表示されるをクリックします。

HISTORYモード

 このモードでは過去の座標データを基にフロアマップ、ヒートマップ、エラーグラフを表示することができます。

ヘッダ部

 画面上部のヘッダー部の操作方法について説明します。

サブメニューボタン

クリックするとポップアップメニューが表示されるので、以下を選択。

Scatter map(散布図グラフを使用したフロアマップ)
Floor map(オブジェクトを使用したフロアマップ)
Heatmap(ヒートマップ)
Error graph(距離誤差グラフ)
実行モード

上述のAUTO、MANUAL、HISTORYから選択。

Time ScanCode (YYMMDDMMDDSS形式、スキャンを実行した日時)を範囲指定する。
注:
ScanCode はTPC_IPS を使用する際は自動的生成される。
ScanCodeナビゲーション

[Time]で指定した範囲で、ScanCode 間を移動・選択するためのボタン群
 |<:最初へ移動
 >:  次へ移動
 <:  前へ移動
 >|:最後へ移動

ピッカーボタン 対象となるビーコン及び ScanCode を選択するためのピッカー・フローティングウインドウ(後述)を表示。
エラーサマリーボタン 測位誤差の詳細を表示するエラーサマリー・フローティングウインドウ(後述)を表示。

ピッカー フローティング ウインドウ

 本ウインドウは、フロアマップ、ヒートマップ、エラーグラフで対象とするビーコンや ScanCode を選択するためのウインドウです。本ウインドウは×ボタンで閉じられるまで、常に最前面に表示されます。


ビーコンリストビーコン一覧、クリックで選択あるいは選択解除。選択中のビーコンはピンクで表示される。 選択されたビーコンは、フロアマップの表示対象となる。Error Graph(測位誤差グラフ) で表示されるビーコン数は6つまで。
ビーコン名書式

クリックすると、フロアマップに表示されるビーコン名の書式が切り替わる。
Name: ビーコン名のみ表示
M-M/Name: Major-Minor及びビーコン名を表示

All ボタン

全ビーコンを選択

None ボタン

全てのビーコンの選択を解除

ScanCodeリスト

[Time]で指定された範囲内の ScanCode の一覧。クリックして選択すると、その ScanCode を持つ座標データに基づき、フロアマップとヒートマップが表示される。

エラーサマリー フローティングウインドウ

 エラーサマリーフローティングウインドウは、ピッカーを使用して選択したビーコンの測位誤差のサマリーを表示します。エラーグラフの折れ線は一度に表示できるビーコン数は6つ迄でしたが、このサマリーには選択できるビーコンの数に制限はありません。
 本ウインドウは×ボタンで閉じられるまで、常に最前面に表示されます。 
エラーサマリーフローティングウインドウ
エラーサマリーフローティングウインドウ
 
測位エラーサマリー 静止した状態にあるビーコンの測位誤差をビーコン毎に表示。ビーコンリストから選択されたビーコンの測位誤差の平均、最大、最小、標準偏差を表示。
最終行には選択された全ビーコンの集計値が表示される。集計対象は[Time]で指定された期間。
※ 取得データがない項目には missing が表示される。
エラー種類

エラーの種類を選択するボタン、各ボタン選択時のエラー算出式は以下の通り。
Distance: Sqrt((ax - ex)^2 + (ay - ey)^2)
Coordinates: Abs(ax - ex) + Abs(ay - ey)
注:
・ax, ay: 実座標 x, y
・ex, ey: 測位座標x, y

iPhone/iPadでの使用

 2種類のフロアマップ、ヒートマップ、エラーグラフ機能は iPhone/iPad(iOS) でも利用できます。これらの画面はPC用と同じ画面を使用していますので、工数的に有利な開発が可能です。

iPhone 上での QuickIPS
開発時はPC/iOSでの利用を意識する!

QuickIPS と外部システムとの連携

 QuickIPS には座標データを保存する locLogテーブルがあり、このテーブルのデータを抽出・加工して、上述の機能を実現しています。
 外部システムのデータベースに locLog に対応するテーブルまたはビューがあれば、それから locLogにデータを取り込み、QuickIPS の諸機能を使用することが可能となります。

locLogテーブル構成

 TPC_IPS 以外の外部データベースを使用して QuickIPS を利用する際は、QuickIPS の locLogテーブルに準じて作成します。
フィールド名 データ型 入力 備考
uuid テキスト

必須

ビーコンの uuid

major 数値 必須 ビーコンに割り当てられた major
minor 数値 必須 ビーコンに割り当てられた minor
beaconName テキスト   ビーコン名、検索する場合は入力必須
x 数値 必須 測位されたビーコンのx座標
y 数値 必須 測位されたビーコンのy座標
actual_x 数値   ビーコンの実際のx座標[注1]
actual_y 数値   ビーコンの実際のy座標[注1]
scanCode 数値 必須 スキャン実行タイムスタンプを示す12桁の数値(YYMMDDHHMMSS)[注2]
timestamp タイムスタンプ   レコードが作成された日時

注:
  1. actual_x と actual_y は測位精度テスト時に使用する実際のビーコンの座標です。これらの値と測位された座標の値を使用し、測位誤差が算出されます。
  2. QuickIPS を使用する場合、スキャン毎に生成される scanCode が必要となります。外部システムで scanCode を生成する際は、各センサーが同一のタイミングでスキャンを実行するようにし、スキャン毎に同一の値(YYMMDDHHMMSS)を scanCode に設定してください。例えば、2022/1/1 0:0:0秒にビーコン/タグ信号をスキャンした場合、センサー/受信機のクロックに関わらず、サーバ等で「220101000000」が各レコードの scanCode に入力されるようにします。

外部データベースからlocLogテーブルへのデータ取込

 上表に基づく外部データベースのテーブルデータを QuickIPS の locLog テーブルに取り込むには、以下を行います。
  1. QuickIPS を実行するコンピュータ上で、外部データベースのODBC ドライバにより、所定の DSN を登録
  2. 取り込むテーブル名と loclogテーブルに対応する外部テーブルのフィールド名を指定
  3. 外部データ取込画面で取込を実行

QuickIPS のカスタマイズについて

 前述のオブジェクトを使用したフロアマップは、FileMaker を使用することによってカスタマイズができます。
 下図の要領でカスタマイズを行います。フロアマップの操作はレイアウトモードで行います。
 まず、フロアマップ画像を用意し、フロアマップレイアウトの背景として貼り付けます(最背面)。
 
 つぎに、SVGスポットアイコン、およびビーコン情報オブジェクト(図のピンクの部分、実際は透明)は、それぞれ座標属性を持っているので、座標属性に合わせて配置を行います。 例えば(4, 8)のオブジェクトは、(4,8)のフロアマップ座標上に配置するようにします。 
 
 オブジェクトを配置する際は、配置用オブジェクトの一覧から、対象となるオブジェクトをマウスで選択し、フロアマップレイアウト上にドラッグすることによって配置することができます。下図の例では、 座標(4, 8) のオブジェクト(X-Y が 4-8で示されている)をマウスでドラッグする様子を赤囲みで示したものです。
 SVG スポットアイコンも同様にドラッグコピーで配置します。
 
  大規模施設のフロアマップを作成する場合は、フロアマップ画像を分割し、レイアウト、タブ、スライドを複数作成して、分割したマップをそれぞれに取り込むようにします。

 QuickIPS は FileMaker テンプレートとして単体リリースする予定です。
※ QuickIPS の仕様・予定等は、予告無く変更されることがあります。

 以上
 NuckyT

IPS関連のBlog記事

IPS関連のBlog記事




2020-12-30

IPSのテストベッドをつくる際のTIPS ― デバイスの保護とスマート電源

お知らせ

 屋内測位システム『TPC_IPS Ver1.0』を2022/4/1にリリースしました。

 同製品に関する質問またはデモを希望されるお客様はこちらよりお申し込みください。

 尚、外部のIPS/RTLSと連携して動作するIPSアプリケーション・テンプレート『QuickIPS』及び 『TPC_IPS Web API』 も順次リリースを予定しています。

  当社では Raspberry Pi と ビーコン を使用した IPS(Indoor Positioning System)を開発しています。ソフトウェア開発自体や機器の設定管理等も大変ですが、テストベット(ソフトウェアのテスト・実証環境、長期間、継続的に使用するのが前提)の構築・維持もそれなりに大変です。今回は当社のような小規模組織がIPSテストベットを作る際のTIPSをご紹介します。

テストベッド 

 下図のようなスペースを常時確保できるような大きな企業や研究機関であれば事は簡単ですが、小社のような小規模な会社では日常の労働生活空間とテストベッドを共用することになります。 多数のビーコンのスキャンテストを行う度にRaspberry端末やビーコンを敷設するのは労力も時間も要します。 また、ビーコンや端末を床や机等に長時間放置するのは他の業務の妨げにり、無断で移動されたりすれば、テスト結果が不正確なものとなってしまいます。また、機器の破損も心配です。

図1:当社テストベッド


 今回はテストベッドで使用する ビーコン や Raspberry Pi 設置方法や、電源に関するTIPSをご紹介します。

ビーコンの保護

 ビーコンは屋内と屋外に常設していますが、屋内、屋外を問わず、携帯電話用防水のケースにクッションを入れた上で、その中に収納しています。クッションにより、誤って落下した際に床からの衝撃を吸収させ、ビーコンを守ります。ストラップはスタンド、壁、天井にフックする際に便利です。防水性能ですが、IP規格を取得しているケースを調達します。

IP規格を取得している防水ケース


ビーコンを屋外に常設する

 ビーコンを屋外に常設する際は上記のように防水ケースに入れて、スタンドや地面に設置します。台風、梅雨、秋の長雨の際も放置して良いと思いますが、定期的にチェックするようにしましょう。

地面に設置する際はカラコンを被せるとさらに安心


ビーコンを屋内に常設する

 ビーコンを屋内に常設する場合は他の業務の邪魔にならないように、蹴飛ばされないように、天井から吊り下げます。

誤って落下した場合、ケースとクッションで衝撃を吸収


Raspberry Pi を屋外に常設する

 Raspberry Pi を屋外に常設する場合、IP規格対応の防水ケース入れて電源コードを引きます。


未来工業製WB-10DM、屋外用コンセントの引き込みも可


Raspberry Pi の電源

  図1のような十数台の Raspberry Pi の電源のオン/オフにも意外に手間がかかります。開発・デバッグ中は頻繁に電源のオン/オフが発生することもあり、これが数十台、数百台の規模になると、開発者には地獄です。 Raspberry Pi はWOL (Wakeup On Lan)に対応していないため、マジックパケット送信による遠隔起動はできません。

 そこでスマート電源を使い、iPhone/Android から 電源自体をオンオフできるようにしてあります。

Meross社製スマート電源、Amazonで1500円程度

スマート電源は奥行があるので蹴飛ばされないように配置、ルンバが来ても大丈夫


屋外でスマート電源を使用する

 スマート電源は大きく、屋外の電源コンセントに直接差し込むのは難しいです。その場合、以下のような防水ケースに入れて収納します。複数のコンセントはその先の延長コードに繋がり、その延長コードが Raspberry Pi に接続されます。




外に配置

NuckyT


IPS関連のBlog記事

土屋企画のIPS製品について/IPS product of TPC

2020-12-26

機械学習によりIPSの位置測位精度を改善する


お知らせ

 屋内測位システム『TPC_IPS Ver1.0』を2022/4/1にリリースしました。

 同製品に関する質問またはデモを希望されるお客様はこちらよりお申し込みください。

 尚、外部のIPS/RTLSと連携して動作するIPSアプリケーション・テンプレート『QuickIPS』及び 『TPC_IPS Web API』 も順次リリースを予定しています。


  弊社では Raspberry Pi とビーコンを利用した IPS(Indoor Positioning System / 屋内位置測位システム ― 屋内のモノの位置を推定するシステム)を開発しており、昨年、独自のアルゴリズム・TCOT(二円指向三点測位)に基づくシステムのプロトタイプを本ブログと YouTube にて紹介しました。

 TCOTを含む三点測位系の位置推定は、フィンガプリント方式に比べ事前のデータ蓄積・データ更新が不要な点が大きなメリットですが、反面、測位精度が低いのが弱点です。

 今回、Raspberry Pi(以下、端末と呼ぶことがあります)とビーコンをテスト環境に敷設し、予めビーコンと端末の位置座標と、端末が取得したビーコンのRSSIをデータベースに記録(これを「フィンガプリント」と言います)し、そのフィンガプリントデータを機械学習にかけてることにより、測位精度がどの程度向上するのかを検証しました。

 機械学習ツールは多くありますが、今回はノープログラミングで利用できる Orange と、Pythonの機械学習ライブラリとして有名な scikit-learn を使用し、それぞれで得た推定位置の結果を matplotlib によりプロットしています。


テスト環境

 テスト環境は当社事務所にAplix社製ビーコン54台とRaspbery Pi 端末13台を下図のように配置し、構築しています。端末13台は4mを辺とする正方形の4頂点上に配置し(これをグリッドと呼びます)、さらに各正方形の中心にも端末を配置しています。位置測位の対象となるビーコンは図の[R]と[B]の両方に配置しています。

 



データと特徴量について

 フィンガプリントを記録するデータベーステーブルには多くのフィールドがありますが、機械学習で使用する特徴量には端末の名称(下図のN1T、N2T、N3T・・・)、各端末が取得したRSSIに基づき算出したが端末からビーコンまでの距離(N1R、N2R、N3R・・・)を取り、目的変数(ラベル)はビーコンの位置座標(ax, ay)となります。 

データベーステーブルに記録されたフィンガプリント(一部)をExcelで表示


機械学習による位置推定

 

TCOTによる位置推定

 機械学習に入る前に、当社の二円指向三点測位(TCOT)により算出した推定位置を  matplotlib によりプロットした結果を以下に提示します。

図1:TCOTによる位置推定のプロット


 各矢印の始点が実際のビーコンの位置、終点がTCOTにより算出された推定座標となります。 

 以下では今回使用する機械学習のツールについて説明すると共に、TCOTで使った同じデータを機械学習に適用し、どの程度、推定位置が改善するかを見ていきます。

 

Orange Data Mining による位置推定

 今回使用した機械学習ツールの1つが Orange Data Mining で、スロベニアのリュブリャナ大学が開発提供するオープンソースのデータマイニングツールです。どなたでも無料ダウンロードして使用することができます。
 本ツールでは、データ読み込み、モデル定義、予測、出力までの流れを GUI で組み合わせていくことにより、ノープログラミングで機械学習を実行できます。

 操作画面のサンプルは以下のようになります。

 今回は 数多くある機械学習の手法の中のk近傍モデル(kNN)を用いてビーコン位置の推定を行いました。kNNでは、あらかじめ教師となるデータを収集し、データは全て数値に変換されます。次に運用データ(機械学習の教科書では、"テストデータ"と呼ばれます)をkNNに渡すと、各テストデータが最も近接する教師データに分類され、それが持つ目的変数(ここでは教師データのxとy座標)を返してきます。

 下図が Orange kNNの返してきたビーコンの推定位置をプロットしたものです。予め教師データを作成するというコストはかかりますが、図1のTCOTに比べると推定位置の誤差は改善されいます。

Orange kNN で指定した主なパラメータ:

  • k:1
  • メトリック:Manhattan
  • Weight:Distance

注:
kNNは教師データに基づき分類を行うアルゴリズムであり、本例では教師が持つ目的変数(x、y座標)に分類されます。従って、上図でビーコンが座標(0.5,0.5)に位置する場合でも、アルゴリズム的には座標(0, 0)が正解値となります。


scikit-learn による位置推定

 次に、Google が提供するオープンソースの Python 用機械学習ライブラリ scikit -learn を使用します。

 ここでは Orange Data Mining と同様に k近傍法(最近傍法)を採用します。ビーコン座標の予測モデル関数として KNeighborsClassifier、KNeighborsRegressor の二つを使います。

 

KNeighborsClassifier による位置推定

 ここでは K近傍法のクラス分類となる KNeighborsClassifier 関数を使い、教師あり学習によりビーコンの位置を推定します。ラベル(分類クラス、目的変数)は X座標、Y座標 の多クラスを与えます。

パラメータ指定:

nbrs = KNeighborsClassifier(n_neighbors=1, metric='manhattan', algorithm ='brute', weights='distance')
nbrs.fit(teacherData, teacherXYLabel)
prediction = nbrs.predict( testData )


パラメータ指定:

  • k:1
  • アルゴリズム:brute
  • メトリック:manhattan
  • Weights:distance


 プロット結果は Orange とほぼ同等となりました。ただ、Orange と scikit-learn で同じ kNNを使いながら、個々のビーコンの推定座標に違いがありました。kNNは比較的単純なアルゴリズムなので Orange と scikit-learnで同じ結果を返すものと思っていたのですが、少し意外でした。この理由は、Orange では指定できない、brute(総当り) にあるのかもしれません。

 

KNeighborsRegressor による位置推定

 ここでは K近傍法の回帰分析となる KNeighborsRegressor 関数を使うことによって、教師あり学習により位置を推定します。ラベル(分類クラス、目的変数)として X座標、Y座標 の多クラスを与えます。

パラメータ指定:

nbrs = KNeighborsRegressor(n_neighbors=1, metric='manhattan', algorithm ='brute', weights='distance' )
nbrs.fit( teacherData, teacherXYLabel )
prediction = nbrs.predict( testData )

主なパラメータ指定:

  • k:1
  • アルゴリズム:brute
  • メトリック:manhattan
  • Weights:distance

  KNeighborsClassifier 関数と同一のプロット結果となりました。

 

参考リンク:
k近傍法
2.4 アルゴリズム1 k-最近傍法

今後の課題

 今回、いくつかの方法でビーコンの位置推定を試みました。scikit-learn のkNN関数で指定したパラメータは、GridSearchCV により得られた最適解を使用していますが、特徴量スケーリングの改良などにより位置推定の精度をもう少し上げられるかも知れません。ニューラルネットワーク(MLPClassifier)も試してはいるのですが、まだ良い結果を得られていません。今後はMLPClassifierを含むその他のエスティメータも試用していく予定です。

 また、エスティメータ以前に、取得したデータを見るとRSSIの振れ幅が大きい端末があり、この振れ幅が位置推定に悪影響を及ぼしていると思われます。この振れ幅を抑えるハードウェア的なアプローチの検討の方がより重要かもしれません。


Varista について

 Webで上でプログラミング無しで利用できる機械学習ツールに Varista があります。以前に無償版を試用してみたのですが、上記の同じデータをアップロードできず、しばらく放置していました。年末、ダメ元で Varista に問い合わせたところ、思いがけず迅速・適格な回答を貰い、アップロードができるようになり、位置推定の結果(CSVファイル)を取得できました。そのファイルをプロットしたのが下図です。 

 Varista は決定木ベースのアルゴリズムを使用しており、設定可能なパラメータが多数あります。今回はほぼデフォルトのまま使用しましたが、上述の kNN と遜色ない結果が得られました。 このことから IPS では決定木関連のアリゴリズムも有望と思われます。

Varistaの「エキスパート」画面 ― 多数のパラメータを設定できる

 Varista には API は無いようですが、WebからテストデータをPostすると、即結果を返してくれるようなAPIがあればウレシイ、というユーザもいるのではないでしょうか。


 2021/01/05追記(亀)


(亀)

IPS関連のBlog記事

土屋企画のIPS製品について/IPS product of TPC