2016年8月28日

Principal Component Analysis; PCA (主成分分析)

  この投稿では,複数の画像データ間に対して,主成分分析を適用する場合における,数学的背景を示します.
MNISTのデータ (手書き数字の画像データ) の各画像間の変化に対して,PCAを適用した場合,下記のような式展開となります.
(画像1枚に対して,PCAを適用する場合は,また別の式展開となります.)

2016年8月25日

Emacsの設定 (based on Cygwin)

Cygwinは,後から追加インストールが度々必要となるため,全てインストールすると良い.(10~20GB程度)

Emacsは,下記のように設定した.

[c:/cygwin/home/<usrname>/.emacs]
; このファイルは emacs の設定ファイルです.
; emacs の設定ファイルではセミコロン ';' 以降の文字がコメントとして扱われます.

; ファイル名を指定して起動した場合でも,分割 2 画面にしない.
(setq inhibit-startup-message t)

; バックアップファイルを作成しない
(setq make-backup-files nil)
; 自動保存を無効
(setq auto-save-default nil)

(keyboard-translate ?\C-h ?\C-?);   \C-h: Delete

(keyboard-translate ?\216 ?\C-\S-n);\C-\S-n: [\C-\S-n]でも選択しながら下へ移動できるようにする
(keyboard-translate ?\220 ?\C-\S-p);\C-\S-p: [\C-\S-p]でも選択しながら下へ移動できるようにする

(keyboard-translate ?\206 ?\C-\S-f);\C-\S-f: 前方向に選択
(keyboard-translate ?\202 ?\C-\S-b);\C-\S-b: 後ろ方向に選択
(keyboard-translate ?\227 ?\S-\M-f);\C-\S-w: 単語単位で前方向に選択.[\M-\S-f]に同じ
(keyboard-translate ?\221 ?\S-\M-b);\C-\S-q: 単語単位で後ろ方向に選択.[\M-\S-b]に同じ

(keyboard-translate ?\201 ?\C-\S-a);\C-\S-a: カーソルから先頭まで選択
(keyboard-translate ?\205 ?\C-\S-e);\C-\S-e: カーソルから末尾まで選択
(keyboard-translate ?\203 ?\M-w);\C-\S-c: コピー
(keyboard-translate ?\226 ?\C-y);\C-\S-v: 貼り付け
(keyboard-translate ?\230 ?\C-w);\C-\S-x: 切り取り

(keyboard-translate ?\232 'undo);\C-\S-z: undo
;(global-set-key "\C-z" 'undo);UndoをCtr+z でもできるようにする


;; init.el だけに設定されてしまう
(setq c-basic-offset 4)
;; ホックを使った設定
;(defun my-c-c++-mode-init ()
;  (setq c-basic-offset 4)
;  )
;(add-hook 'c-mode-hook 'my-c-c++-mode-init)
;(add-hook 'c++-mode-hook 'my-c-c++-mode-init)

;(setq-default tab-width 2 indent-tabs-mode nil); タブにスペースを使用する
(setq default-tab-width 4);タブの表示幅の設定
;(setq indent-tabs-mode nil)
;(keyboard-translate ?\t ?\M-i);\C-q \t: タブキーを何が何でも tab キーとして入力するための設定.[タブの入力方法: Ctrl-i/ESC-i/Alt-iのいずれか,または,Ctrl-qでエスケープしてTABキーで入力];これだと 1 タブ = 8 スペースにしないと,1 タブで 1 タブ 4 スペースが 2 つ挿入される
;(setq c-tab-always-indent t); タブ (よくあるタブの設定,上記設定と競合するため注意)

;; 改行コードを表示する
(setq eol-mnemonic-dos "(CRLF)")
(setq eol-mnemonic-mac "(CR)")
(setq eol-mnemonic-unix "(LF)")

(global-linum-mode t);行番号の表示
(setq linum-format "%4d ");行番号との間に1スペース挿入する
(delete-selection-mode t);リージョンを削除できるようにする

(setq scroll-conservatively 1); スクロールを1行ごとにする

(global-set-key "\M-n" (lambda () (interactive) (scroll-up 1)));スクロール
(global-set-key "\M-p" (lambda () (interactive) (scroll-down 1)));スクロール


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; http://myemacs.readthedocs.io/ja/latest/basic-customize.html
;; xterm のマウスイベントを取得する
(xterm-mouse-mode t)
;; マウスホイールを取得する
(mouse-wheel-mode t)

;; ホイールでポインタを移動できるようにする
;(global-set-key [mouse-4] (kbd "C-p"))
;(global-set-key [mouse-5] (kbd "C-n"))

;; ポインタの移動ではなくて画面をスクロールさせたい場合はこっち
(global-set-key   [mouse-4] '(lambda () (interactive) (scroll-down 6)))
(global-set-key   [mouse-5] '(lambda () (interactive) (scroll-up   6)))

;;;; カーソルのある行のハイライトを有効にする
;(global-hl-line-mode t)
;; ハイライトの色を設定します
;(custom-set-faces '(hl-line ((t (:background "dark gray")))));; これが上手く動かない
(setq hl-line-face '(background "dark gray"))
;; ハイライトのスタイルをアンダーラインにします
;; ただしアンダーバーが見えづらくなる問題があります
;(setq hl-line-face 'underline)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; http://d.hatena.ne.jp/khiker/20070409/emacs_hl_line
;; 現在行をハイライト
;(global-hl-line-mode t)
;(defface my-hl-line-face
;  '((((class color) (background dark))  ; カラーかつ, 背景が dark ならば,
;     (:background "DarkSlateBlue" t))  ; 背景を黒に.         ; ここ,動作はするが,#FFFFFF で任意の色を指定できないのでダメ.
;    (((class color) (background light)) ; カラーかつ, 背景が light ならば,
;     (:background "ForestGreen" t))     ; 背景を ForestGreen に.
;    (t (:bold t)))
;  "hl-line's my face")
;(setq hl-line-face 'my-hl-line-face)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; http://keisanbutsuriya.hateblo.jp/entry/2015/02/01/162035
(show-paren-mode t)                       ;; 対応する括弧をハイライト

(setq show-paren-style 'parenthesis) ;対応する括弧だけをハイライト
;(setq show-paren-style 'expression)  ;括弧で囲まれた部分をハイライト
(setq show-paren-style 'mixed)   ;画面内に対応する括弧がある場合は括弧だけを,ない場合は括弧で囲まれた部分をハイライト
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;(keyboard-translate ?\C-\S-b ?\S-\M-b)
;(global-set-key "\C-h" 'delete-backward-char)

;;; 画面右端で折り返さない
(setq-default truncate-lines t)
(setq truncate-partial-width-windows t)

(setq x-select-enable-clipboard t);OSとクリップボードを共有(これだと上手く動作していない. Cygwin だから?)

; for clipborad
(setq sysname system-type)
(if (eq sysname 'darwin)
 (progn
   (defun copy-from-osx ()
  (shell-command-to-string "pbpaste"))
   (defun paste-to-osx (text &optional push)
  (let ((process-connection-type nil))
    (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
   (process-send-string proc text)
   (process-send-eof proc))))
   (setq interprogram-cut-function 'paste-to-osx)
   (setq interprogram-paste-function 'copy-from-osx)
   )
  (message "This platform is not mac")
  )
(if (eq sysname 'cygwin)
 (progn
   (defun paste-from-cygwin ()
  (with-temp-buffer
    (insert-file-contents "/dev/clipboard")
    (buffer-string)))
   (defun cut-to-cygwin (text &optional push)
  (with-temp-file "/dev/clipboard"
    (insert text)))
   (setq interprogram-cut-function 'cut-to-cygwin)
   (setq interprogram-paste-function 'paste-from-cygwin)
   )
  (message "This platform is not cygwin")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;(add-hook 'c-mode-hook
;    '(lambda ()
;    (c-toggle-electric-state -1)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\C: Ctrl
\S: Shift
\M: Alt(Meta)
-:「同時に押す」の意味
;:コメント
(keyboard-translate ?[入力] ?[出力])
[\XXX]という番号は,emacs起動中にキーを押すと出てきた数値を入力している.PCによって異なる可能性はありうるので,注意.(当然ショートカットを割り当てた後は,数値は出ずに,割り当てたショートカットが実行される.)

windows上では,[.]から始まるファイル名を指定できないので,
一度 emacs.txt などの別名を指定した後, $mv emacs.txt .emacs のようにして,ファイル名を変更すると良い.

windowsのキー配置では,Emacsを使用し難いため,[Caps Lock]->[Ctrl]に変更しておく(keyswapを利用).
今回は,[無変換]->[英数],[変換]->[かな]の変換も行った(IMEの設定から変更可能).

参考資料
kakakikikekeのブログ 2015年3月24日火曜日 emacs で clipborad を共有する方法