ナルミヤの備忘録(仮)

ナルミヤが学んだことなどを書き記していくブログ(方向性模索中。)

スッキリと論文を読む

論文を読む機会が多くなったので,その前に論文の読み方について自分なりにまとめておこうと思ってメモ.
まとめようと思った同期の発端はここから(高速で論文がバリバリ読める落合先生のフォーマットがいい感じだったのでメモ)

本題

結論からいうと,「特定の問いに集中して,時間を決めて一気に読む.読んだ後はまとめる.んで,メモと文献は一緒に保管しておく.」というもの.

ここに書いてあることは全て先端技術とメディア表現1 #FTMA15に書いてある

以下はこれをまとめてるだけ.引用も多数.では以下詳細を見ていく.

まず時間を決めて一気に読む

各論文を読む際は時間を決めて読む.躓いても,まず論理構造を掴むことを優先する.
キモは

「この論文は何をやったのか,何を証明したのか?何を使って,それは今までとそれはどうなことなっているのか?次は何を読めばいいんだろうか?」

各セクションの肝を念頭におく

各セクションでは以下のようなことが核になってくる.そのため,各セクションを読む時は,以下のこと念頭に置いて読むとスッキリ読める(多分)

  • アブストラクト...何をしたか
  • イントロダクション...何をしたいか
  • 関連研究...他とどう違うのか
  • マテリアル&メソッド・実験結果...主張の証明
  • 議論...良し悪し
  • 結論...何をしたか(結論)
  • 参考文献...他の研究

オススメの読み方

アブスト → 結論 → 実験 → 関連研究

実装してみる

論文と肩を並べるには?
試しに実装してみること.わからないところは他の論文を見ながら調べる
(section [+α]論文の"先"をいくも参考に)

読み終えたらまとめる

読み終わったら,以下の項目についてどんな論文だったかまとめる

  • どんなもの?
  • 先行研究と比べてどこがすごい?
  • 技術や手法のキモはどこ?
  • どうやって有効だと検証した?
  • 議論はある?
  • 次に読むべき論文は?...文献の参考文献欄から探すのが近道(section 文献の探し方も参考に)

ex)

f:id:buddasls54:20180731001115p:plain
まとめ例

読んだ論文はメモと一緒に保管しておくと財産

保管場所を決める.
文献管理は次の章で紹介するMendeleyなどがいいと思われる.(これがメモ管理もできるかは把握してないけど)

+α (色々な文献を読んだら...)メタ的視点で研究を考える

色々な文献を読んだら,

  • そういう研究うの中でどういう点が好きだった?
  • その中で一番引用されている論文は?
  • その分野のどこが一番面白いところか?
  • 今の社会と合わせるとどこに問題があると思うか?

などを考えてみるといいかも?

+α ツッコミながら読む

僕の敬愛する東大教授の稲見先生のお言葉に「ツッコミ力は研究者として大切」というものがある.というわけで,論文にもツッコミながら読むと,読み込みが深くなるかもしれない.

+α 文献の探し方

「会議名+検索ワード」で調べてみる

+α 論文の"先"をいく

「この文献とどう差別化するか」「どう発展させるか」を考えてみる.

参考文献管理ツール

読み方とは関係ないが,文献があっちこっち散らばっててもあれなので一箇所に情報をまとめよう.
選択肢として見つけたものは以下の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を使える環境に

久しぶりの更新
Pythonopencvを使おうと思ったら思ったよりつまづいたのでメモ

環境

まず結論

仮想環境に入ってpipでopnecv-pythonをインストールしたらできた
具体的には以下のコマンドをターミナルをターミナルで実行

  1. まずはPythonの仮想環境を構築 以下のコマンドを実行することでカレントディレクトリに.venvというファイルができる.
$ python3 -m venv venv

そうして,以下のコマンドで仮想環境に入る

$  source venv/bin/activate
  1. 次に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
  1. opencv-pythonのインストール ここまできたら,もう次のコマンドで終わり.
$ pip install opencv-python

めでたくPython内でimport cv2と打ってもエラーが出なくなりました(やったぜ...)

ハマったポイント

はじめ,Homebrewで Python3 OpenCV3をMacにインストールなどをみて,Homebrewでやろうとしたらできなかった.
import cv2と打つとImportError:No module named cv2とか言われて実行できなかった(理由は知らない)
あと,/usr/local/Cellarにopencvはあるけどopencv3はなかった(なんでやねん)

参考にしたもの

雑談

最近Unityを触り始めたんですけど,そのことについてもまとめたいな〜
特に,Oculus Goのビルドには苦労した.今でもあの時間を思い出すとまじで嫌になる.
そして,ずいぶん前に,ねぎぽよしさんのマッハ新書も読んですごく感銘を受けたから,その感想をまとめたいと思ってる(思い始めてはや1ヶ月)
夏休みはUnityをある程度使ってARゲーム作りたいです(予定).3Dモデリングもしてみたいです(予定).機械学習も実装もしようと思ってます(予定).やりたいことたくさんあって楽しいです.やらなきゃ行けないものもたくさんあるけど.
それでは今回はここら辺で.

(PHP)PHPのエラーログをだす

今までエラーログがなぜかwebページ上にでてたのに出なくなったので、error_logを特定の場所い吐き出してくれるように設定。

動作環境

実際の手順

  1. まず、php.iniの場所を調べる.
    <?php phpinfo(); ?>

これの"Configuration File (php.ini) Path的なところに記載されている (http://am1tanaka.hatenablog.com/entry/2016/02/04/173256)f:id:buddasls54:20180608184629p:plain

  1. 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については、参考にしたページと同じ(なんでこうでなければならないか理解していない)

  1. 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からz_1,z_2,...についての影響を取り除いて、yからz_1,z_2,...についての影響を取り除いて...ってやらないと偏相関係数が出ない.
そして、xy自体が多変量で、

$$ 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) $$

となっていたら、このx,yについては、偏相関係数を集めた偏相関行列が必要になってくる...ということだと思う.

グラフィカルモデリング

この記事で理解してくれ

ようは、偏相関係数(偏相関行列の要素)が一番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とかで推定された相関行列が見れたりする.

とりま今はここでさよなら
(コードの説明は今後気が向いたときにする予定)