2011-01-01から1年間の記事一覧

執筆日記

書けないときはまず読む。何を書いていたか思い出すために。 書きたいことはまず質や形式にこだわらずに出力する。質の改善はあとからでもできる。 脳内の情報を消えないメディアに記録することで覚えておくプレッシャーから解放される 時間を決めて宣言する…

「11人いる!」を読んだ

ホーガンやイーガンが好きな妻に勧められたので読んでみました。「11人いる!」 前々から名前は聞いたことがあったけど、読んだのは初めてでした。そしてこれは一見少女漫画風の見かけですが、紛れも無くSFでした。宇宙大学の入学試験の最終段階の実技試験と…

脳神経系をモチーフにした言語Neuronyを作りました

…と言いたいところですが、教師あり学習と教師なし学習が同じ構造のニューラルネットワークで実現できることを示したところでタイムアップになってしまいました。昨日の「遺伝子をモチーフにした言語「Genomy」を作りました」にかぶせるネタの予定だったのに…

遺伝子をモチーフにした言語「Genomy」を作りました

最近、3年くらい前に書いた「そろそろ例のプロジェクトについて言及するか」についてTwitterで言及があったので思い出しました。「条件を満たしたものをすべて呼び出す」という設計思想でプログラムが書けてしまうという点について意外とみんなピンと来ない…

git checkout -pのユースケース

特にプロトタイプ的なコードを書いている時、将来的にはオプションなどで変更できるようにする予定のモノをコードに直書きで埋め込んだりするよね。簡単なものでは1行だったり、複雑なものだったらモックのクラスだったり。今回のユースケースは「もうこのモ…

隠れマルコフモデルで自然言語を学習

隠れマルコフモデルで社内掲示板の1万個弱の書き込みを学習させてみた。 まず初期値について。遷移確率はおおよそ対角行列。それだけだと差別化できないし、確率が0だと遷移が置きなくて面白く無いので対角成分を11、対角線の一つ上を2、それ以外1として確率…

Numpyで行列に行や列を貼り合わせる方法

In [23]: M = arange(9).reshape(3, 3) In [24]: M Out[24]: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) In [25]: c_[M, [7, 7, 7]] Out[25]: array([[0, 1, 2, 7], [3, 4, 5, 7], [6, 7, 8, 7]]) In [27]: r_[M, [[7, 7, 7]]] Out[27]: array([[0, 1, 2], […

数式を含む論文の読解効率化

知的作業の生産性はやり方の設計によって左右される。「数式だらけの論文を読む」というタスクも「とにかく頑張って読む」のではなく、やり方をうまく設計することで生産性向上ができるんじゃないかなぁ。そう考えて、自分を観察しながらやってみることにし…

gitをテキトーに使って生産性を向上したユースケース

バージョン管理とかgitとかが「おおげさでめんどくさいもの」だと思う人は多い。でも、それは生産性向上のチャンスを逃していると思う。特に業務として多人数で開発している人たちの「変更前にはまずトピックブランチ」というやり方が、それはそれでよい方法…

新感覚STGの動画を作りました

昨日「次の日曜日、新感覚シューティングゲームを展示します」で紹介した新感覚STGの紹介動画を作りました。まだ開発中のものなのでハイライトだけ紹介しました。このでかいテーブル型モニターはもらったわけではなく貸してもらっている状態なので、もしかし…

次の日曜日、新感覚シューティングゲームを展示します

次の日曜日、ちょっと面白いものを展示します。でかいテーブル型モニターで、フィギュアを使って直感的に操作できる新感覚シューティングゲーム!位置だけでなく角度も制御できるので、今までにない体験ができると思います。イベントは18日のトレジャーフェ…

numpyスライシングのカルトクイズ

問:空欄に入る出力を答えよ >>> m = array([[1, 2], [3, 4]]) >>> m array([[1, 2], [3, 4]]) >>> x = [True, False] >>> m[x] (Q1) >>> m[array(x)] (Q2) >>> m[tuple(x)] (Q3)もちろんわざわざ問題にしているってことは全部結果が違うってことですよ! 可…

最小公倍図形を図にしてみた

GPCCの「最小公倍図形の解答」で紹介されているdeepgreenさんの成果を、図で見たいと思ったので作りました。ソースコードはこちら: https://gist.github.com/1426526

matplotlibのLine2Dの座標指定順序はBASICのLINE命令とは違う

BASICではLINE (x1, y1)-(x2, y2)だったし他のものもそういう順番になっているものが多いように思うが、matplotlibは Line2D(self, xdata, ydata, ...)つまりLine2D([x1, x2], [y1, y2])ということだ。多分折れ線を書くことを想定しているんだろう。markerと…

matplotlibで線分を描く

こう書くとAttributeError: 'Line2D' object has no attribute 'get_patch_transform'になる。 line = matplotlib.lines.Line2D([0, 1], [1, 0]) ax.add_patch(line)原因は、artists — Matplotlib v1.1.0 documentationをちゃんと読めば分かることだが「Line…

理解に関する考察

11月30日に「数式を含んだ論文を読んで理解するというタスクにも生産性向上の方法論があるのではないか」などと考えて書いたTweetを流れ去らないようにメモしておく。 数学は複雑に絡み合った知識の体系なので知性に高い負荷をかけ、そのため理解とは何か考…

numpyのarray#sortの挙動が想定外だった件

numpyのsortは、特に2次元(以上)の時に「リストのリスト」のような気持ちでsortすると「リストの中の各々のリストがソートされる」という挙動をするのでハマる >>> x = [[6, 5], [4, 3], [2, 1]] >>> y = array(x) >>> x.sort() >>> x [[2, 1], [4, 3], [6, …

matplotlibで線形分類器の分離平面を描くには

これをどうやって描いたかという話まず矢印が変な形になるのを避けるために散布図の縦と横の縮尺を固定し(1)、重みベクトルで矢印を描き(2)、大きな灰色の長方形をほぼ透明にして重みベクトルの値を元に作ったアフィン変換で回転して描画している(3)data1, d…

ロジスティック回帰を実装した

あんまり面白いもんでもなかった。

matplotlibでtransformを指定したpatchをadd_patchすると親axesの座標系を無視する

matplotlibでpatchにtransformをつけると消えてしまうように見える現象が起きた。 まず、散布図の上に普通に長方形のpatchを乗せてみる。 clf() scatter(random(100), random(100)) ax = gca() rect = Rectangle((0, 0), 1, 1, alpha=0.3) ax.add_patch(rect…

ナイーブベイズを実装した

上から、真の出力確率、潜在変数と出力のサンプル(潜在変数1個あたり5個の出力を出している)、訓練データ(潜在変数と出力の対)、そのデータで学習した後の出力確率、それを元に別の出力系列から潜在変数を推測したもの。3本の一番上が真の潜在変数で、真ん中…

隠れマルコフモデルを実装した

一番上のグレーの正方形が真の遷移確率、3x8のカラーのが真の出力確率で、その下のカラーのバーが真の潜在変数の系列と出力変数の系列。真ん中の段がそれを3回EMで学習した後の遷移確率と出力確率、カラーバーは上から、真の潜在変数、出力変数、zの確率によ…

混合ガウス分布モデルのクラスタをk平均法とEMアルゴリズムと変分ベイズでそれぞれ推定

「クラスタは球状だ」と想定しているk平均法が苦労するように、細長くて交差したクラスタのデータを使った。また変分ベイズの「クラスタの個数を自動調整する」というメリットを確認するために、クラスタの個数は2, 4, 8個で行った。EMアルゴリズムと変分ベ…

matplotlibのPatchCollectionは子パッチの色を上書きする

「matplotlib.patches.Circleのオプション引数fillが機能していない疑惑」の解決編PatchCollectionはデフォルトでCircleなどのパッチで指定した色を上書きしてしまう。 Definition:PatchCollection(self, patches, match_original=False, **kwargs) (snip) *…

Numpyではゼロで割っても例外が飛ばない

飛ぶと思い込んでいたので、ここで入ったnanのせいでしばらく進んでから逆行列を求める計算LinAlgError: Singular matrixで死ぬのに悩まされた。 >>> array([0]) / 0.0 array([ nan]) >>> array([1]) / 0.0 array([ inf]) NaNやInfが出てきた時点で例外を飛…

Matplotlibでグラフのサイズを変更

最近色々とNumpy+Matplotlibでグラフを書いているが、デフォルトの設定で出力すると800x600ピクセルで出力されるのではてなダイアリーに貼ったときに縮小されてしまう。そこでサイズの変更の仕方を調べてみた。まずmatplotlib.pyplot.figureにはfigsizeって…

情報処理学会の特集「未踏ユースから育ったタレントたち」に寄稿しました

情報処理学会の会誌「情報処理」で「未踏ユースから育ったタレントたち」という特集が行われています。竹内郁雄先生から執筆を頼まれて断れるはずがなく(笑) 書くこと自体より、書いた後で要請されて第1段落の内容を書きたしたら1.5ページになっていしまい1…

チケットレコメンデーション

Python温泉にて「チケットがたくさん山になっているとヤル気がそがれたりどれからやったらいいか悩むのに時間を使ったりしてしまうので、オススメのチケットを選んでくれるシステムがあったらいいんじゃないの?」って話題になったのでコンセプトプルーフを…

NumPyで特定の条件を満たす行、列を除去する方法

NumPyではスライシングで特定の条件を満たす要素だけ選択できる。逆の条件で使えば特定の要素だけ除去するのも簡単。 >>> array(range(5)) array([0, 1, 2, 3, 4]) >>> v = _ >>> v[v != 2] array([0, 1, 3, 4]) これは「v != 2」の部分で演算子がオーバーロ…

Numpyのndarrayは空でなくても偽になる

Pythonのリストの場合、ifの条件式に入れてboolに変換された場合は日本語で言うと「空かどうか」になる。 >>> if []: print "not empty" >>> if [0]: print "not empty" not empty >>> print bool([]), bool([0]) False TrueでもNumpyのndarrayはそうではな…