ラベル JavaScript の投稿を表示しています。 すべての投稿を表示
ラベル JavaScript の投稿を表示しています。 すべての投稿を表示

2016年11月18日金曜日

機械学習に関連する学会のクラスタリング

機械学習周辺の学会/論文誌が多くて関連性がよくわからなかったので,引用関係をもとに可視化してみました.マウス操作で拡大/スクロールしたり,マウスオーバーで関連エッジが強調表示されたりします.


全画面表示 / ソース

元データには Aminer が公開している Citation Network Dataset を使っています[1].
[1] Jie Tang, Jing Zhang, Limin Yao, Juanzi Li, Li Zhang, and Zhong Su.
  ArnetMiner: Extraction and Mining of Academic Social Networks.
  In Proceedings of SIGKDD'2008. pp.990-998.

ノードが各論文誌/講演会に対応しており,各ノードのサイズは被引用数を示しています.より具体的には,50件以上の引用/被引用の関係があるノード間にエッジを生成し,引用数に応じた引力と斥力に基づいた運動をシミュレーションすることで,クラスタを形成させています.

ICML(緑色のノード)などのいわゆる機械学習の学会は(近年のブームのせいか)同種内の引力よりも周辺分野からの引力が強いようで,面積が大きい緩いクラスタを形成しているようです.

機械学習の周辺ではコンピュータビジョン,言語処理,ニューラルネット,人工知能などが目立つクラスタを形成しており,データマイニングは機械学習と同様,面積が大きい緩いクラスタを形成しています.

自分の専門が制御理論なので,制御分野の論文誌である Automatica(赤色のノード) と機械学習のトップカンファレンスである ICML (緑色のノード)の近傍にある学会を抽出して可視化してみましたが,大本のデータが DBLP で,制御理論の分野の引用関係があまり収録されていないので,制御分野については寂しい感じになっています.
信号処理とロボットが制御分野の近くでクラスタを形成しており,これらとコンピュータビジョン・ニューラルネットが機械学習との間に位置しています.また,最適化や応用数学のクラスタが制御の近くにあるのもわりと納得です.

前述したデータセットの処理には python および NetworkX, ノードの配置に Gephi,可視化には D3.js を利用しています.これらの有用なソフトウェアを開発・公開されている方々に感謝します.

あと,超重いですがコンピュータ関連分野全体を可視化したものも置いておきます.
https://maruta.github.io/visnet-dml/full/

2014年7月27日日曜日

three.jsでブラウザ上で動くインタラクティブな倒立振子シミュレータを作る

引っ越しを機に研究室のサイトを現代的に改装することになりました.

上の倒立振子振り上げアニメーションはサイトのトップページを15年間飾っていた年代物ですが,これもその一環として現代の技術水準で更新することにしました.目標は滑らかでインタラクティブ(ユーザーが外乱を与えて制御系の反応を観察できる)なアニメーションを設置することです.
そのためには
  • ブラウザでリアルタイムに動作する倒立振子振り上げ制御器を実装する
  • ブラウザでリアルタイムに倒立振子の3Dグラフィックスを描画する
必要があります.今後改装を行うときのために,これらのポイントについてメモしておきます.
なお,完成品は以下の様な感じです.


手での操作が可能な完全版は研究室のトップページ

リアルタイム倒立振子振り上げ制御

ユーザーが与える外乱は事前に予測不可能なので,ブラウザ上でリアルタイムに動作する制御器で2本の倒立振子の振り上げを実現する必要があります.最高の効率(最小の制御動作)でこれを行うことは非常に困難な問題ですが,効率に目を瞑ればそれほど難しい問題ではありません.今回はインスピレーションで簡単な切替え制御則を設計しました.実装は
にあります.振り上げたあとの安定化は研究室内学生実験の成果を利用しています.ちなみに倒立振子のモデルは
です.基本的にはアーム部分の加速度を自由に制御できる物として運動方程式を立てただけですが,リアリティを出すためにモデルでもモーターに速度リミッターをつけています.
なお,実装において必要となる演算には Numeric.js を利用しました. Numeric.js は行列計算に加えて数値積分のルーチンまで持っているので,倒立振子シミュレータもこの機能を使って実装しています.
倒立振子のシミュレータに物理エンジンを使えば後々おもしろい拡張も可能かと思いましたが,現状では少し動作が重いようだったので割愛しました.自分のサイトでは重さを度外視して物理エンジンを使ったセグウェイライクな自走式倒立振子シミュレータを設置しているので興味があれば遊んでみてください.

ブラウザ上での倒立振子の3D描画

15年前にはブラウザ上でリアルタイムに3Dグラフィックスを描画するのはほぼ不可能でしたが,最近はブラウザ上でもWebGLという標準仕様で効率的に3Dグラフィックスを描画することができます.しかしWebGLを使って直にプログラムを書くのは大変手間らしく,three.jsというのを使うのが楽なようです.

実際 three.js を使った描画は非常に簡単で,MATLAB用の描画プログラムから特に苦労することもなく倒立振子を描画するルーチンを作成することができました.ただ,作ってから気がついたのですが
  • safari (iPhoneのブラウザ) が WebGL にデフォルトで対応するのはおそらく9月
  • Windows上ではWebGLで DirectX が描画に使われる関係で太い線を描画できない
という問題があったので,現時点では three.js の renderer として WebGLRenderer ではなく CanvasRenderer を使っています.
それほど複雑な物体を描画するわけではないので,こちらのほうが多くの環境で快適に動作するはずですが,何年かしたら WebGLRenderer に切替えてもいいかもしれません.

その他

ワイヤーフレームでの四角形面の描画について

three.jsは,あるバージョンから四角形面を描画する機能が省かれた(3角形2つに分割される)ようです.通常の描画であれば全く問題ありませんが,ワイヤーフレームで描画した場合線が増えて鬱陶しいので,やや古いバージョン(r59)を使っています.最近もバージョンアップで描画性能が向上しているようなので,状況が変われば three.js のバージョンを上げるべきかも知れません.

背景の写真との整合について

背景の写真と倒立振子でパースが狂っていると気持ち悪いので実物の倒立振子が写真に写っていた場合と同じ見え方になるように計算しています.
といってもthree.jsのカメラ設定時に写真撮影時と同じ情報を指定するだけです.
なおthree.jsに指定する画角は画面の縦幅に対応する画角なので,$d$をレンズ焦点距離,$h$をカメラのセンサーの縦幅として
\[
2\tan^{-1}\left(\frac{h}{2d}\right)
\]
で計算される角度にすれば良いと思います.

safariでテクスチャが歪む問題について

three.js の CanvasRenderer と safari (iPhone iPad 等の mobile safari 含む)の組み合わせでテクスチャが正しく表示されない問題がありました.
safariのバグらしいのでそのうち直るかもしれませんが,とりあえずgithubのこのコメントにしたがって
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 1, 1 );
とすると正常に表示されます.


2011年9月27日火曜日

HTML5で学会タイマー


※ いくつかアップデートしました (2015/10/03)
 ・URLに設定が反映されるようになりました.
  ブックマークすることで現在の設定を保存できます.
  (Chromeでローカルファイルからの実行の場合セキュリティ上の理由でアプリからURLを更新することができません.左上のロゴが現在の設定を含んだURLへのリンクになっていますので,こちらをご利用ください.)
 ・画面サイズに適応した表示の調整を強力にしました.

※ いくつかアップデートしました (2015/09/01)
 ・ 時間表示下部のコメントを編集可能にしました.
 ・ iOS対応しました.
 ・ ダウンロード先などを
GitHubに統一しました.

第40回制御理論シンポジウム で初めて学会の司会をする機会がありました.
この学会では司会者がタイムキーパーを兼ねるのですが,
緊張でベルを忘れる気がしたのでタイムキーパー業務を自動化することにしました.

世の中には結構な数の学会タイマーが出回っていますが,
  • 誤差が蓄積するソフトがある
  • カスタマイズが難しい
という話を聞いたので,今後のために勉強を兼ねて新たにタイマーを作ることにしました.

できたものを以下においておきます.
特長は
  • 直観的な操作
  • インストール不要・ダウンロードも可能
  • 緩いオープンソースライセンスなのでいつまでも好きなように使える
  • 設定がURLに格納されるので,ブックマークなどのブラウザ機能で
    設定を柔軟かつ簡単に管理できる
  • HTML5対応のブラウザがあれば環境を問わず動作する(mac や Linuxでも動作すると思います.iOSで音がならなかったようなので修正しました.)
といった感じです.
ブラウザを全画面化し,発表者の方に向けておくと発表中も時間がわかって安心です.
スクリーンセーバー等の動作にはご注意ください.

なお,zipファイル中に含まれている jquery-1.6.4.min.js (http://jquery.com/) および jquery.timer.js (http://mattptr.net/license/license.txt) はBSDライセンスで配布されているソフトウェアであり, bootstrap.min.css (http://twitter.github.com/bootstrap/) は Apache License v2.0 で配布されているソフトウェアです.詳しい情報は各ソフトウェアの配布元をご覧ください.
また,これらの有用なソフトウェアを公開されている方々に感謝します.

その他の部分について,このソフトウェアを使用・改変することは自由ですが,
完全な無保証ですので自己責任でご利用ください.