注目の投稿

移転

移転しました(2020.03) →  https://akehi.github.io/ ---- ・GitHub Pages使ってみたかった ・HTMLファイルをそのまま公開できるのが手軽でいいなと思った ・・JupyterとかMarkdown+PlantUMLとかで書い...

2016/12/31

母平均・母分散の推定手法


先日「乱数のコク」というパワーワードで(自分の中で)かなり話題になった中心極限定理
https://togetter.com/li/1044668

http://fladdict.net/exp/random/

他にも色々な場面で中心極限定理という言葉を聞くのでいい機会と思ってお勉強をした.

主題は母平均・母分散の推定について.
学んだものとしては大数の法則,中心極限定理,不偏分散,t分布,カイ二乗分布あたり.
あとオマケでデータが正規分布かどうかを確かめる方法である正規確率プロットとShapiro-Wilk検定

かなり面白かったので,今後は以下の項目も勉強してノート作成予定.
・集団の比較 (F値検定?)
・分散分析→品質工学
・確率分布同士の比較(KLダイバージェンス)→機械学習

2016/12/25

null安全とか型ヒントとか

最近流行ってるらしいnull安全という概念.

変数にnullが代入される可能性があるときはコンパイルエラーになるっていう仕様のことを指すようだ.
なんでこんなことするかというと,「nullによる意図せぬ挙動は実行時に初めて分かるから土壇場で困る可能性がある」とか「意図せぬ挙動の影響範囲が大きい傾向にある」とかそんな理由があるらしい.
だからそもそも意図せぬ挙動になる可能性が少しでもあるならばコンパイルエラーにして弾いてしまおうという取り組み.デメリットはコードが少し冗長になること.

2016/12/24

evernoteのクリップ待ち解消


昔,evernoteにいつかクリップしようとURLだけ送ってたノートが400件を超えてた


evernoteAPIをpythonから使って,URLから該当ページ開いてクリップする一連動作を自動化できそう.

自分の技術的に壁になるのは以下のあたりか.
・複数ページを一つに連結 (page=1とか変えるだけ?ヘッダ部のダブリ回避とか必要?html知識無いからつまづきそう)
・画像とかも保存して,元ページが消えても大丈夫なようなクリップ(検証難しそう)
・以前何故かスルーされたAPI利用申請(なんで?)

pythonのbeautiful soupなるモジュールが優秀なパーサらしい.

2016/12/23

Notebook does not appear to be JSON

Notebook does not appear to be JSON
というエラーがgithubから右クリックでダウンロードしたノートを開こうとしたら発生.

JupyterNotebookViewerで開いてダウンロードをクリックしたらエラー起こさずに開けた

http://nbviewer.jupyter.org/


参考
http://stackoverflow.com/questions/22156147/ipython-notebooks-unreadable

オブジェクト指向とはなにか

1.意見

オブジェクト指向プログラミング(OOP) の意味としては2段階あると思う.
1. 実装とインターフェースの分離による仕様変更に強いプログラミング
2. ユーザとのインタラクションが取りやすい,かつ実行時エラーの起きにくいソフトを作るためのプログラミング

1. はライトユーザーが感じる恩恵.別にクラスを使わなくても実現できる.
2. はソフトを売り物にする人たちが感じる(と思われる)恩恵.クラスがないと実現できない.

OOPの考え方を実現する機能=クラス
クラスの役割は3つ
実装とインターフェースの分離をしやすくする仕組みの提供(カプセル化)
コンパイル時の静的型チェックを緩くする仕組みの提供(継承)
・チェックを緩くしたことにより起こる得る実行時エラーを回避する仕組みの提供(ポリモーフィズム)

カプセル化については一般論と同じ意見なので省略

2016/12/18

vbaまとめ

研修で使ったのでメモ

・誰のパソコンでも使える
この手軽さはかなり評価されるべき

・(自分の中で)噂の列挙型使ってみた
これは強力
http://www.aerith.net/design/enum-j.html


・実行すごく早い気がする
実行速度ももちろんだし,コンパイルもいつしてる?って感じ
あとworksheetfunctionの有能感がすごい
二重for文書きたくないときはworksheetfunctionをまず見る.

・variant型便利
あまりよくないと思いつつも,困ったらVariantという風潮が根強い

・Range型は必ずどこかのセルと対応するのが厄介
計算は基本的にセル範囲をRange型で取ってきて,Variant型に代入.そしてデータを加工したら最後にシートのどこか(Range)に書き込むのが良い.
この方法だと計算過程をいちいちセルに書き込まなくていいから高速(書き込み時間+Excelがセルを評価する時間削減)
しかもセルを計算過程の数字で汚さないからいい感じ.

・Range型の可能性は無限大
あるセルを変化させると関係セルが再計算される仕様がリアクティブプログラミング的.シリアル通信も頑張ればできるっぽいし、実はロボット制御とか糞やりやすい説が浮上しつつある

・クラスコンストラクタに引数渡せない
factory的な関数作ることで対応しないといけない.これだけは本当に対応してほしい

・継承できない
別に使わないけどさ
内部のクラスはバンバン継承してるから羨ましい

・関数を引数に渡せない
mapとかfilterみたいなことをしたいときに不便かも.

・関数の引数は実は全部参照渡し
途中まで値渡しと勘違いしてた
たまたま詰まなかった。良かった

・コンパイルエラーがひたすら分かりにくい
キレそう

・activesheetの呪い
ただ単にCells(~~)とかRange(~~)とか書くと,ActiveWorkbook.Activesheet.Cells(~~)の省略と解釈される.
だから油断すると,開いてるシートを変えたり,別のエクセルファイルを開いたりしたときに挙動が変わる.
省略せずにブックとシート名を指定してやるのが精神衛生上良い.

・Initializeのタイミングが勘違いしやすい
formが画面上に生成される度に呼ばれるのではなく,formのメソッドが呼ばれたときに一回だけ呼ばれる(from.show以外のメソッドが呼ばれて画面上にform表示されてなくても呼ばれる).formを開く度に呼び出したいならonActiveみたいなやつ推奨

クリティカルパスとは一体


プロジェクト管理の話でクリティカルパスという話は絶対出て来る.

でもクリティカルパスを導くためのタスクの順番をどうやって決めるか,という問題には大抵触れられていない.

一般的な解説ページなどでは,タスク数は高々10個程度.だから人間が適当に作ってもだいたい最適なスケジュールが組める.でももっとタスクが増えて依存関係が増えたら難しい.一時間費やしてスケジュール組みましたみたいな本末転倒なことが起こり得る.

完了時刻和最小化スケジューリング問題を発展させて,タスクの依存関係や各タスクの必要人員を考慮した予定組みってできないだろうか.NP困難臭がすごいけど.

応用先が広そうだし,組み合わせ最適化とかグラフ理論とか詳しく学びたい
http://dopal.cs.uec.ac.jp/okamotoy/lect/2013/localsearch/lect01.pdf

2016/12/04

二次形式の極値問題とレイリー商

レイリー商という便利な概念があるっぽい

http://kensuke-mi.hatenablog.com/entry/20121108/1352352860

http://d.hatena.ne.jp/Zellij/20140818/p1

レイリー商の最大値,最小値と,二次形式の表現行列の固有値との間に関係がある.

二次形式と固有値って聞くと,C-LAMBDA法に共分散のSVD分解を使ってアンビギュイティ候補の範囲を絞り込んでいるイメージがある.
何か関係するのだろうか.

2016/11/25

回帰,推定関係の気になる手法

分析前にやること
http://qiita.com/HirofumiYashima/items/b6dabe412c868d271410?utm_campaign=popular_items&utm_medium=twitter&utm_source=dlvr.it


サポートベクトル回帰
サポートベクターマシンとは別物?
とりあえず変数突っ込みまくっておけという手法強そう

感度分析って言葉気になる
よく聞くけどしっかりとは知らない
http://qiita.com/hrs1985/items/ba24fde9981f611cc7d8


エビデンス近似
何かすごそう.

http://qiita.com/cutting_the_Gordian_knot/items/8ce8bb87794d43abb521


ベイズ推定
MCMCという方法があるらしい
結局適用例があまり見つけられなかった.
でもベイズ推定は割りと何にでも使えるはず.

Pythonのベイズ事後推定ライブラリもある.
http://ill-identified.hatenablog.com/


2016/11/22

品質工学

品質工学

多変量解析とか統計学をもとに,量産しても品質の安定する設計を目指す学問


・タグチメソッド
この界隈の人が信仰しすぎてて恐いというか胡散臭い手法
考案者の田口さんという人自体は学問的にしっかりした理論を構築してるっぽい.

・手法概要
手法としては重回帰分析・変数選択に似てる
重回帰分析と違うのは,回帰式の分散を小さくしようという部分か?

・手法詳細
恐らく解きたい最小化問題は「外乱に対して出力のばらつきが小さくなるような説明変数の組み合わせを見つける」というもの
解く際には,なんらかの前提(おそらく加法性とかいう謎の概念 - 無相関に近いと思うけど,数学的な定義が見当たらない)を用いる.
解いた結果,L18直交表とかいう便利ツールが生まれてるはず.

・不満
数学的にきっちり書いてある文献が見当たらない(そんなに探してないけど)
盲目的に「この手法でやれば上手くいくんだ」というスタンス
だから胡散臭いというか,適用範囲が分からない感じがする.
そんなんでいいのか品質工学
有用な学問だからこそきっちり数式を追わないとどこかでつまづきそう.

更に言えば使われている用語がなんか変.
加法性とか.
単語を聞いて全く別の中身を想像してしまう.


フィッシャー,F値検定,分散分析,一因子実験,実験計画法
あたりのキーワードを追っていくと数式に辿り着けそう

参考










2016/11/21

大学レベル以上の線形代数を知りたい

線形代数の教科書・参考書はだいたい大学のカリキュラムで習うこと以上のことは書いていない(だいたいジョルダン標準形までやって終わり)

でも実際の研究では,行列を分解して性質を見たいとか,反復計算によって特定の性質をもつ行列を作りたいとか,計算安定性を知りたいとか,色々知りたいことがある.
何か困ったときにこの本を見るとだいたい書いてありそうな雰囲気が醸し出されている.
(あまり困ったことないから全然読んでないけど)

http://web.mit.edu/ehliu/Public/sclark/Golub%20G.H.,%20Van%20Loan%20C.F.-%20Matrix%20Computations.pdf


2016/11/19

楕円体の描画ライブラリ

共分散行列から誤差楕円を描画したいときが結構多い.
そこで,楕円描画が捗るようなライブラリを作成.

できること.
・共分散行列の逆行列入力 → plot(x,y)で誤差楕円が描画できるようなx,y出力
・多次元共分散行列の逆行列入力→plot(x,y)で任意の平面に射影した誤差楕円が描画できるようなx,y出力

ソース
https://github.com/Akehi/pylib/blob/master/elipsoid.py

ドキュメント
ノート形式
http://nbviewer.jupyter.org/github/Akehi/pylib/blob/master/elipsoid.ipynb

プレゼン形式
http://nbviewer.jupyter.org/format/slides/github/Akehi/pylib/blob/master/elipsoid.ipynb#/

角度の不連続性を上手く扱うライブラリ

自律移動車両の制御において,359degの次が0degだったり,180degの次が-179degだったり,実際には1degしか変わらないのに数値上は大きく変化していて困ることがある.

実際のプログラムでは基本的にif文を使ってうまく回避すると思うけれど,もっと数学的に美しい演算体系が作れないかと着想し,ライブラリ作成に至った.

3つの角度パラメータによる回転を4元数(クォータニオン)を使って記述できる.
それなら,1つの角度パラメータを2元数のような概念(ノートでは角度ベクトルと呼んでいる)を作って,それに対してクォータニオン積のようなオリジナルの演算を定義してやればいいんじゃないかという思いで作った.

実際に作っていくと共役とか出てきたり,結構クォータニオンと似ていた.この考えを発展させていったらうっかりクォータニオンを導出できそうな気がする.
導出まで派手なことはしなくても,角度の平均の章を応用すれば,複数のクォータニオンの平均を取ることができると思う(未確認)

全体としてはそれなりに上手く動くはず.けど若干重い気がする.

できること:
不連続性を考慮した角度の差分計算
不連続性を考慮した角度の平均計算

ソース

ドキュメント
ノート形式

スライド形式

楕円体の正射影

http://www.geocities.jp/ikuro_kotaro/koramu/njigen1.htm

n次元楕円体を二次元平面に正射影する方法.
非常に役に立つので.ノート作成予定.

n行n列の共分散行列Qが与えられたときに,Qinvを使って得られるマハラノビス距離がconst.であるような楕円体の形状が可視化できれば,共分散行列がどんな情報を持っているかが分かりやすくなる.
例えばデータiとjの間に相関はほとんどないけどi,kにはある.みたいな



androidスマホをIMUとして使いたい

アプリをざっと確認したところ,BlueToothやUSBから吐き出せるものはなさそう

安いスマホにはジャイロが搭載されていないことが多い
→ポケモンGOで検索するとジャイロ搭載端末一覧出て来る
http://kaku-yasu.com/?p=14518#GO-3

 freetelから買えるスマホが2万くらいなのでコスパ良いかもしれない.

2016/11/16

ブロック行列

https://ja.m.wikipedia.org/wiki/%E5%8C%BA%E5%88%86%E8%A1%8C%E5%88%97

http://www.singularpoint.org/blog/math/block-matrix-linear-algebr/

区分行列、ブロック行列
通常の積と同じように計算可能


理工系基礎 線形代数学,渡邉芳英,他,培風館 P.29に詳しい
B=[b1,b2,b3,...]と列ベクトルを並べた形式にしたらAB=[Ab1,Ab2,Ab3,...]になる

2016/11/15

共分散行列から相関係数行列への変換

共分散行列から相関係数行列への変換公式
http://mathtrain.jp/correlationmatrix

相関係数行列の行列式を使ってなにかをする人もいる
http://www.seto.nanzan-u.ac.jp/st/nas/academia/vol_013pdf/13-011-021.pdf

LAMBDA法でも相関係数行列の行列式が出て来る.


ユニモジュラ行列

LAMBDA法でも出て来るユニモジュラ行列.

幾何学的に解釈すると面白い性質を持っていそうだ.


暗号理論のための格子の数学(D.ミッチアンチオ )より
・基底ベクトルの整数倍の線形結合で表される整数格子点の集合を変化させない行列.
・ユニモジュラ行列による変換は基底ベクトル列からなる行列の行列式を変化させない=基底ベクトルの張る平行四辺形の等積変形に等価
参考
https://grampus.jaist.ac.jp/hiss/lattice/091109-revise.pdf


http://www.misojiro.t.u-tokyo.ac.jp/~murota/lect-surikeikakuhou/integerprogunimod101222.pdf

http://dopal.cs.uec.ac.jp/okamotoy/lect/2014/fdopt/handout07.pdf より
・整凸多面体の頂点という概念が面白そう.
・整数計画問題,離散最適化でも使われている
・グラフ理論でも使われている


電気通信大学 岡本先生の離散最適化の講義資料が分かりやすそう.特に2014年度にLAMBDA法につながる整数最適化の重要概念が濃縮されている感.
http://dopal.cs.uec.ac.jp/okamotoy/lect/2016/treewidth/#past


2016/05/15

カルマンフィルタ



カルマンフィルタについて解説

比較的とっつきやすい重み付き平均(加重平均)の考え方を発展させて,難解な数式のカルマンフィルタにたどり着こうという取り組み.

未完成なのでそのうち追記予定.

ノート
http://nbviewer.jupyter.org/github/Akehi/IpythonNotes/blob/master/KalmanFilter/Kalmanfilter.ipynb#