Japan.R 2016のスライドまとめ

まだ手に入れていないスライドもあるので随時更新しますが、Japan.R 2016(connpass)のスライドをまとめています。後日、登場したパッケージなどのサンプルコードも載せていく予定です。

目次

・石田基広さんのキーノート
・ホクソエムとは何だったのか(ホクソエムさん)
・Rと探索的データ分析で、国連での日本の立ち位置を可視化する(安田洋介さん)
・マウス操作でかんたん予測分析(鈴木了太さん)
・高速・省メモリにlibsvm形式でダンプする方法を研究してみた(@hskksk)
・Rでてんしょくかつどう(@Med_KU)
・RStudio vs Emacs(@y__mattu)
・randomforestで高次元の変数重要度見る(@siero5335)
・Rで本を作りたい(前田和寛さん)
・28歳でプログラミングを始めた話(市川太祐さん)
・LDA-Visパッケージのご紹介(@doradora09)
・【e2d3R】E2D3からDot-Bar-Chartのご紹介(楠本一哲さん)
・このIRのグラフがすごい!上場企業2016(@ito_yan)
・Rでカルマンフィルタをしたい(@tetsuroito)
・PPAP(仮)(@yutannihilation)
・スライド未公開、ユーザーの状態遷移に関する分析のお話(@sanoche16)
・私とR(高栁慎一さん)
・めくってもめくってもサンプル画像(服部恵美さん)
・木と電話と選挙(causalTree)(安井翔太さん)
・スライド未公開、dplyrの話(@tomomoto)
・てかLINEやってる?(仮)(@wonder_zone)
・心理学における「再現性」の問題とBayes Factor(@NSushi)

・石田基広さんのキーノート

スライド未公開です。

・Linux使い
・ヘブライ語の意味構造を代数学でやっていた
・S/R言語の生みの親はJohn Chambers
 以下の二つは最近書かれた本だそうです。
 Software for Data Analysis: Programming with R (Statistics and Computing)
 Extending R (Chapman & Hall/CRC The R Series)
・S→S-plus→Rの順番で発展
・purrrを最近使い始めたそうです。
・XLConnectパッケージを使って、大学教員の採点活動を効率化しているそうです。

・ホクソエムとは何だったのか(ホクソエムさん)

匿名技術者集団ホクソエムの2016年の成果
・densratio( densratio: Density Ratio Estimation
・githubinstall
githubinstall: A Helpful Way to Install R Packages Hosted on GitHub
・healthplanet( Wrapper package for healthplanet api
・RODBCDBI
RODBCDBI: Provides Access to Databases Through the ODBC Interface
・jpmesh( jpmesh: Utilities for Japanese Mesh Code

起業されたとのことです。懸命に頑張って下さい!
株式会社ホクソエム

awesomeな人材が必要とのことで、awesomeな方はアプライしてみてはいかがでしょうか。

・Rと探索的データ分析で、国連での日本の立ち位置を可視化する(安田洋介さん)

スライド未公開です。
国連のデータを使って、Exploratoryを用いた探索的データ分析の実演をされていました。

・マウス操作でかんたん予測分析(鈴木了太さん)

R AnalyticFlow
Rで実践!データサイエンス~初めの一歩から高度な応用まで~

・高速・省メモリにlibsvm形式でダンプする方法を研究してみた(@hskksk)

・Rでてんしょくかつどう(@Med_KU)

Rmd でreveal.js のhtml スライドプレゼンテーション

・RStudio vs Emacs(@y__mattu)

RStudio vs Emacs Japan.R 2016

・randomforestで高次元の変数重要度見る(@siero5335)

・Rで本を作りたい(前田和寛さん)

Rで本を作りたい

・28歳でプログラミングを始めた話(市川太祐さん)

・医療関連のアプリ開発でデータサイエンスを駆使しようとしているそうです。

スライド未公開です。
スライドがシェアされ次第載せます。

・LDA-Visパッケージのご紹介(@doradora09)

・【e2d3R】E2D3からDot-Bar-Chartのご紹介(楠本一哲さん)

スライドは未公開です。
E2D3をRで表示する試みのようです。
Experiments with e2d3 in R

・このIRのグラフがすごい!上場企業2016(@ito_yan)

スライド未公開です。後日シェアしていただけるようです。

・Rでカルマンフィルタをしたい(@tetsuroito)

・PPAP(仮)(@yutannihilation)

・スライド未公開、ユーザーの状態遷移に関する分析のお話(@sanoche16)

スライドがシェアされ次第載せます。

・私とR(高栁慎一さん)

RjpWiki
統計・データ解析
統計解析フリーソフト R の備忘録頁 ver.3.1
seekR(R限定の検索エンジン)
からだにいいもの
アブラタニブログってなんでしょう。油谷さんのブログ?

・めくってもめくってもサンプル画像(服部恵美さん)

Rのサンプルコードはあるけれども、どんな図ができるのかはわからない。そこで、サンプルコードとグラフを大量にまとめているサイトを作ったそうです。検索性は未知数ですが、暇なときに眺めておきたいですね。
R Graphical Manual

・木と電話と選挙(causalTree)(安井翔太さん)

・スライド未公開、dplyrの話(@tomomoto)

スライドがシェアされ次第載せます。

・てかLINEやってる?(仮)(@wonder_zone)

・心理学における「再現性」の問題とBayes Factor(@NSushi)

スライドは後日公開とのことです。

scikit-learnのモジュールのGitHubでの利用頻度を調べてみた

『Python機械学習プログラミング』を読んで、scikit-learnのモジュールは充実しているなぁと感じたんですが、実際にWebサイトでUser Guide( http://scikit-learn.org/stable/user_guide.html )を見た所、この本に載り切らないような数多くの機械学習手法に応じたモジュールが用意されていました。そこで、世のデータサイエンティストはどのモジュールを良く使っているのだろうと気になったので、GitHubのSearchでヒットしたCodeの数を各モジュール単位で集計してみました。検索クエリは「scikit-learn + モジュール名」なので、正確なものではないのですが、相対的な利用頻度を見るぶんには使えるのではないかと思われます。

データ集計方法

・User Guideに登場するscikit-learnのモジュール名を集めています。
・教師付き学習か教師無し学習かどうかの判断は、User Guideで紹介されているモジュールかどうかで判断しています。
・GitHubのSearchで「scikit-learn + モジュール名」でヒットした件数をそのまま使っています。(2016年9月22日時点)

可視化コード

Jupyterで実行しています。

教師付き学習編

圧倒的に多いのがSVM(Support Vector Machine)を扱っているSVCモジュールで、続いて定番のロジスティック回帰やRandom Forestが使われているようです。統計解析ではメジャーなはずの線形回帰が5位なのは、初歩的なのであまりコードがアップされていないのかもしれません。GBDTのモジュールももう少し上位にくるかと思ったんですが15位でした。DMLCのXGBoostモジュールを使っているのかもしれませんね。私も実際のところXGBoostを使ってますし。

supervised_module_barplot

教師無し学習編

主成分分析やK-mean法など因子分解などのモジュールが上位を占めています。LDA(Latent Dirichlet Allocation)がもっと上位に来ると思ったんですが、思えばGensimの方が充実しているなぁと思うので、このランキングは妥当なのかもしれません。私もLDAなどはGensimを使っていますし。

unsupervised_module_barplot

収集を終えて

・社内だとデータサイエンティストの方がいないので、scikit-learnのモジュールの利用状況を知れてマニアックな共感をすることができた。
・SVMは実践例が豊富そうなので分析事例を探せば良い発見があるかもしれない。
・scikit-learnのUser Guideは充実していたので、時間を作って向き合ってみたいと思った。

XGBoostのパラメータチューニング実践 with Python

以前の投稿で紹介したXGBoostのパラメータチューニング方法ですが、実際のデータセットに対して実行するためのプログラムを実践してみようと思います。プログラム自体はAnalytics_Vidhya/Articles/Parameter_Tuning_XGBoost_with_Example/XGBoost models.ipynbに載っているのですが、データセットがついていません。そこで、前回の投稿(不均衡なデータの分類問題について with Python)で赤ワインのデータセットを手に入れているので、こちらのデータセットを用います。誤植なのかところどころ、うまく回らなかったところがあったので、手直しをしています。

以下の工程に従って進みます。結構長いですが、辛抱強く実践してみて下さい。
・ライブラリの読み込み
・データの読み込み
・前処理
・学習用データとテスト用データの作成
・XGBoostの予測結果をもとに、AUCの数値を返すための関数の定義
・モデルの実行
・チューニング

ライブラリの読み込み

データの読み込み

前処理

スクリーンショット 2016-05-15 16.54.58

学習用データとテスト用データの作成

XGBoostの予測結果をもとに、AUCの数値を返すための関数の定義

XGBoostの予測結果から、AUCの数値を返し、特徴量に応じた重要度を出力するためのプログラムです。

モデルの実行

feature_importance1

チューニング

max_depthとmin_child_weightの数値をチューニングするためのプログラムです。

より細かい数値で再度最適なパラメータを探します。

max_depthを8、min_child_weightを1として、他のパラメータチューニングに移ります。
続いて、gammaのチューニングを行います。

gammaを0.4と置きます。
ここで、いままでにチューニングしたパラメータを用いて再度推定を行います。先ほどの0.875よりも高くなっています。

feature_importance2

続いて、subsampleとcolsample_bytreeのチューニングを行います。

より細かい範囲で再度パラメータをチューニングします。

続いて、reg_alphaをチューニングします。

範囲が粗かったので、より細かくパラメータをチューニングします。

これまでにチューニングしてきたパラメータを用いて再度推定を行います。

feature_importance3

ブログであるように試行回数を1,000回から5,000回まで増やしてみます。

88.8%まで向上しました。色々と数値いじっても、1%高めるだけにとどまってしまうのですね。

feature_importance4

とにかく、XGBoostをPythonで実行してパラメータチューニングするという一連の試行がこのコードでできそうなので、今後も使いまわしてみようと思います。

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です。どうやら上手く取れているようです。

XGBoostやパラメータチューニングの仕方に関する調査

【目次】
・XGBoostとは
・XGBoostで用いるパラメータ一覧
・XGBoostのパラメータチューニング
・参考文献

XGBoostとは

XGBoost (eXtreme Gradient Boosting) は勾配ブースティングアルゴリズムの先進的な実装例で、データサイエンスのコンペであるKaggleで話題となっていた手法です。

ブースティングアルゴリズムとは、弱識別器(weak learners)の集団を直列的に結合することで、予測における正確性を高めようとするアルゴリズムです。任意のt時点において、モデルの予測は以前のt-1時点での結果に基づき重み付けがなされます。正しく予測されたデータに対しては、重みを小さくし、誤って予測されたデータに対しては重みを大きくします。後で学習する識別器ほど、誤ったデータに集中して学習を進めることになります。

以下はブースティングのイメージ図です。
スクリーンショット 2016-04-24 18.40.38

STEP1では全ての学習データに対して、等しい重み付けで学習を行い、決定境界を引きます。これを弱学習器による学習と言います。このケースでは毒キノコを2つ当てており、キノコを5つ当てています。
STEP2ではSTEP1で正しく識別されたデータの重みが下げられ、誤って識別されたデータの重みが上げられています。高く重み付けがなされたデータは決定境界で正しく識別されていますが、他のデータは誤って分類されています。
STEP3においてもSTEP2と同様の傾向があります。このような弱学習器による処理を繰り返すことで識別性能を高めていきます。

最終的にはこのような決定境界を引くことができるような識別器を求めていきます。
スクリーンショット 2016-04-24 18.55.53

勾配ブースティングの勾配とは、ブースティングアルゴリズムにおけるパラメータ推定での最適化手法が勾配降下法に従っているという意味での勾配です。以上が勾配ブースティングモデルの簡素な説明です。

XGBoostで用いるパラメータ一覧

XGBoostで用いるパラメータに関して、大きく分けて3つあります。

    1.全体パラメータ・・・XGBoost全体を司る。
    2.ブースターパラメータ・・・各ステップでツリーなどのブースティングを司る。
    3.学習タスクパラメータ・・・最適化タスクを司る。

以下、3つのパラメータについて、「パラメータ名」・「デフォルトの値」・「役割」・「引数」を表にしています。

1.全体パラメータ

パラメータ名 デフォルトの値 役割 引数
booster gbtree 実行するモデルのタイプをツリーモデルか線形モデルのどちらかを指定できる。 gbtree: ツリーモデル
gblinear: 線形モデル
silent 0 モデルの実行結果を出力するかどうかを決めることができる。モデルを理解する上で、0のままにしておく方が良いとされている。 0:出力結果を表示する。
1:出力結果を表示しない。
nthread not set 並列処理のためのコア数などを指定できる。フルコアで実行したい場合は何も指定しなければ自動的にフルコアになる。

2.ブースターパラメータ

パラメータ名 デフォルトの値 役割 引数
eta 0.3 学習率を調整できる。
小さくすることで、モデルの頑健性を高めることができる。
0.01〜0.2の値になることが多いらしい。
min_child_weigh 1 子ノードにおいて観察されるデータの重み付けの合計値の最小の値で、過学習を避けるために用いられる。
高い値にすることで特定のサンプルに観察されるような傾向を学習することを避けられる。ただし、高くし過ぎるとフィッティングが悪くなる。
max_depth 6 木の深さの最大値
過学習を制御するために用いられる。
高いと過学習しやすくなる。
3〜10の値になることが多いらしい。
max_leaf_nodes 木の終端ノードの最大値
max_depthの代わりに用いる
n本を指定したら、n^2個の枝を生み出す。これが指定された場合は、max_depthは無効化される。
gamma 0 分割が、損失関数の減少に繋がる場合にのみノードの分割を行う。
モデルをより保守的にする。
値は損失関数に応じて大きく変わり、チューニングが必要である。
max_delta_step 0 各木のウェイトの推定に制約をかけることができる。
0の場合は制約なしで、正数値を取るとモデルがより保守的になる。
通常は必要とされないが、不均衡データの分類の際に用いる。
subsample 1 各木においてランダムに抽出される標本の割合
小さくすることで、過学習を避けることができるが保守的なモデルとなる。
0.5〜1の値になることが多いらしい。
colsample_bytree 1 各木においてランダムに抽出される列の割合 0.5〜1の値になることが多いらしい。
colsample_bylevel 1 各レベル単位での、分割における列のsubsample比率
subsampleとcolsample_bytreeで十分なので、あまり使わないが、探索してみるのも良いかもしれない。
lambda 1 重みに関するL2正則化項
多くのデータサイエンティストは使わないが、過学習を避けるためには用いられるべき。
alpha 0 重みに関するL1正則化項
高次元の場合に用いるらしい。
scale_pos_weight 1 不均衡データの際に、0以上の値を取ることで、収束を早めることができる。

3.学習タスクパラメータ

パラメータ名 デフォルトの値 役割 引数
objective reg:linear 最小化させるべき損失関数を指定する。 binary:logistic→2項分類で確率を返す。
multi:softmax→多項分類でクラスの値を返す。
(num_classでクラス数の指定が必要)
multi:softprob→softmaxと同じだが、確率を返す。
eval_metric according to objective 検証を行うためのデータの評価指標 rmse – root mean square error
mae – mean absolute error
logloss – negative log-likelihood
error – Binary classification error rate (0.5 threshold)
merror – Multiclass classification error rate
mlogloss – Multiclass logloss
auc: Area under the curve
seed 0 ランダムなシード番号。
再現可能なデータを生み出すために、あるいはパラメータチューニングの際に用いる。

 

 

XGBoostのパラメータチューニング

複数のパラメータからなるXGBoostのチューニングは非常に複雑で、理想的なパラメータについてはケースバイケースで何とも言えないそうです。

参考文献のブログにパラメータチューニングの一般的アプローチについて触れられていたので、紹介します。

    1.相対的に高い学習率を選択する。
    一般的な学習率0.1はうまくいくが、ケースによっては0.05から0.3の間でもうまくいく。学習率を求めるために、クロスバリデーションによって最適な木の数を決定する。
    2.木に関するパラメータをチューニングする。
    固定された学習率や木の数のもとで、max_depth, min_child_weight, gamma, subsample, colsample_bytreeをチューニングする。
    3.正則化パラメータをチューニングする。
    lambda, alphaなどのパラメータをチューニングすることで、モデルの複雑さを減らし、パフォーマンスを高める。
    4.学習率を下げ、最適なパラメータを決定する。

具体的な実行に関するPythonスクリプトはこちらのGithubで紹介されています。(iPython)
Analytics_Vidhya/Articles/Parameter_Tuning_XGBoost_with_Example/XGBoost models.ipynb
この方法に従って、自社で抱えているモデルのチューニングにチャレンジしてみようと思います。

参考文献

Quick Introduction to Boosting Algorithms in Machine Learning
Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python
Complete Guide to Parameter Tuning in XGBoost (with codes in Python)
勾配ブースティングについてざっくりと説明する
xgboost のパラメータ
OS X で XGBoost & xgboost4j をビルドする手順 2016-03-07 版

GensimのHDP(Hierarchical Dirichlet Process)をクラシック音楽情報に対して試してみる

HDP(Hierarchical Dirichlet Process)いわゆる階層ディリクレ過程を実行できるモデルがPythonのGensimライブラリにあるという情報から、あまり実行例も見当たらないので、チャレンジしてみました。

HDP(Hierarchical Dirichlet Process)

HDP(Hierarchical Dirichlet Process)は文書集合全体のトピック数と文書ごとのトピック数の推定を行うことができる手法で、中華料理店フランチャイズという仕組みを用いています。通常のLDAなどでは、分析者が任意のトピック数を決める必要がありましたが、与えられたデータからその数を推定するため、その必要がないというのがHDPを使うことの利点であると思われます。

実行までの流れ

ざっくりですが、
・コーパスの準備・文書の分かち書き(名詞のみ)
・HDPの実行
という流れです。

ちなみに実行環境は
MacBook Pro
OS X Yosemite 10.10.5
2.6 GHz Intel Core i5
メモリ8GBです。

コーパスの準備

今回は、以前手に入れた某辞典サイトのクラシック音楽情報1800件のテキストデータ(1行に1件分の文字列が入っているデータで16MBくらい)があるので、それをコーパスとして使います。参考情報として挙げているブログの助けを借りて、文書単位でMeCabにより形態素解析で分かち書きした結果から、意味を持ちやすい品詞として、「名詞」に該当するもののみを結果として返す以下のPythonスクリプトを用いました。結果はtmep.txtとして出力されます。もっと良いやり方があると思いますが、目的は達成できると思います。ちなみに、MeCab Neologd(ネオログディー)という、固有名詞などに強いシステム辞書を活用してみたかったので、その利用を前提として書いています。MeCab Neologd(ネオログディー)のインストール関連の情報は参考情報にありますので、チャレンジしてみてください。(OSXかUbuntuの方が進めやすいと思います。)

こちらのスクリプトをターミナルで実行します。(解析するディレクトリ下で実施しています。)

HDPの実行

以下のPythonスクリプトで実行しています。

HDPの結果について

topic_detail.csvの結果を見たところ、トピックの数が150個もあって、「本当にトピックの数を自動で決めれているのかなぁ」と不安に思ったのですが、実際に各文書に割り当てられているトピックの数は、先ほど出力したtopic_for_corpus.csvで見ると60個でした。そのため、今回、HDPに従って決まったトピック数は60ということになります。さらに不安に思ったので、Stack Over Flowで調べていたんですが、トピックは150個出るけど確率が割り振られていないはずと回答されていました。( Hierarchical Dirichlet Process Gensim topic number independent of corpus size

出現頻度の高い上位10のトピックは以下の通りです。

加えて、トピックごとに文書に割り当てられた数を集計してみましたが、topic0が圧倒的に多く、コーパスの特性上、含まれやすい情報がここに集まっているのではないかと思います。幅広いテーマを抽出できるかと期待していたのですが、やたらと個別具体的な「トゥーランドット」や「ワーグナー」や「カルメン」などがトピックの上位単語に上がってきています。実行方法を間違えているかもしれないし、パラメータチューニングなどをもっと頑張れば、幅広いトピックを得ることができるかもしれないので、今後の課題としたいです。

スクリーンショット 2016-04-10 18.23.37

参考情報

・トピックモデルについて
machine_learning_python/topic.md at master · poiuiop/machine_learning_python · GitHub

・HDP関連
 models.hdpmodel – Hierarchical Dirichlet Process
Online Variational Inference for the Hierarchical Dirichlet Process

・MeCab関連
mecab-ipadic-NEologd : Neologism dictionary for MeCab
形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介
テキストマイニングの前処理。名詞抽出、ストップワード除去、珍しい単語の除去

・Python関連
データ分析をやりたいエンジニアにおすすめ!Pythonの入門スライド13選

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)について

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

    参考文献

    『トピックモデル』( http://www.amazon.co.jp/dp/4061529048 )
    『トピックモデルによる統計的潜在意味解析』( http://www.amazon.co.jp/dp/4339027588 )
    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クラスの分類にしか使えない