Tokyo.R#53で得たパッケージ情報とその実践

第53回のTokyo.Rで気になったパッケージの情報と実行例をいくつかあげました。スライドなどもろもろの発表はこちらの方のブログ「第53回R勉強会@東京で発表してきた」が非常に詳しく書かれています。

【目次】
・ggradarパッケージ
・proxyパッケージ
・因果推論(CBPSパッケージ)
・MXNetパッケージ
・missForestパッケージ
・RFinanceパッケージ

ggradarパッケージ

簡単にレーダーチャートを作れるパッケージです。こちらのブログを参考にしています。

企業の職場環境に関してまとめられた某口コミサイトから4個ほどデータを拝借してきました。

ggradarをそのまま使おうとすると、Circular Air Lightというフォントが必要だと怒られるので、参考のブログにある通り、OSXの場合はこちらをダブルクリックでインストールして再起動します。

先ほどのデータに対して、以下のコードを実行すれば非常に簡単にレーダーチャートが作れました。

company_voice_radar

proxyパッケージ

距離や類似度を計算するパッケージです。
先ほどのデータに対して類似度と距離を計算してみます。

こんな感じで、類似度や距離の計算ができます。

因果推論

こちらはパッケージとかそういうものではなく、既存の関数などで計算できるようです。
こちらのブログ、「調査観察データにおける因果推論(3) – Rによる傾向スコア,IPW推定量,二重にロバストな推定量の算出」に詳しく書かれています。
・glm関数での傾向スコアの算出
・傾向スコアを共変量としてlm関数で回帰分析
・コードを愚直に書いてIPW推定量の算出
・期待値の標準誤差を出すための関数を作成
・DR推定量の算出をするための関数を作成
などで、推定自体は実現できるようです。

ただし、CBPS(Covariate Balancing Propensity Score)というパッケージがあるらしく、このパッケージを用いれば因果推論の計算を行えるようです。

Package ‘CBPS’
以下のようなExampleコードが載っていたので、実行してみましたが、なかなか結果が返ってこなかったので不安になりました。計算が終わるまで10分以上はかかったと思います。

MXNet

XGBoostのパッケージを作ったチームが手がけているパッケージで、深層学習を実行できます。

インストール方法はここに書かれています。
Deep Learning for R

あれ、OSXではエラーが返ってきてライブラリが読み込めないですね。どうやら私のためにあるようなブログ「Installing mxnet for R on Yosemite」があったので、時間を見つけてチャレンジしてみようと思います。

ディープラーニングを用いた回帰分析については、Neural Network with MXNet in Five Minutesにコードがもろもろ載っていますので、チャレンジしてみると良いと思います。

リンク先に載っているのですが、一応コードを以下に記しておきます。

missForest

ランダムフォレストを用いて、欠損値補完を行うためのパッケージです。目的変数が欠損していても適用できるようです。
詳しくは、スライドを見ていただいた方がいいですが、以下のプログラムで実行できました。ちなみにスライドはこちら、「Imputation of Missing Values using Random Forest

RFinanceYJ

Yohei Sato, Nobuaki Oshiro, Shinichi Takayanagiさんたちが作った、Yahoo!ファイナンスの株価データを取得できるパッケージです。だいぶ前からあったようですが、使って分析している人は初めて見ました。どうやらYahoo!ファイナンスの仕様によって書き換えていかないといけないようです。「2015-01-20 Rでチャートを書いてみる(9)」のブログに実行可能なプログラムがあります。以下、実行可能なコードを転載いたします。

このコードでYahoo!ジャパンの株価を見てみましょう。ちなみに番号は4689です。どうやら上手く取れているようです。

ディープラーニングの基礎まとめ

【目次】
・ディープラーニングとは
・ディープラーニングでできること
・ディープラーニング実行のためのライブラリ
・参考文献

ディープラーニングとは

階層の深いニューラルネットワークを利用したアルゴリズムの総称。
様々なアルゴリズムが存在する。

  • Convolution Neural Network(CNN)
  • 畳み込み層とプーリング層と呼ばれる層を持つニューラルネットワークの総称
    CNNは画像認識に良く利用され、畳み込み層やプーリング層が画像における局所的な情報の抽象化や位置の不変性を持たせる役割を担っています。人間の視野の構造にも近いとされているらしいです。

      畳み込み層
      前の層の中で近くにあるノード同士の集合が、次の層のノードと接続するような構造を持つ層のこと。画像の局所的な部分の特徴を様々な方法で浮き立たせる役割を果たす。

    スクリーンショット 2016-03-05 15.28.10

      プーリング層
      前の層のノードの局所的な部分をまとめあげる処理のこと。局所的な部分の最大化を取る処理は「最大プーリング」と呼ばれる。プーリング層の役目は位置変更への感度を下げることで、小さな平行移動に対する不変性を持たせることにあります。

    スクリーンショット 2016-03-05 15.36.42

  • AutoEncoder
  • 入力層(画像データなどの特徴量)と出力層(判別したいカテゴリなど)が同一のサイズのノードを持つ層となるニューラルネットワークを利用したアルゴリズム。利用する隠れ層は一般的に、入力層や出力層よりも小さいものにするそうです。隠れ層は1層である必要性はなく、複数置くこともできます。AutoEncoderの役割としては、入力層と出力層の値がなるべく同じ値を出力しながら、欠損を極力少なくして、情報を圧縮することです。その結果として、データをよく表す特徴を獲得したり(なんだか主成分分析的なものを感じますね。)、深いネットワークを解く際の初期値を手にいれることができます。圧縮することで、深い階層のネットワークでもうまく計算できるということになります。

    スクリーンショット 2016-03-05 15.57.52

  • Recurrent Neural Network(RNN)
  • 先ほど挙げたCNNやAutoEncoderの前提となるデータは固定長と呼ばれ、つまり画素数などのピクセルが一定のものを値としてとります。しかしながら、画像のデータ以外は固定長データではないものが多いので、扱うことができません。実際、音声の長さやテキストの文字数はデータによってバラバラです。そこで、可変長のデータを扱えるようにしたものが、Recurrent Neural Network(RNN)です。音声認識処理や自然言語処理で利用されているそうです。
    RNNの特徴は、Recurrent(再帰)の字面の通り、隠れ層において再帰的な構造を持つことで前の状態を再び使いながら計算を行うことです。どうして再帰によって可変長が扱えるようになるのかは、理解が追いついていないですが、同じデータの長さでなくても、隠れ層で得た知見を活かせるという仕組みのようです。

    スクリーンショット 2016-03-05 16.34.49

    ディープラーニングでできること

  • 画像認識
  • 不適切なコンテンツ検知
    画像の意味分析
    画像のキャプション
    CLOUD VISION API
    Cloud Vision APIの凄さを伝えるべくRasPi botとビデオを作った話

  • 音声認識
  • iOSのSiriなどに活用されている。従来の手法である隠れマルコフを利用した場合はエラー率が25.8%であったのに対して、ディープラーニングでは16%のエラー率に改善されているそうです。

    CRMのデータとかアクセスログデータにおいての活用に関心がありますが、数は少ないものの、活用している企業はあるようです。ディープラーニングとアクセス解析の事例はググっても出てこなかったのは残念です。
    (基礎調査)Deep Learning は、ビジネス や 産業の現場で どこまで使われているのか?

    ディープラーニング実行のためのライブラリ

    実行するためのライブラリですが、非常に多くのものが用意されているようです。私はTensorFlowやChainerやTheano・Caffe・Pylearn2くらいしか目にしかことはなかったです。インストールも簡単ですし、Pythonを用いるという観点からはChainerが一番興味があります。

    ・TensorFlow
    ・Chainer
    ・Theano
    ・Pylearn2
    ・PyBrain
    ・nolearn
    ・Cuda-convnet2
    ・Torch7
    ・deeplearning4j
    ・Caffe
    ・DeepDream

    ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換) – Over&Out その後

    参考文献

    初めてのディープラーニング –オープンソース”Caffe”による演習付き

    機械学習プロフェッショナルシリーズ輪読会 #2 Chapter 5 「自己符号化器」 資料

    OS X YosemiteへのTensorFlowのインストールと簡易な分類モデルの実行

    遅ればせながらTensorFlowをインストールしてみようと思います。
    環境はOSX Yosemite version 10.10.5です。

    まずは、こちらのサイトにあるように、ターミナル(Windowsでいうところのコマンドプロンプト)にて、
    以下のコードを実行します。(前提として、Python2.7とpipが入っているものとします。)

    こちらを実行すれば、インストールされます。

    次に、画像を格納しておくためのディレクトリを作成します。
    同じくターミナルにて以下のコードを実行します。

    次に、こちらのgithubより、MNISTの画像を取得するコードをコピーします。

    コピーしたものを、先ほどのターミナル上で表示されているvimにて、
    i
    を押してからペーストし、Escを押してコマンドモードに移り、
    :wq
    を入力することで上書きしてファイルを閉じます。
    詳しくはvimコマンド一覧をご覧ください。

    そして、ターミナル上でpythonを開き、以下のコードを実行します。

    そうすることで、フォルダが作られデータが格納されていることが確認できると思います。
    だいたい11MBくらいのボリュームです。元の画像は手書き文字で、28×28ピクセルの画素だそうです。

    さて、このデータに対する機械学習による分類の実行ですが、
    TensorFlow 畳み込みニューラルネットワークで手書き認識率99.2%の分類器を構築」こちらで紹介されているコードを丸々引用させていただきます。これの初級者用のロジスティック回帰モデルのものを扱います。(試行回数を1000回から50000回に変更しています。)

    こちらを実行したところ、

    ****MNISTデータ読み込み****
    Extracting MNIST_data/train-images-idx3-ubyte.gz
    Extracting MNIST_data/train-labels-idx1-ubyte.gz
    Extracting MNIST_data/t10k-images-idx3-ubyte.gz
    Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
    ****Start Tutorial****
    ****init****
    ****50000回学習と結果表示****
    0.914

    と試行回数を50000まで増やしても、Qiita初級者向けモデルの1000回試行の0.91と比べてあまり良くなりませんでした。
    紹介されていたQiitaの上級者向けモデルでは0.992まで持って行っていましたので、上級版もチャレンジしてみたいですね。
    勉強しないとここらへんの改良はできないので、今後学習していこうと思います。