スッキリと論文を読む
論文を読む機会が多くなったので,その前に論文の読み方について自分なりにまとめておこうと思ってメモ.
まとめようと思った同期の発端はここから(高速で論文がバリバリ読める落合先生のフォーマットがいい感じだったのでメモ)
本題
結論からいうと,「特定の問いに集中して,時間を決めて一気に読む.読んだ後はまとめる.んで,メモと文献は一緒に保管しておく.」というもの.
ここに書いてあることは全て先端技術とメディア表現1 #FTMA15に書いてある
以下はこれをまとめてるだけ.引用も多数.では以下詳細を見ていく.
まず時間を決めて一気に読む
各論文を読む際は時間を決めて読む.躓いても,まず論理構造を掴むことを優先する.
キモは
「この論文は何をやったのか,何を証明したのか?何を使って,それは今までとそれはどうなことなっているのか?次は何を読めばいいんだろうか?」
各セクションの肝を念頭におく
各セクションでは以下のようなことが核になってくる.そのため,各セクションを読む時は,以下のこと念頭に置いて読むとスッキリ読める(多分)
- アブストラクト...何をしたか
- イントロダクション...何をしたいか
- 関連研究...他とどう違うのか
- マテリアル&メソッド・実験結果...主張の証明
- 議論...良し悪し
- 結論...何をしたか(結論)
- 参考文献...他の研究
オススメの読み方
アブスト → 結論 → 実験 → 関連研究
実装してみる
論文と肩を並べるには?
試しに実装してみること.わからないところは他の論文を見ながら調べる
(section [+α]論文の"先"をいくも参考に)
読み終えたらまとめる
読み終わったら,以下の項目についてどんな論文だったかまとめる
- どんなもの?
- 先行研究と比べてどこがすごい?
- 技術や手法のキモはどこ?
- どうやって有効だと検証した?
- 議論はある?
- 次に読むべき論文は?...文献の参考文献欄から探すのが近道(section 文献の探し方も参考に)
ex)
読んだ論文はメモと一緒に保管しておくと財産
保管場所を決める.
文献管理は次の章で紹介するMendeleyなどがいいと思われる.(これがメモ管理もできるかは把握してないけど)
+α (色々な文献を読んだら...)メタ的視点で研究を考える
色々な文献を読んだら,
- そういう研究うの中でどういう点が好きだった?
- その中で一番引用されている論文は?
- その分野のどこが一番面白いところか?
- 今の社会と合わせるとどこに問題があると思うか?
などを考えてみるといいかも?
+α ツッコミながら読む
僕の敬愛する東大教授の稲見先生のお言葉に「ツッコミ力は研究者として大切」というものがある.というわけで,論文にもツッコミながら読むと,読み込みが深くなるかもしれない.
@drinami 研究はまずはツッコミ力、慣れたらツッコミを誘うボケ力が大切と良く話しているけど、ツッコミもボケもDPZが大変参考になる。
— 稲見昌彦 Masahiko Inami (@drinami) 2016年2月16日
「ツッコミ力」は基本編。そして、突っ込む側のアイデアを刺激するような「ボケ力」のある研究発表・表現をすることが上級編。> RT
— 稲見昌彦 Masahiko Inami (@drinami) 2015年10月11日
+α 文献の探し方
「会議名+検索ワード」で調べてみる
+α 論文の"先"をいく
「この文献とどう差別化するか」「どう発展させるか」を考えてみる.
参考文献管理ツール
読み方とは関係ないが,文献があっちこっち散らばっててもあれなので一箇所に情報をまとめよう.
選択肢として見つけたものは以下の3つ.
- Mendeley
- RefWorks
- EndNote basic
東大の人は全部無料で使えるらしい.(参考:Mendeleyを使うには?)
しかし,「RefWorks」と「EndNote basic」の2つは卒業後に有料となるため,Mendeley使ってた方が無難か?
使い心地どれがいいとか,どんな特徴があってどれがいいとか調べる気にもならないので比較はできません()
Mendeleyの使い方については東大が説明してくれてるクイックリファレンス,またはMendeley公式クイックリファレンスを参照
参考文献
最初の文献見てたら,名前に上がってたので,なんやこれと思って調べてみたのがMendeley.
雑談
これから毎日,ちっちゃなことでもいいからなんか更新していこうかなと思った今日この頃
たとえば,今日見たアニメとか,今日の出来事とか日記みたいな感じで
最近,ジョジョばっかり見てるからそれに4部まで見終わったらまとめようかな.そコマで行かなくてもまとめるかもだけど.ブログに書きたいことはたくさんあるんだよなあ...
後マッハ新書書いてみたい.お金少しでも欲しい.HTC ViveとゲーミングPCとHoloLensが欲しい.全部で60万(白目)
では今回はここらでさようなら.
【Python】Python on macでOpenCVを使える環境に
久しぶりの更新
Pythonでopencvを使おうと思ったら思ったよりつまづいたのでメモ
環境
まず結論
仮想環境に入ってpipでopnecv-pythonをインストールしたらできた
具体的には以下のコマンドをターミナルをターミナルで実行
$ python3 -m venv venv
そうして,以下のコマンドで仮想環境に入る
$ source venv/bin/activate
- 次にpipのインストール(もしかしたら,これはしなくてもいいかも?) 以下のコマンドでインストール
sudo easy_install pip
しかし,これではpipのバージョンが9.0系とopencv-pythonを入れるには古くて,
$ pip install opencv-python
とすると,
Traceback (most recent call last): File "/Users/m-narumiya/dev/git_rep/opencv_test/venv/bin/pip", line 7, in <module> from pip import main ImportError: cannot import name 'main'
とエラーが出るので,pipをupgrateしてあげる.
$ sudo easy_install --upgrade pip
$ pip install opencv-python
めでたくPython内でimport cv2
と打ってもエラーが出なくなりました(やったぜ...)
ハマったポイント
はじめ,Homebrewで Python3 OpenCV3をMacにインストールなどをみて,Homebrewでやろうとしたらできなかった.
import cv2
と打つとImportError:No module named cv2
とか言われて実行できなかった(理由は知らない)
あと,/usr/local/Cellarにopencvはあるけどopencv3はなかった(なんでやねん)
参考にしたもの
- mac に pip をインストールする
- DistributionNotFoundエラーの対処方法
- venv: Python 仮想環境管理
- MacでとりあえずOpenCV使いたいって人へ (Python編)
雑談
最近Unityを触り始めたんですけど,そのことについてもまとめたいな〜
特に,Oculus Goのビルドには苦労した.今でもあの時間を思い出すとまじで嫌になる.
そして,ずいぶん前に,ねぎぽよしさんのマッハ新書も読んですごく感銘を受けたから,その感想をまとめたいと思ってる(思い始めてはや1ヶ月)
夏休みはUnityをある程度使ってARゲーム作りたいです(予定).3Dモデリングもしてみたいです(予定).機械学習も実装もしようと思ってます(予定).やりたいことたくさんあって楽しいです.やらなきゃ行けないものもたくさんあるけど.
それでは今回はここら辺で.
(PHP)PHPのエラーログをだす
今までエラーログがなぜかwebページ上にでてたのに出なくなったので、error_logを特定の場所い吐き出してくれるように設定。
動作環境
実際の手順
- まず、php.iniの場所を調べる.
<?php phpinfo(); ?>
これの"Configuration File (php.ini) Path的なところに記載されている (http://am1tanaka.hatenablog.com/entry/2016/02/04/173256)
- php.iniを以下のように書き換える
error_reporting = E_ALL
log_errors = On
error_log = /opt/local/var/log/apache2/error_log
なお、error_logのところは、参考にしてページでは/var/log/apache2/php_errors.log
となっていたが、自分は apache2の元で開発を行なっているため、apache2のファイルがまとめられる/opt/local以下にerror_logのPATHをおいた。それ以下のPATHについては、参考にしたページと同じ(なんでこうでなければならないか理解していない)
- apacheの再起動
sudo apachectl restart
これで/opt/local/var/log/apache2/error_logにエラーが吐かれるようになった。ちなみに、error_logという部分の名前はなんでもいい。/opt/local/var/log/apache2/aaaとかでも/opt/local/var/log/apache2/error.logとかでも可能。(PATH指定されたファイルに吐き出すだけだからね!)
ちなみに...(エラーログの追い方)
ターミナル上で
tail -f /opt/local/var/log/apache2/error_log
とすると、tail -f
コマンドの「ファイルが更新されたら、その分を後ろから追跡してコマンドラインに書き出す」という性質のおかげで、phpファイルにエラーが出るたびにエラーが見られるerror_logとなってくれる。
このコマンドを終了させたいときはCtrl + C
で終了できる。
付け加えていうと、このtailコマンドのオプションには-n
オプションもあって、例えば、
tail -n 10 /opt/local/var/log/apache2/error_log
をターミナルで実行すると、error_logの中身を頭から10行書き出してくれる。
参考にしたwebページ
(MySQL)datetime型の計算
バイトで扱ったやつ.いつもググってる気がするのでメモ.
参考にしたページ
実際のクエリ
例えば、現在時刻から1週間前の時刻と比較したい時は以下のようなクエリを叩く.
SELECT * FROM google_keyword WHERE last_searched_at_pc < (NOW() - INTERVAL 1 WEEK);
こんな感じ.
注目すべきはWHERE last_searched_at_pc < (NOW() - INTERVAL 1 WEEK);
で、この"WEEK"のところは、MICROSECOND, SECOND, MINUTE, DAY, WEEK, MONTHなどに変えると1マイクロ秒前,1秒前,...などできるらしい
-を+に帰ると1週間後とかもできる
愚痴
いや最近まじで時間が足りない.
レポート終わっても無いのに、別の教科でまた新しいレポートでるし、そうじゃなくても勉強山積みだし
VRもやりたいのに手をつけられないし
完全にキャパってる今日この頃
バイト1,2ヶ月おやすみさせてもらおうかな
では、さいなら(ヲタ恋はいいぞ)
(R) グラフィカルモデリングする
学科の実験?実習?で多変量解析の一環としてRでグラフィカルモデリングをしたのでめも
考え方とかコードとか載せる
まずは概念?の説明
偏相関係数
参考になるやつ 参考にしたやつ - [26-4. 偏相関係数 | 統計学の時間 | 統計WEB] (https://bellcurve.jp/statistics/course/9593.html) - 偏相関係数の意味と式の導出 | 高校数学の美しい物語
自分なりの理解
ようは、2つの統計量に相関係数を計算して、相関関係を測れるが、それは第3の要素が絡んで相関関係が見えてるかもしれないから、その「第3の要素」の影響を消してその2つの相関関係を見ようといことで出てくるのが「偏相関係数」.(調べてみたら1年の時に基礎統計の教科書になってた「入門統計」に載ってた.やっぱり基礎って大事だね!!)
偏相関行列
参考にしたのはこれ.正直全部読んでない.あとで理解する(予定)
4変数以上になってくると、からについての影響を取り除いて、からについての影響を取り除いて...ってやらないと偏相関係数が出ない.
そして、と自体が多変量で、
$$ x = \left( \begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_n \end{array} \right) ,y = \left( \begin{array}{c} y_1 \\ y_2 \\ \vdots \\ y_n \end{array} \right) $$
となっていたら、このについては、偏相関係数を集めた偏相関行列が必要になってくる...ということだと思う.
グラフィカルモデリング
この記事で理解してくれ
ようは、偏相関係数(偏相関行列の要素)が一番0に近いところを0において、もう一度相関係数と偏相関係数を出して、AICという指標を元に、その0とおく仮定が正しいのかいなかを判断し、OKなら(AICが前のAICより減少してるなら)、また次に0に一番近い偏相関係数を0とおいて....ということを繰り返しやっていき、AICが前のAICより増加した時点でこの操作をストップする.
ちなみに、偏相関行列を算出する際にするこの操作を「共分散選択アルゴリズム」という(らしい).
そして最終的に、算出された偏相関行列を用いて、無向グラフをかくといもの.
ここで、グラフを描くとき、偏相関係数が0のところは線を繋げず、非0なら線を繋げる.
実際のRのコード
必要な関数は一個のファイルにまとめて、#でコメントアウトしてるコードをコンソールでうてば実行してテキストファイルに保存してくれる.
# source("/Users/m-narumiya/OneDrive/ドキュメント/keisu_experiment/cov_selec_algo.R") # result_list <- cov_sel_algo(df) # 出力したいファイル先をここで指定 root_path <- "/Users/m-narumiya/OneDrive/ドキュメント/keisu_experiment/result" #偏相関行列を計算 cor2par <- function(R) { #Rは相関行列 X <- solve(R) p <- nrow(R) P <- matrix(0,p,p) for (i in (1:p)) { for (j in (1:p)) { if (i != j) P[i,j] <- -X[i,j]/sqrt(X[i,i]*X[j,j]) if (i == j) P[i,j] <- 1 } } return(P) } #消去する(i,j)成分を算出 select_ij <- function(P,amat) { #偏相関行列 p <- nrow(P) minabsP <- Inf for (i in (2:p)) { for (j in (1:(i-1))) { if (amat[i,j] == 1 && abs(P[i,j]) < minabsP) { minabsP <- abs(P[i,j]) i0 <- i j0 <- j } } } return(c(i0,j0)) # } # はじめのamatをセット set_amat <- function(df) { X <- df n <- nrow(X) p <- ncol(X) R <- cor(X) amat <- matrix(1,p,p) - diag(p) options(digits = 3) dimnames(amat) <- dimnames(R) return(amat) } # amatの更新 renew_amat <- function(amat,c) { amat[c[1],c[2]] <- amat[c[2],c[1]] <- 0 return(amat) } #AICの計算のための準備 est_cor_f <- function(df,amat) { #c = sele_ij() library("ggm") options(digits = 3) X <- df n <- nrow(X) p <- ncol(X) R <- cor(X) f <- fitConGraph(amat,R,n) return(f) } # AICの計算 calc_aic <- function(f){ aic <- f$dev - 2*f$df return(aic) } # リストのテキストファイルへの出力 print_list <- function(list,out_path) { out <- file(out_path,"w") for (i in 1:length(list)) { writeLines(paste(list[[i]][1]), out, sep=", ") writeLines(paste(list[[i]][2]), out, sep="\n") } close(out) } cov_sel_algo <- function(df) { R <- round(cor(df),3) P <- round(cor2par(R),3) amat <- set_amat(df) select_ij_list <- list() aic_list <- 0 last_aic <- 999 while(1) { c <- select_ij(P,amat) #(i,j)選択 P[c[1],c[2]] <- P[c[2],c[1]] <- 0 amat <- renew_amat(amat,c) #amatの更新 f <- est_cor_f(df,amat) aic <- calc_aic(f) # aicを計算 if (aic > last_aic) { amat <- last_amat aic_list <- c(aic_list,aic) P <- estP break } R <- f$Shat #round (f$Shat,3) #推定した相関行列 P <- cor2par(R) #round(cor2par(R),3) #偏相関行列を生成 estP <- P; aic_list <- c(aic_list,aic) select_ij_list <- append(select_ij_list,list(c)) last_aic <- aic #aicの値を保存 last_amat <- amat } aic_list <- c(aic_list) select_ij_list result_list <- list(round(R,3),round(P,3),select_ij_list,aic_list,amat) names(result_list) <- c("cor","cor2par","ijs","aics","amat") png(paste(root_path,"/plot_graph.png",sep = ""), width = 600, height = 600) # 描画デバイスを開く drawGraph(amat,adjust=FALSE) dev.off() # 描画デバイスを閉じる #推定された相関行列をテキストファイルに保存 write.table(round(R,3),paste(root_path,"/est_cor.txt",sep = ""),quote=F, col.names=F, append=T) #推定された偏相関行列をテキストファイルに保存 write.table(round(P,3),paste(root_path,"/est_cov.txt",sep = ""),quote=F, col.names=F, append=T) #AICの変化をテキストファイルに保存 write.table(aic_list,paste(root_path,"/aic_list.txt",sep = ""),quote=F,col.names=F, append=T) #0にされた成分をテキストファイルに保存 print_list(select_ij_list,paste(root_path,"/ij_list.txt",sep = "")) return (result_list) }
ちなみに、amatといのは、いわゆる「隣接行列」のこと(だと思う)
ちなみに、テキストファイルを覗かなくても、result_listの中身を見ればresult_list$cor
とかで推定された相関行列が見れたりする.
とりま今はここでさよなら
(コードの説明は今後気が向いたときにする予定)