【Rで機械学習】LSTM-RNNを仮想数列で実験してみる。

前からなんとなく気になっていたLSTM-RNN。
LSTM-RNN(Long short-term memory Recurrent Neural Network)とは・・・なんて話をしだすときりがないので、以下のリンク先をみてください。

qiita.com

qiita.com

要は時系列データを学習するニューラルネットワークの一種なんだけれども、学習させるデータが長すぎたりするといろいろ問題が起こるので、「忘れる」という状態も組み込んだ学習モデルにしよう、というもの。リンク先にもあるように、近年、機械翻訳など、自然言語処理の分野で目覚ましい成果を挙げているそうで、テキストマイニングでごにょごにょやっている人間としてはいつか手をだしてみよう、と思っていたものです。
で、ようやく時間ができたのであれこれ試してみよう、と思い立ち、いつも参考にさせてもらっているこちらを見ながらあれこれ考えてみました。

tjo.hatenablog.com

ひとまず例示にあるような、文章を学習させるモデルを考えたのですが、すでに実験されているように、夏目漱石の上記の例でもなかなか良い予測ができず、自前で宮沢賢治の文章を用意してやってみたりしたのですが、それもいまいち。やっぱり大量に学習データがないとだめなのかなぁ、と考えていたところ、ふと、余計なことをひらめきました。

というわけで今日のお題です。

続きを読む

【Rで自然言語処理】Term-co-occurrence matrixから距離行列とグラフをつくる実験

前にこんな記事を書きました。

wanko-sato.hatenablog.com

構文解析の結果から語のつながりを抽出して意味あるいは概念のネットワークを構築しよう!というアイディアです。が、進んでいません。というのも。

KNPの結果の解析がめんどくさい。

というごくごくしょーもない理由だったりするわけです。
じゃあ、別の入り口はなかろうか?と考えていたときに、お気に入りパッケージ"text2vec"のTerm-co-occurance matrixが面白いことに使えそうな気がしてきたので、ちょっと実験してみた、という話です。

続きを読む

【R】数字の集合をトピックモデルで分析したらなかなか良くてびっくりした話。

前回、疎行列をクラスタリングする話を書きました。

wanko-sato.hatenablog.com

そこでふと思いついたのが、「数字の羅列を単語の集合とみなして自然言語処理のスキームに当てはめられるんじゃね?」ということです。どういうことかというと、

[[1]]
 [1] 246 308 149 170 161 233 291 218 260 171 155 151

[[2]]
[1] 383 331 353

[[3]]
[1] 310 333

[[4]]
[1] 255 247 223 284

こんな感じのデータがあるとします。個々の数字はなんでも良いのですが、例えばこれがある消費者の買った商品IDの集合だとします。通常は、前回書いたとおり、これを主成分分析にかけたり、クラスタリングしたり、あるいはあらかじめ属性がわかっていれば教師あり学習させてみたり、といろいろ思いつくわけなんです。が、じゃあ、この商品IDを「単語」とみなしてトピックモデルで分析したらうまくクラスタリングできるのだろうか?というのが今回のモチベーションです。
そもそも、トピックモデルは自然言語処理のスキームの中に位置づけられるわけなんですが、トピックモデルって大きく考えれば「カテゴリカルデータの分析」なわけで、カテゴリカルデータで良いのなら単語である必要もなく、ならば上記のような消費者の購買データのようなものでも良いよね、となるわけです。

続きを読む

【R】スパースな行列をクラスタリングする

仕事で「超スパースな行列」を扱う必要が出てきまして。生のままで扱うとメモリが足りなくなってしまい、さてどうしたものかと思い悩んでおりました。SASでも扱えないことはないんだけれど、計算にアホほど時間がかかるので、Rで疎行列として扱ったらどうだろうか、と思い至ったわけです。
データセットのイメージとしては、「1,000アイテムを扱っているネットショップの、10,000人の購買者データ」です。購買者IDと買ったアイテムの番号の2列になっていて、各購買者は複数の行で構成されています。それを単純に「アイテムを購入したorしていない」という行列に展開すると、1,000×10,000、つまり一千万の要素を持つ行列になってしまいます。でも、各購買者は平均で3~4アイテムしか購入していないので、データが入る要素はたかだか3万~4万です。だとしたら、疎行列(Sparse Matrix)として扱った方が良い。

というわけでやってみました、というのが今日の話。

続きを読む

【自然言語処理】単語変換テーブルが必要になったので作る。そしてちょっと間違える。

text2vecでベクトル化したあと、どうしたら面白いことができるか?を考えているのですが、それ以前の問題にぶち当たってとりあえずの解決方法を思いついたので記録に残します。

続きを読む

【統計検定】勉強用の書籍の紹介

以前、統計検定準一級を受けるぞ、ということで参考にしたサイトとこれから勉強するために読むべき本を紹介しました。

wanko-sato.hatenablog.com

ここで紹介した本のうち、東京大学出版会の2冊を読み終えて、さて次はどうしようかと考えているところです。

統計学入門 (基礎統計学)

統計学入門 (基礎統計学)

自然科学の統計学 (基礎統計学)

自然科学の統計学 (基礎統計学)

統計検定準一級の出題範囲および過去問を見ると、そこまで深い数理統計の知識は求められていないように思います。むしろ、幅広くいろいろな確率分布を使って種々の検定を電卓で行えることが求められているように思うのです。ですから、自然科学の統計学 (基礎統計学)はたしかに確率分布からベイズ推定、マルコフ連鎖、乱数まで幅広くカバーされていますが、数理的な説明に重きが置かれていて若干わかりにくいようにも思うのです。
そこで、個人的に追加でこんな本はどうかな、というのを3冊ほど挙げていきます。

数理的な基礎を学びたい人のために

この本の前半はほぼ確率分布の導出に割かれています。そのぶん丁寧ですので、東京大学出版会の本の説明で不足を感じるようでしたらお勧めです。また、ほかの本ではあまり見かけない「中心極限定理の証明」が丁寧に説明されています。そこだけでも価値があるんじゃないかと。
後半には信頼区間や検定の話が出てきますが、検定関連の話はそれほど突っ込んでいません。分散分析に関する記述がないので、この本だけで統計検定準一級を受けるのは無謀でしょう。あくまでも数理的な基礎の補強という位置づけになると思います。
最後の方に何気にマルコフ連鎖が出てくるので、その点でもは良いでしょう。

ベイズ推定の入り口に

基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

統計検定準一級の出題範囲にベイズ推定が含まれています。ハミルトニアンモンテカルロ法(HMC法)は対象ではないのでこの本の全体は必須ではありませんが、前半の確率分布から最尤法、事前分布、事後分布、共役事前分布などの説明は個人的にわかりやすいと思っています。後半はほとんどHMC法を使った実例なので、前半をしっかり読み込むと、ベイズ推定に関する理解が一歩進むんじゃないかと思っています。
ちなみに、マルコフ連鎖ベイズ推定は密接な関係にあるので、この本でもマルコフ連鎖の話は出てきます。

種々の検定の詳細を知りたい人のために

心理学のためのデータ解析テクニカルブック

心理学のためのデータ解析テクニカルブック

大学の時に使っていた本がうちにあったのでさらっと眺めてみたらけっこう使えそうだったので。
確率分布の話はほとんど出てこず、t検定やχ二乗検定、分散分析、因子分析等の各種検定の詳細が実例とともに紹介されています。東大出版会の本は検定に関する記述が理論に偏りすぎて実例が少ない感じがするので、人によってはわかりずらいんじゃないかと思っています。その実例を補強するのに、この本あ使えるのじゃないかと。
もしかしたら、

人文・社会科学の統計学 (基礎統計学)

人文・社会科学の統計学 (基礎統計学)

これとかぶるところがあるのかもしれません。こちらはまだ読んでいないのでなんともいえないのですが。

あとは問題集的なものがあるといいなー、と思っているのですが、とりあえずはこんなところで。

【統計】仮説検定のロジックを追いかける(2)αエラーとβエラー

前回、工場における抜き取り検査を例にとり、二項分布における仮説検定のロジックを追いかけてみました。

wanko-sato.hatenablog.com

簡単に振り返ってみましょう。
例題は次のような設定でした。

1日の終わりにn=100個の製品を抜き取り検査し、その中の不良品の数XX\geqq3の時製造工程に異常があるのではないかと判断して調査をし、X=0,1,2の場合には正常の状態であるとしてそのまま翌日の操業を続けるものとしよう。

(自然科学の統計学 p178より)

ある製造ラインの不良率が1%と仮定すると、その製造ラインから100個サンプリングしたときに不良品が抽出される確率は二項分布Bi(100,0.01)に従います。100個のサンプリング中に不良品が含まれる確率を各不良品数で計算していくと

不良個数 確率
0 0.366
1 0.370
2 0.185
3 0.061
4 0.015
5 0.003

このようになります。ここで、3個以上不良品が混ざる確率は不良品個数3以上の累積確率で計算でき、およそ7.9%になります。ここから

7.9%の確率でしか起こらない事象はめったに起こらないのだから、そもそもの仮説である「製造ラインの不良率は1%」という仮説が間違っているのだろう。

という結論を導くことになり、結果、製造工程に異常がある、と判断されるのです。
この7.9%の正体を探るのが今回の目的です。

続きを読む