23 Aug 2017, 09:32

プログラミングのための線形代数と確率統計がわかりやすい

とてもよい数学の本を読んでいるので、いまさらながら紹介。

  • プログラミングのための線形代数
  • プログラミングのための確率統計

モチベーション

機械学習のための数学の復習をしている。

この本を読む前に、マセマシリーズの線形代数・微分積分・統計学を読んだ。

マセマシリーズは、大学の試験対策本のようで、

テストを突破するのに効果を発揮しそうな書き方だった。

随所に注釈があり、ページを遡って読み返す必要がない。とても良い本。

でも、マセマはガチ。定理とその証明に対して手を抜かない。

そのため、定理、証明、定理、証明という、数学書にありがちなサイクルを繰り返す。

そのため、その数式や定理がどういう場面で役に立つのか、

その意味がよくわからないまま読み終わり、理解した気になってしまった。

そこで、数式の意味をイメージで捉えることに注力している本シリーズ、

「プログラミングのための〜」シリーズに手を出した。

バックグラウンド

一応情報系の学部を大学で専攻してた。

線形代数の本、実は自分が学生のころに購入して読破した。

けど、今となってはすっかり忘れてしまったので、再読。

大学の専攻が情報理論だったこともあり、確率はちょっと自信があるが、統計は全くダメ。

特徴

明確なスローガンがある

この本たちには、スローガンがある。

  • 線形代数: 行列は写像だ
  • 確率統計: 確率は面積だ

この考えを全面に押し出して、議論が進んでいく。

視点が与えられて、それにそって議論が進んでいくので、全体の見通しがとても良くなる。

また、著者らは、厳密な理屈よりも、意味を伝えることを重視している。

豊富な図が多用され、イメージによって数学を理解することができる。

コラムが読者視点

コラムが読者の視点でかかれている。たとえば、

  • 「これってホントに成り立つの?」
  • 「ちゃんと証明、説明してよ」
  • 「これは難しいよ」

という感じで、口語調で書かれている。

そういう質問をしたかったというかゆいところに手が届くのだ。

そして、コラムがものすごく丁寧に、ふんだんに書かれているのも特徴。

意味やイメージ、応用を重視

定理と証明を繰り返す、従来の数学書とは一線を画する。

まず大事にしているのが、その定理や数式がなにを意味しているかということだ。

それが、豊富なイメージと丁寧な説明で詳細に書いてある。

また、こういう場面に役に立つという応用も書かれていたりする。

プログラミングのための・・・あまり関係ない

プログラミングのためのと名を売っているものの、

プログラミングのコードがバリバリでてくるわけではない。

線形代数だったら、写像のアニメーションを表示したり、

確率だったら、シミュレーションをしたりした結果がちょこっと載っているのみ。

※プログラミングを求めるのなら行列プログラマーとか。

そうではなく、意味を理解して、コンピュータで行列や確率を扱うときの、

理解を深めようというのが趣旨。

速習コースが用意されている

線形代数

本論の説明と、コンピュータで数値計算をする章や、

手で計算する章は、印がついて分かれている。

コンピュータによる数値計算は学生のころはそういう授業があったので、よく参照したけれども、

意味を知り理解を深めることが目的な今となっては不要。

手計算も、試験を受けるわけではないので、不要。

なので、数値計算と手計算を省略して、本筋のみをなぞる、速習コースで勉強した。

確率統計

第一部と第二部に分かれている。

第一部で、確率論の基礎をみっちりやって、第二部で応用的な話題を扱う。

自分は第一部を読んで、機械学習に関連しそうな推定論と情報理論をつまみ読みしている。

おわりに

この本は数学書の中でも異色の部類にはいるが、とてもわかり易い。

マセマで王道をなぞったあと、モヤモヤしていた部分の霧が晴れるようで、

これは、という感動が随所にあった。

また、線形代数は学生時代に読んだものの、まさか10年の時を経て、

再び読むことになるとは思っても見なかった。

そして、10年経った今でも内容が色あせず、

むしろ機械学習ブームで社会人のやり直し数学の本として、

注目を集めいてることは素晴らしいと思う。

惜しむらくは、プログラミングのための微分積分シリーズがないことかな。

27 Jul 2017, 15:30

Deep Learning に挑んだ半年間、そして今後の勉強計画について

はじめに

半年くらい前、まだ機械学習についてなにも知らなかったときに、書いた記事が炎上してとても恥ずかしい思いをした(記事は非公開にしました)。

この記事はただの日記です。

この半年で取り組んだこと

この半年で、機械学習の勉強はせずに、ディープラーニングと強化学習の勉強をした。

3月〜7月

上記記事を書いてモチベーションを高め、さあ機械学習のための数学をやろうと意気込んでいたのだけれども、すぐに気が変わって、機械学習の王道を進まずにディープラーニングに突っ込んでいった。なぜなら、Udacity で Deep Learning Nanodegree Foundationという4ヶ月の講座を受講し始めたからだ。

この講座に 3月から7月までの4ヶ月間取り組むことによって、

  • Deep Learningという学問分野の概要を学んだ(NN, CNN, RNN, GAN)
  • TensorFlowで実装できるようになった。

このDLND、超初心者向けな講座で、手取り足取り Deep Learningを教えてくれた。なので、数学が必要なかった(笑) あれ、おかしいな、ディープラーニングって、もしかして数学あんまり必要ない??統計とかほとんど出てこないよ。

4月〜5月

また、同時進行で Fast.aiのPractical Deep Learning for Coderという講座も受講したのだが、これがまたすごくいい講座。

この講座の理念は、Deep Learningの敷居を下げて、誰もがDeep Learningを簡単に使えるようにすること。もちろん、ここでも難しい数学は抜き!そして、ここで Keras という Deep Learningをおそろしく簡単にするライブラリを知ってしまう。これをしったら、numpyの実装はおろか、tensorflowですら面倒に感じてしまう。この講座によって、

  • Kerasでバリバリコーディングできるようになった。
  • Kaggler としてデビューし、画像系コンペなら、いい結果を出せるようになった。

というわけで、この2つの講座によって、この半年でバリバリのディープラーニングコーダーになったのだった。

6月〜7月

しかし転機はまたやってきた(コロコロ変わる…)。会社にAIの勉強をしてます!といったら、「うちにはAIの仕事はまったくないよ!」といわれ、さらには「そんな役に立たない勉強よりも、Javaの資格とらないとクビにするよ」という脅しまでされたのだった。

というわけで、AIとの付き合い方について、考えを見直さざるを得なくなってしまった。今の会社は、組込みソフトの受託開発がメインだ。組込みソフトと AIがどう関係するのだ???うーん、と悩んだところ、2つの答えにたどりついだ。

  • 強化学習
  • ロボティクス

というわけで、強化学習の勉強とLEGO Mindstormsを使ったロボット制御の勉強をはじめた。

これにより、

  • OpenAI Gymデビューし、強化学習問題が解けるようになった。
  • 強化学習やロボット制御の理論を LEGO Mindstormsで試すことができた。

これから取り組むこと

数学の苦手意識を克服

この半年間で、理論よりは実践重視でバリバリコーディングしてきたのだけれども、ディープラーニングが趣味レベルで中途半端にできるだけでは、仕事には生かせないし、なにもできない!!

そもそも、である。機械学習に興味を持った理由は、数学を使って現実問題を解決するところがかっこいいと思った憧れからである。そのために、大学では数学を専攻したはずだった。

大学を卒業して10年くらい経った。大学は情報系の専攻で、卒業研究は、情報理論 を学んだのだが(学部卒)、10年も経って数学から離れていたらすっかり忘れてしまった。なので、大学の数学を一から学び直したい。

また、やっぱり数学が壁で挫折したことが、この半年間でたくさんあった。

数学で撃沈した思いでをつらつらと並べたい。

  • 誤差逆伝播法が理解できず挫折。(これはデーィプラーニングがわかる数学という本によってようやく理解できた)
  • Udacity: Artificial Intelligence for Roboticsや確率ロボティクスでベイズ統計や確率が理解できず挫折。
  • Deep Learning Nanodegreeで学んだことの先にいこうとすると、論文を読んでいかないといけない。しかし、論文を開くと数式の羅列に意味が分からずフリーズ。
  • 深層学習(イルカ本)挫折。
  • Deep Learning Javaプログラミング 深層学習の理論と実装、挫折。生成モデル??
  • Siraj Ravalの The Math of Intelligence 挫折。

というわけで、数学、やります!

プログラミングのための30代からのやり直し数学である。

勉強の方針

大学生のころは、理学系だったので、数学の勉強は定理と証明の繰り返しだった。ソフトウェア開発者になると、数学に対する姿勢は工学系よりになる。

  • 理論よりも応用を考える
  • この定理がどう役に立つかを考える
  • 抽象性よりも、具体的イメージを
  • 証明の厳密性はほどほどに(理解できることに越したことはないが)

大学1,2年生の数学の復習

機械学習で必要な数学とはなにか、それは情報系の大学生が1,2年生で習う数学で十分という意見が多い。私は、情報系の専攻だったのだけれども、そこで習った数学は以下の4つ。

  • 線形代数
  • 解析学
  • 統計学
  • 離散数学

離散数学は、TopCoderなどのアルゴリズムコンテストにとても役に立ちそうな分野だ。機械学習との関係は、よくわからなかった。集合や代数的な知識は、線形代数を勉強することで、身につけられそう。離散数学の勉強は保留で。

基礎固めのための参考書はマセマで

やり直し数学ということで、最近大学生の間で評判の高いマセマシリーズで基礎固めをすることにした。高校数学から大学数学への考え方の移行がスムーズにいける、定理の証明に手を抜いていないのでガチ、コメントが多くページを遡って読みなおす必要がなく読みやすい、などの印象を受けた。

基礎ということで、以下の3つをすすめることにした。これで、まずは、大学の初等数学を復習する。

  • 線形代数
  • 微分積分
  • 統計学

基礎の補強と応用へ

マセマは数学をとても簡単に(でも手を抜かずに)書かれているけれども、知識を厚くし、また別の角度から知識を補強したい。そこで選んだのが「プログラミングのための〜」のシリーズ。

解析系がこのシリーズにないので、代わりに最適化数学をメニューに組み込む。また、機械学習ではベイズ統計が使われるので、メニューに組み込む。

  • プログラミングのための線形代数
  • プログラミングのための確率統計
  • これなら分かる最適化数学
  • Pythonで体験するベイズ推論 PyMCによるMCMC入門

数学を復習したら機械学習へ

数学力を強化したら、もともとの目標である機械学習の勉強に着手したい。まずは、はじパタから。

理論よりも実践を重視したいので、なるべくPythonとJupyter Notebookでプログラミングできる教材を使って勉強していきたい。

ココらへんまで来たら、Kaggleにもガンガン挑戦していきたい。Deep Learningの手法のみに頼らずに、いろんな手法から最適な方法を取捨選択できるようになりたい。

その他、情報理論を勉強したい。この本は、情報理論的な立場から機械学習を捉えているらしいので、気になっている。

読みたい本

目指すは、機械学習の登竜門、パターン認識と機械学習(PRML)

また、確率ロボティクスも挫折したので、数学力をつけて再挑戦したい。

その他の勉強

Deep Learning

今後はDeep Learningの勉強は抑えて他の勉強にリソースを割り当てる。

ただし、fast.aiの Deep Learning のオンライン講座 Cutting Edge Deep Learning for Coders は進める。この講座はほんとうによい講座なので、引き続き受講する。

Deep Learning Book の 本が翻訳されたら、勉強を再開しよう。

ロボティクスと強化学習

仕事で AI を活用するためには、この2つの分野の学習が必要なので、ここに力点をいれていく。

具体的には、Udacity Robotics Nanodegreeを半年間に渡って受講します。おそらく、これはかなりの負荷になるので、他のことをやる時間がとれなくなるかもしれない。

また、強化学習は 次期 MLPシリーズで発売が予定されているので、その本が発売されたら勉強を再開したい。

まとめ: 今年やること

まとめると、今年の残りの予定は以下の3つだ。

  • 機械学習のための数学力強化
  • Udacity Robotics Nanodegree
  • fast.ai Cutting Edge Deep Learning for Coders

29 Mar 2017, 13:01

ディープラーニングがわかる数学入門を読んだ

ディープラーニングがわかる数学入門を4章まで読んだので、感想を書きます。

5 章の CNN はとりあえず時間をおいてから読んで、追記します。

これを読むまで、バックプロパゲーション(誤差逆伝搬法) がわかったようなわからないような、モヤモヤしていた。

  • coursera Machine Learning
  • ゼロから作る Deep Learning
  • Udacity Deep Learning Nanodegree Foundation

この本でようやく、バックプロパゲーションがなにをやっているのかわかった気がする。

数列の漸化式と初めから言ってくれよ。

どんな人にオススメか

目次はここから。

  • ディープラーニングがわかる数学入門:書籍案内|技術評論社

    • ■ 1 章 ニューラルネットワークの考え方
    • ■ 2 章 ニューラルネットワークのための数学の基本
    • ■ 3 章 ニューラルネットワークの最適化
    • ■ 4 章 ニューラルネットワークと誤差逆伝播法
    • ■ 5 章 ディープラーニングと畳み込みニューラルネットワーク

    ベストセラーになったゼロから作る Deep Learning は平易だったけれども、 それと同等、それ以上に平易なのがこの本。

  • ディープラーニングに関心のある学生,社会人。
  • ディープラーニングの勉強のために数学の基礎固めをしたいけれども、 なにから始めればいいか分からない人。
  • ゼロから学ぶ Deep Learning を読んで、数理をもう少し深めたいと思った人。
  • 逆誤差伝搬法を(計算グラフではなく)数式から理解しようとしたけど挫折した人。

内容

題名はディープラーニングだけれども、 ほとんどがニューラルネットワークの理解のためにページが割かれている。 最終章で 畳み込みニューラルネットワーク(CNN) の説明がある。

よい点

  • 説明がとても初心者にやさしい。
  • 図が豊富。
  • 例題が多く、簡単でわかりやすく理解が深まる。
  • できるだけ汎用的な記号の表記方法を使っているところ。
  • Python とか Ocatve とか、プログラミングは出てこない。
  • Excel を通じて各値がどう変化するか目で追えるところ。

(LibreOffice で値の確認はできた。マクロ使ってるだけで、VBA とかはつかっていないから)

どんなの数学が出てくるか

ニューラルネットワークの理解に必要な数学のみが厳選されて丁寧に説明されている。 具体的には、第 2 章の目次をみてもらうと分かる。

  • 1 ニューラルネットワークに必須の関数
  • 2 ニューラルネットワークの理解に役立つ数列と漸化式
  • 3 ニューラルネットワークで多用されるΣ記号
  • 4 ニューラルネットワークの理解に役立つベクトル
  • 5 ニューラルネットワークの理解に役立つ行列
  • 6 ニューラルネットワークのための微分の基本
  • 7 ニューラルネットワークのための偏微分の基本
  • 8 誤差逆伝播法で必須のチェーンルール
  • 9 勾配降下法の基礎となる多変数関数の近似公式

-10 勾配降下法の意味と公式 -11 勾配降下法を Excel で体験 -12 最適化問題と回帰分析

著者の 涌井 良幸さん、涌井 貞美さんは, 共著で統計関係の本を多数書いているようなので、わかりやすさはその実績からも伺える。

感想

意外だったのは、機会学習というと統計学が重要になるけれども、 この本には統計はほとんど出てこない。回帰分析が最適化の例として出てくる。

解析学の知識が多い。

行列や、シグマさえも、なるべく使わないで説明してくれるのだ!ベクトルは使う。

個人敵にハッとさせられた説明は、

  • コーシー・シュワルツの不等式は勾配降下法の基本原理。
  • 逆誤差伝搬法は、数列の漸化式。
  • 自ら学習するということは、重みとバイアスを「最適化」すること。

    ディープラーニングがわからない人のための最後の一冊として オススメです。

    分かる人には、必要ないかもしれない。

28 Jan 2017, 03:19

結局、機械学習に必要な数学ってなに?

前置き

記事がはてぶ炎上して恥ずかしい思いをしたので、結構書き直しました。

この記事よりも良質な記事を参考記事に列挙したので、このページをブックマーク集だとして、他のページを参照していただければと思います。

はじめに

機械学習を勉強するにあたって、 ベースとなる数学を勉強したいというモチベーションが高まってきた。なぜか?それは、今まで数学的な知識なしに勉強を進めていたのたけれども、論文が読めなかったり、少し数式で込み入ってくると、とたんにわけがわからなくなったからだ。

しかし、一番のモチベーションは、やっぱり機械学習を勉強するものとしての登竜門、PRML(パターン認識と機械学習)を読みたいというものがある。

参考記事

そこで、機械学習のために必要な数学を調べてみたのだが・・・どのサイトをみてもこれはというものがみつからないのだ。

2017年現在で、有益な記事をできるかぎり集めてみた。

なぜ、ピンとこないか?それは、分野が大きくまとまりすぎているから。

この分野のこの知識がこの技術のここに役に立とついう、ピンポイントな記事がなかなか見つからない。

自分の中での結論

結論としては、情報系の大学1,2年生で習う必修科目で十分。

  • 線形代数
  • 微分積分
  • 確率・統計

余裕があれば、以下を選択科目として勉強するのがよい。

  • ベイズ統計
  • (凸)最適化
  • 情報理論

勉強計画と実績

前提条件として、自分のバックグラウンドを書いておきます。

一応、情報系の大学の学科を卒業した(学部卒で院には行かなかった)学生のころに得意だったのは線形代数。微積は、単位を落として2年連続でうけたので記憶に残っている項目が多い。統計は、自分はほとんどやっていない。

大学4年の専攻は、情報理論。エントロピーとか、圧縮とか誤り訂正について学んだ。

初級

まずは、大学生が大好きなマセマシリーズで、基礎固めをすることにした。

  • スバラシク実力がつくと評判の線形代数キャンパス・ゼミ
  • スバラシク実力がつくと評判の微分積分キャンパス・ゼミ
  • スバラシク実力がつくと評判の統計学キャンパス・ゼミ

機械学習に関係のなさそうなところは流しつつ進めるという方針を立てた。

キーワード + 機械学習で検索をかけて、検索でヒットしないところは飛ばした。具体的には、統計の検定とか、線形代数のジョルダン標準型や、重積分の体積の求め方などなど、飛ばした。

マセマシリーズを一通りやった感想を書くと、マセマはガチ!証明をおろそかにしない。注釈が至るところに埋め込んであるので、式を追っていってわからなくなるところはない。しかし、定理、証明、定理、証明・・・という典型的なつまらない数学の本になっている印象をうけた。

機械学習は、数学を応用するので、定理の証明はできることに越したことはないが深入りする必要はないと考えている。(このポエムに同感した)

中級

  • プログラミングのための線形代数

    • プログラミングのための確率統計

プログラミングのための〜シリーズで線形代数と確率統計を学ぶ。

このシリーズは、イメージで概念を説明する特徴がある。

ちなみに、プログラミングの〜と書いてあるが、プログラミングはでてこない。

さらにいうと、自分が大学一年の時に、線形代数のやつを購入して愛読していた。

大学を卒業してから、10年近くが立ったいま、また役に立とうとは夢にも思わなかった。

次に紹介するのは、やろうかどうか悩んでいる、オプションの本だ。

  • これなら分かる最適化数学

すこぶる評判がよい本。機械学習の学習とは、最適化にほかならない。機械学習のキモを学べるほんだとか。

  • Pythonで体験するベイズ推論 PyMCによるMCMC入門

PRML本は、ベイズ統計がベースとなっているときいているので、ベイズ統計をガッツリやっておきたい。

この本は、まずコードを動かして結果を見てから理論を学習するという独特の方式をとっているらしい。

原著は Bayesian Methods for Hackers (ハッカーのためのベイジアンメソッド)。心たぎるタイトルではないか!!

  • 情報理論の基礎―情報と学習の直観的理解のために

一応、大学の専攻が情報理論だったので、情報理論は抑えておきたいところ。

この本は、機械学習の観点から情報理論を扱うという独特な本。余裕があればぜひ読みたい。

機械学習入門

数学の基礎が固まってきたら、そろそろ機械学習をやっていきたい。

  • Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

この本の特徴は、なんと数式が出てこないところだ。

数式に苦手意識があるので、まずは数式なしから、イメージとして機械学習を捉えていきたい。

更に、この本は、scikit-learnをマスターすることができる。

scikit-learnをマスターすれば、Kaggleに挑戦できる。よって、早いうちに読んでおきたい本として、筆頭に上げた。

  • Python機械学習プログラミング 達人データサイエンティストによる理論と実践

中級レベル。これもコードが示されているので、理論と実装を同時に学ぶことができる。

このあたりからKaggleをガンガンやっていきたいところだ。

  • はじめてのパターン認識

王道。機械学習を目指すならばだれもが通る本。はじパタ本。

機械学習の概念が数理的な側面からコンパクトにまとまっている。

  • 言語処理のための機械学習入門

これも王道。通称、高村本。はじパタ本とならんで、機械学習入門の書として挙げられている。

自分は、はじパタと高村本を比較した結果、高村本から入門することにした。

なぜなら、薄いから。はじめの1/4が数学の説明で費やされているから。

重要視されているのは、凸最適化、確率論、そして情報理論。数式の展開が丁寧。

  • データ解析のための統計モデリング入門

これも王道。機械学習がはじパタ本ならば、統計学はみどり本。

2つはデータサイエンティストを目指すものとしての最低ラインだとか。

はじパタが識別モデルを扱うのに対し、緑本は生成モデルを扱う。

ラスボス

  • パターン認識と機械学習
  • Kaggleに挑戦

あとは、実践あるのみ。Kaggleは 早い段階から数学や機械学習の勉強と平行して、積極的に取り組んでいきたい。

理論だけしかできない人間になりたくない。

Coding First の精神で頑張りたい。

めざせ、カグルマスター!!

12 Apr 2015, 06:13

Gacco で 社会人のためのデータサイエンス入門をうけた

日本の MOOC はどんなものかと思って, gacco で統計学を学んでみました.

内容

統計学の基礎知識を学ぶことができる.

内容は, 中学生でも理解で切るような平易な内容.

  • 第 1 週:統計データの活用 … 統計データの活用事例
  • 第 2 週:統計学の基礎 … 統計の基礎知識を学ぶ
  • 第 3 週:データの見方 … グラフの見方を学ぶ
  • 第 4 週:公的データの入手とコースのまとめ … e-Stat の使い方の紹介.

以下に詳細が書いてある.

感想

やりきった感なし

実際のデータの計算などはほとんどでてこなかったり, 一度きいたことがあるような基礎概念を説明しているので, まったく物足りなかった.

1 週の内容が 1 時間もかからずに終わってしまう軽いもの. さらに, 4 週で終わってしまう. coursera や edX は 一科目 5 時間とか 10 時間学習を強いるし, 平均で 8 week くらい続くので, 負荷の度合いがまったく違う.

MOOC は大学で学ぶ講義を一般に開放しているところに魅力があるのだが, 中学校の授業を立ち見しているような気分なのだ.

コンテンツがよく吟味されている

ただ, 内容が欲吟味されていて, 動画の構成のよさや内容のわかりやすさはとてもよかった. 動画の長さも 10 分ごとに分かれているし, 各動画で要点がまとまっているし

また, 構成社会人のための! ということで, 話題の選び方がビジネスよりなところがよかった. 扱う統計の題材は, 現実に即したもの.(売上とか, 人口比とか) 話のたとえも, マーケティングに関わるようなものが使わたり. 題名が “社会人のために”ということなのでこの辺を意識したことが伺える.

gacco 初体験の感想は…ビミョウ

日本語であるところが, とてもうれしかった.

しかし, とても物足りない. 負荷の度合いが coursera/edX にくらべると違いすぎる. 例えばこれとくらべたら負荷が軽すぎて, やりきった感がまったくない.

こんなものなのか??

日本の MOOC はどんなものかと思って, gacco で統計学を学んでみました.

17 Mar 2015, 23:11

リッカート法によるアンケートの相関分析を R でする方法のメモ

はじめに

5 段階アンケートで欲利用されるリッカート法と, アンケート結果の相関関係をを調べる方法を紹介します.

アンケート結果はカテゴリカルデータなため, そのままでは相関係数が求められないので, 一工夫必要.

[toc]

背景

職場でアンケートを実施したのだけれども, 分析の仕方が分からなかったので, カテゴリカルデータの相関分析方法を調べてみた.

リッカート法の紹介

リーカート法は, 5 段階評価, 7 段階評価のアンケート.

リッカードの視覚化には帯グラフが適している.

R で 相関を調べる

cor 関数を使う.

二変数の相関

cor (bull$YearsPro, bull$BuckOuts)

多変数の相関. 配列で渡す.

myvars <- c ('YearsPro', 'Events', 'BuckOuts')
cor (bull[,myvars])

カテゴリカルデータの相関

numeric データに変換

ここからが本題. カテゴリカルなデータの相関を出すには, カテゴリを数値に変換する必要がある. as.factor, as.numeric を利用する.

val <- as.numeric (as.factor (var))

plot で描写

相関関係の散布図を一度に生成することは, plot 関数で可能だ. しかし, カテゴリカルデータに対しては, あまりみても情報が得られない.

ここにシャレたグラフの R スニペットがある.

ポリクコック相関係数

相関係数はでピアソンを利用するよりも, ボリクコック相関係数を利用するのがよいらしい.

これはまだ試していない.

以下のようなデータから相関関係を読み取る.

向上心 好奇心 危機感 責任感 勤続 所属


3 3 4 4 21- 長野 3 3 5 5 11-20 川崎 2 3 5 4 11-20 川崎 4 5 4 4 21- 長野 4 3 5 4 -10 川崎 1 1 5 3 21- 川崎 1 1 4 2 -10 川崎 1 1 4 4 21- 川崎 4 2 5 5 11-20 長野 1 1 4 1 -10 川崎 2 1 5 3 21- 長野 4 5 3 4 21- 川崎 4 4 4 4 21- 長野

データ処理

カテゴリカルデータを変換.

answerNum <- answer
answerNum$勤続 <- as.numeric (as.factor (answer$勤続))
answerNum$所属 <- as.numeric (as.factor (answer$所属))
print (answerNum)

向上心 好奇心 危機感 責任感 勤続 所属


3 3 4 4 3 2 3 3 5 5 2 1 2 3 5 4 2 1 4 5 4 4 3 2 4 3 5 4 1 1 1 1 5 3 3 1 1 1 4 2 1 1 1 1 4 4 3 1 4 2 5 5 2 2 1 1 4 1 1 1 2 1 5 3 3 2 4 5 3 4 3 1 4 4 4 4 3 2

相関をもとめる

factors <- names (answerNum)
result <- cor (answerNum[,factors])
result <- round (result, 4)
       向上心    好奇心    危機感    責任感   勤続      所属

向上心 1 0.822 -0.1041 0.6775 0.1867 0.4872 好奇心 0.822 1 -0.3991 0.5277 0.3136 0.2521 危機感 -0.1041 -0.3991 1 0.2198 -0.2306 0.0195 責任感 0.6775 0.5277 0.2198 1 0.3947 0.2823 勤続 0.1867 0.3136 -0.2306 0.3947 1 0.4739 所属 0.4872 0.2521 0.0195 0.2823 0.4739 1

散布図

plot (answerNum)

05 Feb 2015, 12:59

統計解析の基礎を学ぶ! edX の Foundations of Data Analysis をうけた

はじめに

統計の基礎を勉強するために, edX の Foundations of Data Analysis を受けました.

内容

タイトルどおり, 統計学の基礎を 11 週に渡って学ぶ講座. 大学初年度の学生が 1 年かけて学ぶ内容をざっと網羅している.

前半は, 記述統計学・後半は推定統計学, とくに仮説検定.

以下, 用語を思い出しながら主要なキーワードを列挙.

  • 記述統計学
    • 統計モデル
      • 線形モデル
      • 指数モデル
      • 対数モデル
    • 確率分布
      • 二項分布
      • 正規分布
    • 相関
  • 推定統計学

    • サンプリング
    • 区間推定・点推定
    • 仮説検定
      • Z 検定
      • T 検定
      • F 検定
      • カイ二乗検定
      • 分散分析

    言語は R を利用する. R を利用した統計解析の方法が一通り分かるところがよい.

    この講座のかわっているところは, Reading が多いこと. テキストが PDF で毎週ダウンロードできる. その内容を読んでから, R の使い方を学んで, 問題をとくスタイル.

    また, この講座のよかった点は, 課題が現実のデータを利用しているところ. 実験の分析などの, 現実とはかけ離れた内容ではなく, 親しみやすいデー タなので, 興味が沸きやすい.

    あくまで, 基礎的な内容なのでそこまで難しくはない. 1 難しい数式もでてこない. なので, 数学があまり得意でない文系のひとでもついていけると思う.

感想

大学の統計学の授業はつまらなかった

大学生のときに統計の授業を受けたのだが, それよりも圧倒的にわかりやすかった!! 無料でわかりやすい授業がうけら れると, 大学の授業はどうなってしまうのだろう?? That’s MOOC 革命.

大学のときの統計がつまらなかった理由は,

  • データを扱わなかった
  • 数式ばかりをあつかっていた
  • プログラミングで計算しなかった

こんなところで大学の授業の愚痴をいってもしょうがないのだが, 統計学なはずなのに, 実際にデータを分析するようなことは一切なかったし, グラフを書くようなことも一切なかった. 朝一に授業がはじまって, 難しい 数式をノートにひたすら写していた記憶しかない.2

この講座は, 大学生のときにつまらないと思っていた要因の反対のことをし ている. だから, おもしろい.

あくまで基礎

そんなわけで, 大学生以来, xx 年ぶりに統計を学び直した.

  • 覚えていたこと
  • 忘れていたこと
  • 習っていないこと

がそれぞれ出てきて, 毎週おもしろかった. 仮説検定はほとんど大学では学ばなかった 3 ので, 考え方が新鮮だった.

ただ, これは基礎だ. 以下のページに統計学の大まかな図があったのだが, 基礎の先には広大な統計学の応用領域が広がっている.

これから

この先は, 統計学のおもしろそうな領域にすこしずつ手をつけていこう.

統計学が, 今後の人生にどう関係してくるのかはわからない. 勉強の先に宝が埋まっているかもしれないし, 徒労に終わってまた忘れてしまうかもしれない.

でも, 統計学がここ数年で急激に注目されていることは紛れもない事実だ.

必ず役に立つ, いや, 必ず役に立たせると信じることにする.

Footnotes


  1. 英語が難しいのだが… [return]
  2. そして, 朝起きることができなくて次第におサボリ. [return]
  3. 学んだけれども忘れたのかも [return]

29 Oct 2014, 13:29

数学での関数とプログラミングでの関数

関数についての違和感

大学では, 応用数学を専攻していた.

大学でならった関数の定義は, ある集合から別の集合への写像だった.

就職して, C 言語でプログラムを書くようになってからずっと, どうも関数にたいして違和感を抱いてきた.

なんでこれが関数なんだ??

int main (void) {
  printf ("Hello, World!");
  return 0;
}

以下のページに同じようなことがかかれていたので引用.

x = x + 1

古き良き小学校の時代, この行には困惑させられたものだった. 魔術的な x が, 加算されたのに等しいままでいる事に. どういうわけか, プログラミングを始めると, それに構わなくなる. 「やれやれ, それは重大な事柄じゃないし, プログラミングとは現実のビジネス行為なんだから, 数学的な純粋さについてあら探しなんて必要無い (その議論なら, 大学にいる狂った髭面野郎どもにさせておけばいい) 」と思っていた. けれども, ただ知らなかっただけで, 我々が間違っていて高い代償を支払っていたのは 明らかである.

Haskell における関数の定義

最近, プログラミング Haskell という本を読んだ.

その中での関数の定義を読み, 自分が思ってきた関数のイメージと一致した.

関数は, ある型の引数を他の型の引数の結果に変換する. 型とは, 互いに関連する値の集合.

これだ! と思った.

これが大学でならった関数の定義だ. 関数型言語というのは数学に近いときいていたが, それを感じた瞬間だった.

うれしかったので, 今回の記事にしてみた. もっと, 関数型言語について知りたいと思った.

C 言語と Java における関数の定義

C 言語 (手続き型) と Java (オブジェクト指向型) における関数の定義について も, Wikipedia で調べてみたので, 書いておく.

関数型における関数とは, 意味するところは違う. これが, 違和感の正体だった.

C 言語 (手続き型パラダイム)

戻り値つきのサブルーチン.

プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたもの.

Java (オブジェクト指向パラダイム)

あるクラスないしオブジェクトに所属するサブルーチン.

各オブジェクトが持っている自身に対する操作. オブジェクトは「データ」と「手続き」から成っているが, その「手続き」の部分に当たる.