「欠測データ処理」を読んだ

データ分析の前処理における重要なポイントの一つとして、欠測データをどのように扱うかがある。
入門向けの記事だと単純に平均値や0埋めなどを施して、そのまま機械学習モデルに投入する例が多いが統計学的にはこのような単一代入法と呼ばれる手法はバイアスを生じる。
そこで使われるのが多重代入法と呼ばれる手法である。

多重代入法について詳しく知りたかったので、評価の高い「欠測データ処理」を読んだ。

本書では欠測データの種類、単一代入法・多重代入法の理論的な側面とともにRによる実際のコード例も紹介されている。
例えば、一口に欠測データといってもその生成メカニズムとしてMCAR, MAR, NMARなどの種類が存在する。ある調査では経験的に完全にランダムに欠損が生じているデータ(MCAR)は公的統計の調査においては約10~20%程度という結果もある。
MARによる欠損は単一代入法ではバイアスが生じるため、多重代入法を利用するべきである。多重代入法とは欠測データの分布から独立かつ無作為に抽出されたM個のシミュレーション値によって欠測値を置き換えるものである。

最後の「おわりに」の章にある3つの疑問に対する回答が、なぜ多重代入法を使うのかという説明として非常にわかりやすかった。「なぜ複数回の代入が必要なのか」という疑問に対して、複数回の代入を行うことで推定に関する不確実性を代入されたデータに取り入れることで、標準誤差を適切にすることができると書かれている。これによって母集団パラメータの推定を妥当なものとすることができる。

外れ値処理の一手法:Winsorizingについて

機械学習や統計の分野における外れ値処理の手法の一つとしてWinsorizingと呼ばれる手法がある。日本語の解説が少なかったので書いてみる。

手法自体は非常に簡単で、外れ値を外れ値以外の最大値・最小値で置き換えるというものである。表形式データを考えると、単純に外れ値を除去するよりも、データサイズが少ない場合はほかのカラムの情報を有効活用することができる。

ちなみに英語版のWikipediaにはページが用意されている。
https://en.wikipedia.org/wiki/Winsorizing

このページにあった例を見てみると、numpy配列の上下5%のデータを最大値と最小値で置き換える方法が書かれている。

import scipy.stats
import numpy as np 
a = np.array([92, 19, 101, 58, 1053, 91, 26, 78, 10, 13, -40, 101, 86, 85, 15, 89, 89, 28, -5, 41]) 
scipy.stats.mstats.winsorize(a, limits=[0.05, 0.05])

1053が101に、-40が-5へと置き換えられる。
少し考えるとわかるが、単純に外れ値を除去して平均を取った場合とWinsoringをしてから平均を取った場合では値が異なる。

XGBoost 0.81でtrain()が落ちる

タイトルの通り、XGBoostの現時点での最新バージョンを入れてtrain()を呼び出したところ、Jupyter Notebookで「”The kernel appears to have died. It will restart automatically.”」と出て強制終了となった。どうもデータかパラメータに依存して起きる現象っぽい。

色々と調べて試してみたが、ここを参考にしてバージョンを下げたところ問題なく動くようになったのでバグっぽい。

インストール方法:

pip install xgboost==0.80

Windowsで英文形態素解析ツールTreeTaggerを使う

日本語の形態素解析ツールといえばMeCabが有名だが、英文を形態素解析する場合はTreeTaggerというツールを使うのがメジャーなようだ。

TreeTagger
http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/

手元の環境がWindowsなので、今回はWindowsにTreeTaggerを導入する手順を書く。次回はPythonから使う方法を書く予定。

ActivePerlをインストール

https://www.activestate.com/activeperl/downloads

TreeTagger本体を導入

公式サイトからTreeTaggerをダウンロード

http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/

インストール手順は同梱のINSTALL.txtに書かれているので参照する。

TreeTaggerディレクトリをC:\直下に置く。他のディレクトリに置く場合はtag-*.batファイルの最初にあるpathを書き換えれば動く。

辞書データをダウンロード

公式サイトのChunker parameter files for PC の部分から必要なパラメータファイルをダウンロードして解凍する。

今回は英文を対象としたいので、Englihs chunker parameter fileをダウンロード。

解凍するとenglish-chunker.parというファイルが入っているので、これをenglish-utf8.parにリネームして、TreeTagger/libに保存する。

実行

C:\TreeTagger\bin に移動して、テスト用テキストtest.txtを作成する。

今回は、インストール手順書の中の文、「This is the Windows distribution of the TreeTagger.」を書いてみた

コマンドプロンプトを開き、以下のバッチファイルを実行すると形態素解析結果が表示される。

PS C:\TreeTagger\bin> .\tag-english.bat test.txt
reading parameters ...
tagging ...
This NN/B-NC This
is NN/B-NC is
the NN/B-NC the
Windows NN/B-NC Windows
distribution NN/B-NC distribution
of NN/B-NC of
the NN/B-NC the
TreeTagger NN/B-NC TreeTagger
. NN/B-NC .
finished.

結果の見方

形態素解析の結果については、以下のページが詳しい。

http://computer-technology.hateblo.jp/entry/20150824/p1

 

今後

次回はPythonから使う方法を見ていきたい。

コンピュータサイエンスの論文を毎日紹介するブログ the morning paper

タイトルの通り、コンピュータサイエンス関連の論文を毎日(平日)紹介するブログを見つけた。
the morning paper

基本的に論文のメインとなるところを抜粋しつつ意見を書いているので、アカデミックばりばりでは無いけどもアカデミックな世界でどのようなトレンドがあるのかを押さえておきたいエンジニアに最適だと思う。

一つ一つの記事の分量は少ないので、英語の練習にも使えると思う。
こういった紹介ブログで概要を把握してからの方が、論文も読みやすいのでかなりオススメできる。

Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems を読んだ

前回に引き続き、機械学習関係の本を読んだ。

2つのパートに分かれている本で、前半はScikit-learnを使って線形回帰、SVM、決定木、ランダムフォレストなどの手法が書かれている。
後半のパートはニューラルネットワークとDeep LearningについてをTensorflowで学ぶ形になっている。
Deep Learningの内容はCNN, RNN, Autoencoder, 強化学習、などを2015年くらいまでの論文を参照しながら書かれていてとても参考になった。
そのうちきっと翻訳が出ると思うが、そのころにはこの分野はかなり進んでしまっているかと思うので、読みやすい英語版を今のうちに読んでみることをお勧めする。

それにしても、Scikit-learnとTensorflowはとてもよく出来たフレームワークで、機械学習に挑戦するには良い時代だなぁとつくづく思わされた。

An Introduction to Statistical Learning を読んだ

機械学習について勉強しているのですが、基礎を固めるのに何か一冊良さそうな本を探して、以下の本が評判が良かったので読んでみた。

結論から言うと、これはものすごく分かりやすい。
数学的な内容が多いのだが、説明が上手く、なおかつ詳細は深く追わないという著者の姿勢によって、統計的学習に必要な手法がざっくりどのようなことをしていて、どういう風に使えば良いかが理解できる。

また、Youtubeには著者による解説動画もあるので、本を読んでわからなかった部分を復習するのにとても役立った。
ちなみにPDF版が著者のページに公開されているので、やる気さえあればタダで勉強できます。
(私は無料だと結局やらないので、物理本を買って常に近くに置いておくことでプレッシャーをかけて読み終えました)

通称カステラ本をいきなり読む前にこちらで概要を理解してからの方が、初心者には易しいかと思います。
オススメです。

The Nix

洋書の小説でこれはすごい小説だ、という話を聞いて「The Nix」を購入した。

600ページもある小説なので、最後まで読み通せるか不安ではあったが、読んでみると引き込まれる物語だった。
登場人物はみんなどこかしら壊れており、複数の物語が流れており、時代は前後して、一体この物語はどこへ向かうのだろう?と読みながら気になっていたが、ラストに向けて確かに物語は上手く収束して、これで良かったんだろうと思わせる不思議な力がある。

そのうち翻訳も出るだろうから、ぜひとも読んでもらいたい。

MacをEl CapitanにアップグレードしたらHomebrewが上手くいかなくなった

ふと気が向いてEl CapitanにアップグレードしたらHomebrewが上手くいかなくなった。
どうやら新たに入ったSIPという機能により/usr以下のフォルダの権限を制限しているらしい
以下のコマンドで権限を付与すれば良い。 sudo chown -R $(whoami):admin /usr/local なにやら定期的に権限が書き換わってしまうこともあるそうなので、その場合には定期的に上記のコマンドを実行するなどする必要がありそう。
ちなみにHomebrewの開発チームでも/usr/local以下に置くことを見直そうか検討されているそうです。