2014年11月29日土曜日

bag-of-wordsの次元削減法まとめ

bag-of-wordsはともかく次元が大きい。出現する単語の種類数分の次元がある。

1万次元などは余裕で行ってしまう。このままではまともに識別機を作ることは困難なので
何らかの手段で圧縮してやる必要性がある。

参考:Text Mining Handbook

単語頻度

単純に単語の出現頻度が低いものを考慮から外して次元の削減をするというもの。上位10パーセントの単語のみを使っても識別の精度は変わらないらしい。これは頻度が高い単語の重要度をあげるというTF/IDFの考えに真っ向から反しているが、低すぎる頻度の単語は意味がないのでこれでいいらしい。

Information Gain

\(\text{InformationGain}(x|w)=H(x)-H(x|w)\)
ここで\(x\)は特徴量すなわちbag-of-wordsで\(w\)はある単語。
\(H(x)\)は特徴量のエントロピーで\(H(x|w)\)はある単語\(w\)が発生したとき(わかったとき)特徴量のエントロピー。
つまり$\text{Infomation Gain}$とは、ある単語(次元)を知ることによって、どの程度エントロピーが下がったかという指標。
もっと噛み砕くと、文書を何個かのクラスに分類しようとするとき、単語\(w\)を知ることで、どれだけ分類の特定をすすめられたかの指標になる。

Latent Semantic Indexing

Latent Semantic Indexingとは、まんまSingular Value Decompositionのこと。
bag-of-wordsにSVDを適用して次元削減することをこんな風に呼ぶらしい
SVDに関しては、過去の記事を参照
http://satomemocho.blogspot.jp/2014/10/rsvd.html

なぜわざわざLatent Semantic Indexingと呼ぶかというと、なんか同義語とかを処理できるようだが、詳しくは不明。
以下のサイトをよもう!
http://chasen.org/~taku/blog/archives/2005/11/_tfidf_1.html

2014年11月23日日曜日

機械学習のためのpythonの設定(CentOS6.5)

機械学習のプログラムはRとpythonの2強のようなので、pythonも使かわないと

python2.7のインストール(centOS6.5はデフォルトで2.6)

yum install python27

easy_install およびpipのインストール

wget https://bootstrap.pypa.io/ez_setup.py -O - | python
easy_install pip

各種ライブラリに必要なライブラリのインストール

yum -y install gcc gcc-c++ kernel-devel
yum -y install python-devel
wget http://pypi.python.org/packages/source/d/distribute/distribute-0.6.27.tar.gz
cd  distribute-0.6.27
python2.7 setup.py install
yum install libpng-devel -y

各種機械学習系ライブラリのインストール

pip install numpy
pip install scipy
pip install matplotlib
pip install gensim

2014年11月13日木曜日

SublimetextでGithub Flavored Markdownを書く

Sublimetextを入れたらとりあえず行うべきこと

参考:https://github.com/revolunet/sublimetext-markdown-preview
参考:http://sonoshou.hatenablog.jp/entry/2013/12/20/Sublime_Text_%E3%81%A7_Markdown%EF%BC%8E

パッケージコントロールの導入

ctrl+@ を押してコンソールを出したのち以下のサイトのコマンドを入力してパッケージコントロールをインストールする。
https://sublime.wbond.net/installation

各種パッケージの導入

ctrl+shift+p をおして以下のパッケージをインストール

  • Markdown Preview マークダウンを書くため
  • IME Support 日本語入力をインラインにするため

フォントの変更

フォントは変えておこう。特にwindowsの人は
Preference ->Settings - Userに以下のように記載する。(当然対応するフォントをインストールしてから)

{
"font_face": "Source Code Pro",
}

Markdown previewのカスタム

プレビューへのキーバインド

デフォルトではプレビューするためにctrl+shift+pを押してからMarkdown previewを押さないといけないので、この動作をにキーをバインドする。
Preference ->Key Bindings - Userに以下のように記載することでalt+mでプレビュー

[
{ "keys": ["alt+m"], "command": "markdown_preview", "args": {"target": "browser"} }
]

Markdown previewでGithub Flavored Markdown、シンタックスハイライト、数式を使う

デフォルトの設定ではGithub Flavored Markdownではなく普通のMarkdownなので表が書けなかったりする。
またコードのシンタックスハイライトにも対応していない。MathJaxもオフになっているので数式がプレビューで表示できない。
Preferences-> Package Settings -> Markdown Preview->Settings - Userに以下のように記載する。

{
"enable_mathjax": true,
"enable_highlight": true,
"enabled_parsers": ["markdown", "github"],
"github_mode": "gfm"
}

MathJaxの使い方は以前の記事参照
http://satomemocho.blogspot.jp/2014/11/mathjax.html



こんな感じでエスケープが必要
 \\(\mathcal{N}\\)

2014年11月5日水曜日

MathJaxによる数式の書き方

このブログに数式を書きたいのでMathJaxを使用することにした。

つかいかた

ヘッダに以下を追加
参考
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">
</script>

サンプル

\(\TeX\)風に書けます。

ベイズの定理


\(p(Y|X)=\frac{p(X|Y)p(Y)}{p(X)}\)
\(p(Y|X)=\frac{p(X|Y)p(Y)}{p(X)}\)

正規分布


\( \mathcal{N}(\mathbf{x}|\mathbf{\mu},\Sigma)= \frac{1}{(2\pi)^{D/2}|\Sigma|^{1/2}}\exp\left\{-\frac{1}{2}(\mathbf{x}-\mathbf{\mu})^T\Sigma^{-1} (\mathbf{x}-\mathbf{\mu}) \right\} \)
 \(
\mathcal{N}(\mathbf{x}|\mathbf{\mu},\Sigma)=
\frac{1}{(2\pi)^{D/2}|\Sigma|^{1/2}}\exp\left\{-\frac{1}{2}(\mathbf{x}-\mathbf{\mu})^T\Sigma^{-1} (\mathbf{x}-\mathbf{\mu}) \right\}
\)

ベイズ情報量基準


\(BIC=-2\ln(L)+k\ln(n)\)
\(BIC=-2\ln(L)+k\ln(n)\)