Hatena::ブログ(Diary)

アイアナ:データ分析や人工知能(AI)などの技術雑記

2009 | 11 |
2010 | 02 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 03 | 04 | 05 | 10 | 12 |
2013 | 01 | 02 | 04 |
2014 | 03 | 12 |
2016 | 03 |
2017 | 10 |

2011-07-23

統計・解析ビジネスユーザー必読のデータマイニング

久々の更新です。前々から注目していた『Data Mining and Statistics for Decision Making』が届きました。ちょっと読んだだけでも、ここ数年で一番の応用本だと感じました。単なる応用本ではなく、解析やデータマイニングがビジネスに利用されることを非常に強く意識されている内容です。


Data Mining and Statistics for Decision Making (Wiley Series in Computational Statistics)

Data Mining and Statistics for Decision Making (Wiley Series in Computational Statistics)


見出しを読むだけでも素晴らしいのが分かります。おしゃれStatistics勉強会で使っている『Statistics』が統計学の基礎で、このデータマイニング本が応用といったところでしょうか。特に良いなと思ったのは、様々なモデルの利点と欠点が書いてあるところ。どんなデータにも当てはまる万能なモデルはあり得ないので、手法毎にメリット・デメリットを知っておく必要があります。それがまとまっているのはとても良いですね。最後のテキストマイニングウェブマイニングは奥が深いので、さすがにさらっとしか書いてませんが、導入には十分かなと思います。解析ソフトも、今や3大ブランドのSPSSSAS・Rの実例が多く、比較もあるのも好感を持てます。


以下、トピックを流し読みしながら行ったメモです。


【対象データ】

  • CRM (customer relationship management)
  • RFM (recency, frequency, monetary)
    • where?, when?, how?, how mach?, what?
  • SNS
  • web
    • CLF (common log format), XLF (extended log format)

【解析ソフト】


手法


【興味深いトピック】

2011-07-10

統計学を勉強するときに知っておきたい10ポイント

googleさんやマイクロソフトさんは「次の10年で熱い職業は統計学」と言っているようです。またIBMは分析ができる人材を4,000人増やすと言っています(同記事)。しかし分析をするときの基礎的な学問は統計学ですが、いざ統計学を勉強しようとしてもどこから取りかかればいいか分からなかくて困るという話をよく聞きます。それに機械学習系の本は最近増えてきましたが、統計学自体が基礎から学べる本はまだあまり見かけないです。

そこで今回は、統計学を初めて勉強するときに知っておいた方が良い10ポイントを紹介したいと思います。



1. 同じ手法なのに違う呼び名が付いている

別の人が違う分野で提案した手法が、実は全く同じだったということがあります。良く聞くのは、数量化理論や分散分析についてです。

  • 数量化理論
    • 数量化I類 = ダミー変数による線形回帰
    • 数量化II類 = ダミー変数による判別分析
    • 数量化III類 = カテゴリ変数の主成分分析(=コレスポンデンス分析)
    • 数量化IV類 = 多次元尺度法

数量化理論についてはwikiにまとまってます。分散分析は実験計画法で良く出てきますが、平方和の分解をして要因の効果を検定するものです。平方和の分解は線形回帰モデルの最小二乗法と全く同じ数式になるため、実はカテゴリ変数での線形モデルと分散分析は全く同じなのです。

あとただ単に違うネーミングをしている同じ手法もあります。

  • 変数増減法 = ステップワイズ法


2. 似た名前なのに全く違う概念を示す

今度は似たような名前なのに全く違う意味を表しているものです。

コホート研究は疫学の分野などで利用されている、いわゆる追跡調査です。コウホート分析は断面データから経時の効果を推定する方法のようです。ランダムサンプリング母集団からサンプルをランダムに抽出する方法で、ランダム化はある集団をランダムに割り付けを行う方法です。ランダムサンプリングは調査、サーベイ目的で行われるのに対して、ランダム化は介入効果を検証するために行われます。



3. 日本語訳が微妙に違う

これは日本語に訳す際にどうしても起こってしまう事ですが、微妙に表現が違うと「あれ、自分が知っているものと違うのかな?」と思ってしまいます。

  • cross validation → 交差検証、交差検定
  • logistic regression → ロジスティック回帰、ロジスチック回帰
  • survival analysis → 生存時間解析、生存分析
  • training data → 学習データ、訓練データ、教師データ
  • dimension reduction → 次元縮小、次元縮約
  • approximation → 近似計算、近似推定、接近法
  • probability → 確率、可能性、蓋然性

もとの英語を知っていれば、混乱する事も少ないかなと思います。



4. ○○尺度という呼び方を使わなくても解析上は対応できる

尺度水準は主に社会学系で使われますが、理解に悩まれる方も多いようです。これらの尺度は、解析上は次のように分類できます。

多分、尺度水準は解析の目的で付けられた名前じゃないんだと思います。ですので最初のうちは、解析目的で分類している↓の呼び方から覚えると良いと思います。



5. 「分布」「検定」から学ぶより、実際にデータを解析した方が学習効果が高い。ベイズの概念も後回し。

統計学は理論から発展してきたのではなく、実際にデータを扱いながら発展してきました。ですので学ぶときも理論から入るよりも解析から入った方が学習効果が高いです。分布や検定を勉強するのは後回しにして、いろんなデータを解析しながら勉強していきましょう。解析しながら学ぶという意味では次の本がとても良いのです(以前は『Rによる統計解析ハンドブック』を紹介していましたが、こちらの本の方が初心者向けで詳しく書いてありました)。

統計学:Rを用いた入門書

統計学:Rを用いた入門書


また統計学で良く聞く「ベイズ統計」ですが、確率の考え方がかなり違いますので最初は概念をあまり考えない方が得策かもしれません。ただベイズ統計実用上はとても有用ですので、計算方法として学ぶのが良いと思います。例えばGmail迷惑メールフィルタに使われていると言われている、「新しいデータが観測されたらパラメータを逐次的に更新できる」などのように、実際に使われている部分から学習すると良いですね。ベイズ実用書はこの本が良かったです。

ベイズな予測―ヒット率高める主観的確率論の話

ベイズな予測―ヒット率高める主観的確率論の話


基礎が出来ていれば、どんな計算手法もベイズに応用することができますので、まずは頻度論とか線形モデルから勉強されるのが良いと思います。



6. 回帰モデルの「説明される側」と「説明する側」の呼び名を統一する

回帰モデルを作るときは、どの変数を説明するためにどの変数を使うかを決めるわけですが、その変数の呼び名はたくさんあります。例えば、「独立変数」「予測変数」「説明変数」「応答変数」「従属変数」「結果変数」などです。どれが説明する側(X)で、どれが説明される側(Y)か分かりますでしょうか?答えは前半3つがXで後半3つがYです。ですので、それぞれの人がイメージしやすい呼び名に統一すると良いと思います。さらに他の人が違う呼び名を使っているときに、瞬時に脳内変換できるようになればなお良いですね。私は、説明する変数は「説明変数」、説明される変数は「結果変数」で統一しています。



7. 初学者にお勧めできる日本語の書籍

冒頭にも書いたように日本語の書籍は少ないですが、いくつかお勧めを紹介しておきます。

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

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

この本はかなりの良本です!解析方法の深いところまでは勉強できませんが、統計学の基礎は分かるかと思います。またこのシリーズで「自然科学統計学」や「人文・社会科学統計学」という本も出ています。


宇宙怪人しまりす医療統計を学ぶ (岩波科学ライブラリー (114))

宇宙怪人しまりす医療統計を学ぶ (岩波科学ライブラリー (114))

この「しまりす」本はエッセイ的に書かれているので文系の方も読めると思います。「比・率・割合」の学問的な違いから「ランダム化試験とは?」という統計学の本質まで分かりやすく書いてあるので、かなりお勧め致します。


カラーイメージで学ぶ統計学の基礎

カラーイメージで学ぶ統計学の基礎

本のタイトルになっているように、絵をふんだんに使って説明されています。初めて学ばれる方が「分布」などのイメージを付けるにはかなり良い本だと思います。

洋書ではお勧めしたい本はいっぱいあるのですが、、、日本語の書籍はまだ数が少ない印象です。「統計に騙されるな」といった内容の本は良くみかけますが、正しい知識を持っていれば騙されることも少ないですよね。不用意に不信感を煽るのは良くないと思います。。



8. 分散分析で出てくる「一元配置」とか「乱塊法」の意味

分散分析は古くから使われている手法ですので、言い方が馴染みにくいものもあります。ですが意味が分かればそんなに難しい手法ではありません。「一元配置」とかの「元」は変数の意味です。「要因」も変数と同じ意味です。一元配置分散分析は、カテゴリ変数が1つでカテゴリの水準が多数ある場合に、結果との関連を調べる手法です。「1変数分散分析」という表現に脳内変換すると分かりやすいかもしれません。「二元配置」だったらカテゴリ変数が2つあるわけですね。

また「乱塊法」は「ブロックランダム化」の事です。これは字が難しいだけで、実は読んで字の如くなのですが。。特にサンプル数が少ないときは、単純ランダム化で割り付けをすると偏ってしまう可能性もあるので、ブロックを使って割り付けが均等になるようにする方法です。デモグラフィック変数(背景変数)の層ごとに均等な割り付けを行うときは「層別ランダム化」をしますが、その際にも使われるようです。



9. 「多変量解析」は色んな意味を指す

多変量解析という言葉はいろんなところで使われますが、全く違う方法を指すこともあります。例えば、

などの意味で使われます。「多くの変数を持つデータ」に対する分析という意味で多変量解析と呼ばれるのだと思いますが、「多変量解析をして欲しい」と言われて引き受けると、結局どんな解析をしたら良いのか分からなくなることもあります。そんな時は解析の依頼者と密に打ち合わせをする必要がありますね。



10. 統計学を学べるコミュニティ

日本には大学に「統計学部」が無いので統計学を学ぶ機会が極端に少ないです。海外では「department of statistics」が数多くあるので、そこで学んだりそこから派生して学ぶ場もあると聞きます。しかし日本では統計学を学ぶコミュニティは次のようなものがありますので、是非ご活用下さい。分からない事は分かっている人に聞くのが一番!

Rのコミュニティは各地で開催されているようですので、近くで開かれたときに参加されると良いかと思います。おしゃれStatistics(略称:おしゃスタ)は私が主催している勉強会です。おしゃスタは月に1回くらい、平日の夜に開催しています。ツイッターGoogleグループを通してATNDで告知を行っていますので、ご都合の付かれる方は是非ご参加下さい。TokyoWebmining統計学部の方は、@hamadakoichiさんが主催されているTokyoWebminingという勉強会で、連載の形で統計学について話をさせて頂けることになりました!以前記事にしました「ぼくのかんがえたとうけいがくぶ」に沿って講義しようと思っています。


海外の企業に負けないようにどんどんデータ分析できるようなスキルを身につけれるよう、統計学の基礎知識も磨きたいものですね!


【追記】

11. 「母集団」や「母数」って?

母集団の英語は「population」ですので、本当は単なる「集団」です。ランダムサンプリングしてデータを得たのであれば、そのデータの元となった集団の事。そういう意味を込めて、母という言葉を付けたんだと思います。統計学はサンプル集団から全体の特徴を推定する学問なので、母集団という言葉が良く出てきます。英語では「source population」という言葉があるので、本来は「源集団」などが適切な言い方なのかもしれません。また「母数」という言葉も出てきますが、これは推定したい「パラメータ」の事ですので全く違う概念ですね。。こっちはどうして母を付けているのか不明です。初心者のうちに母集団の母数を推定する」とか言われるともうパニックですよね。



12. 英語のお勧め本

英語のお勧め本も書いておきます。

Statistics

Statistics

海外の授業でも使われている教科書のようです。平易な英語で、初学者でも分かりやすく書いてあります。統計学で最も重要な問題の1つである「交絡」についても、実際に起きた例に沿って説明してあるので良いですね。おしゃれStatisticsでもこの本を使っています。


Applied Regression Analysis (Wiley Series in Probability and Statistics)

Applied Regression Analysis (Wiley Series in Probability and Statistics)

回帰に関する内容がとても詳しく説明されています。最小二乗法の幾何学的な解釈などを、図を使って分かりやすく説明されてたりします。多重共線性についても触れてあります。


「Statistics」よりも理論的な事が書いてあります。医療分野での統計学と書いてありますが、様々な分野で使われる基本的な方法が多いですので、医療分野の方でなくても勉強になるかと思います。一応、訳書も出ています。あと確か第5版が出たという話ですが、探しても見つからないですね。。



13. 尤度と最尤法の実用的な意味

尤度についても最初は概念はあまり深く考えず「最尤法」というツールとして利用できるようになれば十分だと思います。確率関数と尤度関数は数式上は全く同じ形をしていますが、重要なのは数式の中でどの変数が固定されてて、どの変数が自由に動けるのか?ということです。確率関数ではパラメータが固定されていて、変数Xが動きます。尤度関数では変数Xが固定されていてパラメータが変動します。最尤法は変数Xが固定されている状態で、尤度が最大になるパラメータを求める方法なのです。尤度が最大になる点というのは、尤度の微分が0になるところなので、そこが求めるパラメータとなるのです。



14. 数式にはスカラーベクトル、行列が混在している

統計学の教科書や論文に出てくる数式は、スカラーベクトル・行列が混在しています。どの変数がどうなっているのかを常に意識しておかないと、すぐに数式が追えなくなってしまいます。例えば線形回帰の例では、

  • Y = Xβ + e

のように書けますが、それぞれどうなっているか分かりますでしょうか?Y、β、eはベクトルでXは行列です(切片の無い単回帰の場合はXもベクトルになりますが)。さらにベクトルや行列は次元がありますので、次元をメモしながら数式を追うと分かりやすいですね。行列計算に関する教科書は英語ではこれがお勧めです。

Matrix Algebra for Applied Economics (Wiley Series in Probability and Statistics)

Matrix Algebra for Applied Economics (Wiley Series in Probability and Statistics)

日本語の本は、、、また探しておきます。



f:id:isseing333:20110714115401p:image

Statistics-Based Consulting ~ iAnalysis~

2011-07-08

おしゃれStatistics II を開催しました!

お陰様で、おしゃれStatistics IIを開催することができました!!

20人弱の方が参加して下さり、とても楽しい会となりました。

皆さんいろいろ質問して下さり、どれも本質を突くような良い質問ばかりでした。


それでは、今日出た議論を記録しておきます。

使った資料はこちらです↓

http://www.slideshare.net/isseing333/ii-8523815


  • エビデンスってどういう意味で使う?
    • 「証拠」「信頼性」「客観性」のようなニュアンスで使っています。「真の効果」に近い結果が出る試験はエビデンスが高い、「真の効果」にバイアスが入った結果が出やすい試験はエビデンスが低いと言っています。

  • 「名義尺度」「順序尺度」「間隔尺度」「比率尺度」って何?
    • 基本的には質的変数、量的変数(連続・離散)の区分でデータ解析は対応できるので使う場面は少ないです(私は今まで必要になったことは無いです)
      • 名義尺度:カテゴリ→質的変数
      • 順序尺度:数値に順序はあるけど、間隔は一定でない→質的変数 or 離散変数
      • 間隔尺度:数値に順序があって間隔が一定→離散変数
      • 比率尺度:数値に順序があって乗除することに意味がある→連続変数
    • 議論の余地がある尺度らしいですby wiki

  • 心理学などの調査票データはどうやって解析する?
    • 「1. とてもそう思う」〜「5. 全くそう思わない」みたいな調査票も、単純に離散変数と考えて分析することが多い
    • 因子分析とか回帰モデルとか
    • 本来はカテゴリなのに量的変数と扱うのは気持ち悪いけど、他に良い方法が無いのでは

  • ヒストグラムの幅はどうやって決める?
    • 何か式はあるらしいけど、視覚化のツールなので「データをうまく表現できてそう」レベルで決めていいのでは?
    • 解釈しやすい(区切りが意味のある)幅にする
    • 狭すぎると山がいくつも出て来てしまうが、小さい山は気にしない。大きな山(傾向)を掴む
    • 幅がバーによって変わっているヒストグラムもあるけど、解釈しにくいのでお勧めしません


  • ヒストグラムでチェックすべき事は?
    • 分布の位置と広がり方
    • 左右対称か右に歪んでいるか左に歪んでいるか
    • 山の数:1峰性か2峰性か

  • 箱ひげ図はどういう使い方をする?
    • いくつかの群を並べて、中央値とばらつきを比較できる
    • 箱の上下は四分位偏差なので、箱の中に50%が入っている

  • 「交絡」の日本語的な意味は?
    • 何でしょうね、、、「からみあっている?」英語では「confounding」なので「混乱させるもの」みたいな意味です
    • 「真の効果をゆがめる因子」という意味です

  • 「交絡」を調整する方法は?
    • 回帰モデルに説明変数として入れて調整、偏相関係数
      • これらが一番オーソドックス
    • 傾向スコア、操作変数
      • 理論的には素晴らしいが、解釈が悩ましい結果がでる事が多い
      • 信頼区間が広くなる、パラメータの正負が逆転する
    • 「これさえやれば調整できます!」というものではなくて、出た結果の吟味が重要

  • サンプル調査の「2,000人くらい集めれば良い」説って何?
    • 性別2×年代7 = 14カテゴリで、1カテゴリ150人くらいだとちょうどそれくらいの数になるけど、、特に統計学的な根拠は無いです


  • サンプルサイズ設計について
    • 介入の効果を確かめたい(AB test)
    • まず目的を定めて、それを達成するために必要なサンプル数を計算する
    • A群とB群でどれくらいの差が見込めるか?を事前に決める
    • 差が大きければ少ないサンプルで効果を証明できるし、差が小さければ多くのサンプル数が必要
    • 設計されたサンプル数でランダム化試験を行う

  • ランダムサンプリングとランダム化は言葉は似ているけど全く違う概念
    • ランダムサンプリング
      • サーベイを行うために、母集団から「ランダムに」サンプル集団を取ってくる
      • 実際はランダムにとってくる事は結構難しい
    • ランダム化試験
      • ある介入効果を確かめるために、ある集団をランダムにいくつかの群に分けてそれぞれ異なる介入を行う
      • 介入後の群間差が、異なる介入の効果
      • 事前にサンプルサイズ設計を行って、リクルートする目標サンプル数を決めておく
      • 途中での脱落も見込んで多めに設計しておく
      • 「脱落するかしないか」もランダム化されるので、脱落によるバイアスはないと考える
      • 脱落やコンプライアンスを補正する手法は一応ある(因果推論)

2011-07-06

一般化線形モデルについて

教科書:統計モデル入門 〜回帰モデルから一般化線形モデルまで〜

一般化線形モデル入門 原著第2版

一般化線形モデル入門 原著第2版

論文:Nelder and Wedderburn (1972)…一般化線形モデル、McCullagh and Nelder (1989)…擬似対数尤度



今日は一般化線形モデルについてまとめておきます。



【導入】

  • 一般化線形モデルはGLIM(ぐりむ)
  • 一般線形モデルはGLM(じーえるえむ)
  • 一般化推定方程式はGEE(じーいーいー)
  • 結果変数(outcome)…予測したい変数
    • 別名:応答変数(response)、従属変数(dependent)→「結果変数」と脳内変換
  • 説明変数(exploratory)…結果変数を説明する変数
    • 別名:予測変数(predictor)、独立変数(independent)→「説明変数」と脳内変換

統計モデル入門』P4

線形重回帰と共分散分析・分散分析の区別は人為的なものである。これらの方法は密接に関係しているので、最近(1990年)はそれらすべての問題に対して同じ計算ツールが使われるのが普通である。重回帰とか一般線形モデル(GLM)という用語は、1つの連続的な結果変数と複数個の説明変数の関係を分析する種種の方法を包括して用いられる。」


要するに、線形重回帰・分散分析・共分散分析・GLMは同じですよ、ということ。


例えば、R→glm()関数SAS→proc genmodという同じツールで全てできます。

分散分析や線形モデルを一緒に勉強すると混乱するのでGLMとしてまとめて学んだ方が良いのではないかと思います。




これから一般化線形モデルの話に入りますが、まず一番大事なこと。


GLIMは「指数型分布族の線形モデル」です。




【モデルの形】

イメージ:h(結果変数) = 説明変数の線形和 + 誤差

「結果変数をリンク関数hで変数変換したものが、説明変数の線形和+誤差になっている」



1. 誤差分布

結果変数の誤差がどのような分布に従っているか?

どれも指数型関数族(exponential family)の分布であるので、モデルを統一的に表現できる。


2. リンク関数

説明変数の線形和が結果変数の期待値とどのように関連しているか?

  • 重回帰…恒等変換(変換しない、identical link)
  • 2値…ロジット変換、プロビット変換(逆累積正規変換)、補対数対数変換(complementary log-log function)
  • ポアソン回帰…対数変換

p:対数変換→log(p)、ロジット変換→log{p/(1-p)}


3. 分散関数

2項分布やポアソン分布は分散が期待値の関数になっている→分散の推定に関して制約がかかり過ぎる(overdispersionという現象)。

それを解消するために、「擬似尤度」という概念を取り入れてoverdispersionパラメータをデータから推定する(擬似尤度を使わない推定だと1に固定されている)。

例)R:glm(family = quasipoisson)


誤差分布とリンク関数は基本的に1対1に対応してるけど、考え方(哲学)が違う。

  • 誤差分布:結果変数の分布を考えている
  • リンク関数:結果変数がなるべく-∞から+∞の中で広い範囲を取るように変数変換する


【推定方法】

最尤法…尤度関数が最大になるパラメータを求める

(尤度関数:観測値の同時分布的なもの。確率関数パラメータ関数と考える。2項分布の例→計算ツールとしての理解)

繰り返し計算によって最尤値を計算する

  1. ニュートン・ラフソン法
  2. スコア法(繰り返し重み付き最小2乗法、iterative weighted least squares)

参考:一般化推定方程式(GEE)、Liang and Zeger (1986)、一般化推定方程式

時系列データをモデル化する際、混合効果モデルを仮定すると適切な尤度関数が存在しなくなる。そのため「擬似尤度近接法」の概念を導入し、「一般化推定方程式」という方法で推定を行う。

『Rによる統計解析ハンドブック』p245

「一般化線形モデルを非正規結果変数である経時データに適用する際の問題は、リンク関数・誤差分布・相関構造の適切な組み合わせをもつ適当な尤度関数が通常は存在しないことである。」



【当てはまりの評価】

観測値と予測値の乖離の度合いを計算する(χ二乗分布)、小さい方が良い。リンク関数によって形が変わる。

観測値と予測値の散布図を描き、R二乗や相関係数を計算する。一致している方が良い。



ロジスティック回帰での具体例】

nCy π^y (1-π)^(n-y)

を、指数型分布族の正準型(canonical form)に書き直すと次のようになる。

exp(ylogπ – ylog(1-π) + nlog(1-π) + log nCy)

対数尤度 = Σ[ylogπ – ylog(1-π) + nlog(1-π) + log nCy]

= Σ[y(βx) - nlog(1 +βx) + log nCy]

この対数尤度をスコア法(繰り返し最小2乗法)による最尤法で最大化し、パラメータβを求める。

反復:スコア関数(U)、フィッシャー情報行列(V)を使って次の反復式を解く。

V(m-1) b(m) = V(m-1) b(m-1) + U(m-1)



【まとめ】

  • 分散分析も重回帰も「一般線形モデル(GLM)」で表現できる同じモデルである。
  • GLM、ロジスティック回帰、ポアソン回帰(指数型分布族)などをまとめて「一般化線形モデル(GLIM)」と呼ぶ。
  • GLIMは誤差分布・リンク関数・分散構造の3つの部分から構成されるモデルである。
  • パラメータは尤度関数を最大化する最尤法によって推定される。
  • 当てはまりの良さは対数尤度比統計量やキャリブレーションプロットなどによって評価される。

2011-07-04

線形単回帰をmap reduce風に分散処理して計算する

巷では何かと分散処理が流行っています。

特にHadoop+Mahoutで大規模データに対して機械学習統計モデルを高速分散処理することで、データマイニングがより盛んになるのではないかと期待がされています。


分散処理するためには、最後に足し合わせることができればいいわけで、考えてみるとそんなに難しいことじゃないんですよね。

試しにRを使って、線形単回帰を分散処理っぽく計算します。

大規模データで試しているじゃないですし、パフォーマンスを比較しているわけではありませんのであしからず、、


結局、分散処理は

  1. データを分割
  2. それぞれのデータでパラメータ計算
  3. 計算結果を足す

の3つをやっているだけだと、私は理解しています。


ですので、その3つの手順をRで100サンプル発生させて書いてみます。

まずは全体データで回帰係数を計算。

set.seed(1)
x <- rnorm(100)
set.seed(2)
y <- 2*x + rnorm(100)


#------全体での計算
lm(y ~ x - 1)
sum(y * x) / sum(x^2)

> [1] 1.800222

次にHadoop+Mahoutっぽく分散処理します。

#---------分散処理
#------1.データ分割&2.パラメータ計算
#---data1
x_sub1 <- x[1:50]
y_sub1 <- y[1:50]

ss_xy_sub1 <- sum(y_sub1 * x_sub1)
ss_xx_sub1 <- sum(x_sub1 * x_sub1)


#---data2
x_sub2 <- x[51:100]
y_sub2 <- y[51:100]

ss_xy_sub2 <- sum(y_sub2 * x_sub2)
ss_xx_sub2 <- sum(x_sub2 * x_sub2)


#---3.併合
(ss_xy_sub1 + ss_xy_sub2) / (ss_xx_sub1 + ss_xx_sub2)

> [1] 1.800222

全体のデータで計算したときと、分散処理したときの回帰係数が一致していることが分かります。

ここで肝となるのは、サブデータでは回帰係数まで計算せず平方和の計算で止めていることです。


今回参考にしたのはこの論文です(@doryokujin君の紹介)。

http://bit.ly/lHNcsn


他の手法も、「足すことのできる」とこまで計算して最後にパラメータ推定するってのが基本ですね。

(Rで書いたら簡単ですが、これをJavaで書こうと思ったら面倒なのかな?)



ちなみに、サブデータで回帰係数まで計算して併合すると次のようになり、全体で計算したときと値がずれてしまうことが分かります。

coef1 <- lm(y_sub1 ~ x_sub1 - 1)$coefficients
coef2 <- lm(y_sub2 ~ x_sub2 - 1)$coefficients

(coef1 + coef2)/2

>   x_sub1 
> 1.841857 

重回帰はベクトルが行列になるだけだし、一般化線形モデルもヘシアン行列を足せるみたい。

EMアルゴリズムも分散処理できるみたいだから、基本的に何でも計算できるようですね。


MCMCみたいにチェーンさせないといけない手法は厳しいかな?