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まで持って行っていましたので、上級版もチャレンジしてみたいですね。
勉強しないとここらへんの改良はできないので、今後学習していこうと思います。

LDA(潜在的ディリクレ配分法)まとめ 手法の概要と試行まで

【目次】
・トピックモデルとは
・トピックモデルの歴史
・トピックモデルでできること
・トピックモデルを理解するために必要な知識
・トピックモデルの手法について
・トピックモデルの実行方法について(R言語)
・トピックモデルの評価方法について
・Correlated Topic Models (CTM)について
・PAM:Pachinko Allocation Modelについて
・Relational Topic Models(RTM)について
・参考文献

トピックモデルとは

・一つの文書に複数の潜在的なトピック(話題・分野・文体・著者など)、文書ごとのトピック分布、トピックごとの単語分布を仮定して、テキストからトピックを推定するモデル。文書に限らず、様々な離散データに隠された潜在的なトピックを推定するベイジアンモデル。幅広いドメインでの離散データで有効とされている。

トピックモデルの歴史

1998年:pLSA(probabilistic Latent Semantic Analysis)
2003年:LDA(Latent Dirichlet Allocation)
2004年〜:拡張モデル
2007年〜:大規模データのための高速化

トピックモデルでできること

・人を介することなく、大量の文書集合から話題になっているトピックを抽出できる。
・文書データだけでなく、画像処理、推薦システム、ソーシャルネットワーク解析、バイオインフォマティクス、音楽情報処理などにも応用されている。
・確率過程を用いて、ノイズを取り除き、本質的な情報を抽出できる。

トピックモデルを理解するために必要な知識

・確率
 -確率分布
  -ベルヌーイ分布
  -カテゴリ分布
  -ベータ分布・ガンマ分布
  -ディリクレ分布
・ラグランジュ未定乗数法
・ユニグラム
 -BOW(Bag of words)
 -ユニグラムモデル
・混合ユニグラムモデル
・混合モデル
・EMアルゴリズム
・最尤推定
・ベイズの定理
 -ベイズ推定
  -ベイズ予測分布
  -ハイパーパラメータ推定
  -モデル選択
  -変分ベイズ推定
  -ギブスサンプリング

トピックモデルの手法について

推定方法としては以下の三つが提案されている。
・最尤推定
・変分ベイズ推定
・ギブスサンプリング

  • ギブスサンプリングによる方法
  • 一部のパラメータを積分消去して、トピック集合の事後分布を推定

    文書集合とトピック集合の同時分布を導出

    単語ごとにトピックをサンプリングする

    サンプリングされたトピックからトピック分布と単語分布を推定

    周辺同時尤度を最大化させるハイパーパラメータαとβを推定する

    ※LDAのギブスサンプリングはLDAが共役性に基づいたモデリングであるため効率的な計算が可能とされる。

    ハイパーパラメータを適切にデータから学習すれば、MAP推定・変分ベイズ推定・ギブスサンプリングの性能の差は大きく出ないという研究結果があるらしい。(なお、MAP推定だと、クロスバリデーションを行い、尤度を最大化させるハイパーパラメータを見つけなければならない。)

    トピックモデルの実行方法について(R言語)

    以下のパッケージで実行可能だが、新しい手法などにはまだ対応していない。
    lda(CRANのPDF
    topicmodels(CRANのPDF

    以下はtopicmodelsパッケージの実行コードであるが、BOW形式のデータがあれば、実行はすぐにできる。
    ただし、パープレキシティなどを計算しながら、ハイパーパラメータのチューニングをする必要がある。

    時間があれば、ソースコードを見て自分で書けるようにしたい。
    ちなみに、HDP-LDAはPythonのgensimに用意されているようです。(gensimへのリンク)

    トピックモデルの評価方法について

  • パープレキシティ(Perplexity)
  • -確率モデルの性能を評価する尺度として、テストデータを用いて計算する。
    -負の対数尤度から計算できる。
    -低いパープレキシティはテストデータを高い精度で予測できる良い確率モデルであることを示す。
    -全ての語彙が一葉の確率で出現するモデルのパープレキシティは語彙数Vになり、性能が悪いと考えることができる。
    -このパープレキシティが小さくなるようなトピック数やパラメータの設定が必要。

    Correlated Topic Models (CTM)について

    トピックモデルは 「各トピック k の間には相関がない」という前提のもとに成り立つ手法ですが、本当にトピック間に相関はないのでしょうか。「本当は相関のあるトピック」を無理やり「相関のないトピック」に分割している可能性が高いので、相関を加味したモデルが必要です。そこで、トピックの生成割合を決める際に、トピック間の相関を持つように多次元の正規分布を用います。ただし、その代わりに共役的な分布を持たないため、従来のギブスサンプリングではサンプリングが非効率になることから変分ベイズを用いる必要があります。

    PAM:Pachinko Allocation Modelについて

    CTMは各トピックが同じレベルにあるため、トピック間の階層構造を表すことができません。
    自動車にとっての、セダンやトラック、あるいはお酒にとってのワインやビールのようにトピックに関しても階層構造があることは想像に難くありません。トピック間の関係・相関を一般的に表現するモデルで、トピック間の階層構造を基本として、パチンコ玉が落ちるように単語を生成します。パチンコ玉が落ちるというのは、向きが一方行の有向かつ非巡回ノードが連想されます。分布に関しても共役なので、ギブスサンプリングでサンプリングが可能です。
    2016/04/24の段階ではまだGensimでモデルの開発はなされていないようです。
    Pachinko Allocation Model
    ちなみに、論文はこちらです。
    Pachinko Allocation: DAG-Structured Mixture Models of Topic Correlations

    Relational Topic Models(RTM)について

    文書の中身だけでなく、文書間のリンクの生成過程も同時に確率モデル化する手法。論文や特許データに対して活用できる。過去の購買行動に応じた、顧客のセグメント解析や商品のレコメンデーションに活用できるかもしれない。

    参考文献

    トピックモデル (機械学習プロフェッショナルシリーズ)
    トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ)
    Tokyo Webmining 46th 『トピックモデルことはじめ』
    machine_learning_python/topic.md

    統計数理研究所 H24年度公開講座 「確率的トピックモデル」サポートページ

    推薦システムに関する参考情報

    推薦システムとは

    情報をフィルタリングするための技術の一種
    ユーザーが次に興味を持つ情報は何か?を科学する。

    推薦システムの種類

    ・協調フィルタリング
     同じような行動を行ったユーザーの行動に基づき、まだ見ていない情報を提示する。
     Explicit Feedback
     Implicit Feedback
     コールドスタート問題
     ユーザー理解、サービス理解も重要

    ・内容ベースフィルタリング
     自分の過去の行動に基づき、見た情報などに似た情報を提示する。
     距離を定義できれば提示できる。
     質の評価を組み込むことが重要。
     分類モデルを用いることもできる。→ラベル付けされたデータをもとに統計的な手法でラベル付けをする。
     (ナイーブベイズ、ロジスティック回帰、SVM)
     →ただし、定期的なチューニングが必要。
      性能を高めるためには、次元削減も重要。

     

    レコメンドの評価指標

     基準の設置
      一定以上のユーザーがアクションしているアイテムかどうか
      信頼できる情報かどうか
     
     多様性の導入
      同じカテゴリの商品がリストに提示される個数を制限する。
      同じカテゴリを提示した個数に応じて評価値を減衰させる。

     意外性の導入(セレンディピティ)
      システムが評価したものとは一致しない情報を推薦リストに載せる。
      →この際に一致しない情報は他のユーザーがよく見ているものを選ぶと良い。

     A/Bテスト
      一部はA/Bテストを行い、一部では同じアルゴリズムを提示し続ける。
      推薦システムの長期的影響と短期的影響の両方を考慮するべき。
      システム全体に悪影響を及ぼすことがあれば本末転倒である。

    レコメンドの最先端

    T.B.A

    Rで実行するには

    RecommendarLab
    ・レコメンデーションアルゴリズム
    ・レコメンデーションの評価
    ・レコメンド用データの整形
    ・サンプルデータセットもある(5000人分のジョークに対する評価)
    Using R package, recommenderlab, for predicting ratings for MovieLens data

    参考文献

    データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

    サポートベクターマシン(SVM)のまとめ・参考文献

    今回はサポートベクターマシン(Support Vector Machine:SVM)の学習に当たって、見つけた参考文献を列挙していこうと思います。

  • ブログ系
  • R言語でSVM(Support Vector Machine)による分類学習
    無料で利用できる統計解析ソフトRを用いてサポートベクターマシンについて紹介してくれているブログです。

    SVMの定番入門書「サポートベクターマシン入門(赤本)」の読み方
    サポートベクターマシンを学習する上で役に立つ文献を紹介してくれています。

    ところでサポートベクターマシンって何なの?
    プログラムのコードと実践例が記されています。ただしコードはjavaの様です。

    SVM を使うと,なにが嬉しいの?
    サポートベクターマシンの手法としてのモチベーションが記されています。

    SVMの最大の特徴は「マージン最大化」にある

    識別境界の位置を決定する明確な基準を持っており、学習データの中で最も他クラスと近い位置にいるものを基準として、そのユークリッド距離が最も大きくなるような位置に識別境界を設定する。明確な基準を与えているということ自体、ノンパラメトリックな手法では他に例のないことで、SVMの最も優れた部分とされる。

    Rとカーネル法・サポートベクターマシン
    Rを用いたサポートベクターマシンの実践例が載ってあります。同志社大学のページなので、ちょっと信用度が高いかも。

    SVMを使いこなす!チェックポイント8つ
    ・スケーリング(特徴量の修正)
    ・カテゴリ特徴量(ダミー変数の作成)
    ・カーネル関数
    ・パラメータ
    ・クロスバリデーション
    ・不均衡データ問題(パラメータC(コスト)を大きくする、データ数を揃える、アンダーorオーバーサンプリング)
    ・多クラス分類
    ・アンサンブル学習

  • 論文・レポート系
  • サポートベクターマシン入門
    産業技術総合研究所のレポートです。大変わかりやすい記述です。

    痛快!サポートベクトルマシン : 古くて新しいパターン認識手法
    ちょっと短めで、かつ古いのですが、大まかな流れをサクッと掴むには向いていると思います。

    サポートベクターマシンによる倒産予測
    卒業論文ですね。

    企業格付判別のための SVM 手法の提案および逐次ロジットモデルとの比較による有効性検証
    http://www.orsj.or.jp/~archive/pdf/j_mag/Vol.57_J_092.pdf

  • スライド系
  • SVMについて
    2クラスの分類しか記されていませんが、きれいにまとまった資料だと思います。

    メモ

    SVM
    利点
     ・データの特徴の次元が大きくなっても識別精度が良い
     ・最適化すべきパラメータが少ない
     ・パラメータの算出が容易

    欠点
     ・学習データが増えると計算量が膨大になる
      (「次元の呪い」の影響が顕著)
     ・基本的には2クラスの分類にしか使えない