From 794795aabe386cf5b1b5c58b697728863fb843df Mon Sep 17 00:00:00 2001 From: Cameron Davidson-Pilon Date: Wed, 12 Jun 2013 11:51:56 -0700 Subject: [PATCH 01/42] Create gh-pages branch via GitHub --- images/bg_hr.png | Bin 0 -> 943 bytes images/blacktocat.png | Bin 0 -> 1428 bytes images/icon_download.png | Bin 0 -> 1162 bytes images/sprite_download.png | Bin 0 -> 16799 bytes index.html | 202 ++++++++++++++++ javascripts/main.js | 1 + params.json | 1 + stylesheets/pygment_trac.css | 70 ++++++ stylesheets/stylesheet.css | 431 +++++++++++++++++++++++++++++++++++ 9 files changed, 705 insertions(+) create mode 100644 images/bg_hr.png create mode 100644 images/blacktocat.png create mode 100644 images/icon_download.png create mode 100644 images/sprite_download.png create mode 100644 index.html create mode 100644 javascripts/main.js create mode 100644 params.json create mode 100644 stylesheets/pygment_trac.css create mode 100644 stylesheets/stylesheet.css diff --git a/images/bg_hr.png b/images/bg_hr.png new file mode 100644 index 0000000000000000000000000000000000000000..7973bd69888c7e10ccad1111d555ceabb7cd99b6 GIT binary patch literal 943 zcmaJ=O^ee&7!FiK7FWCot{@Ck@nrMW&tx0B-6VAbrk1u~FTzffX&bu9#AIsIdef8t z!QZfdz=K}>3m(LO;6X3qN}Y6@>cJYA%)G<%Jn!ec>9im1@7>wsIBwrMF}iHO!q%;8 zSJ@xEd~(FL18NRvkBsOXMVM>4WQc*~qcQGc17IjxRnj!O_^B1gan0x#EWT48PK->5B2>mI;LIx zC*FSw$Nfc!g)WZCEOJ=mM)}lLsOk|$ltg_(&ax_YCWMlBLPDVT%D_gB7o_$YZ`-OB z#1sV%whRq21>W;qwN$N?OUGtQQe;JvOsQrna;+v+j8dth=*?orHHb6waX>S!yXCgT zo!oR3{E&GzaOAzfZYv@_Sf{LdyJInS>TS60&R9%yCs$y>2x(*gYIJtRrYAja$Ceq} z!N&oc_K1!3-Ft`U>`CM;quEbB4KG%!MovB*9_3!QzFhqHwrbwK|Doo-y>auDJNSP6 T=d)j*_4El@X4^PFK7I8YBT*xD literal 0 HcmV?d00001 diff --git a/images/blacktocat.png b/images/blacktocat.png new file mode 100644 index 0000000000000000000000000000000000000000..6e264fe57a2e35a2855405ac7d4102c3f6ddcdae GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 00000000..c40a6ece --- /dev/null +++ b/index.html @@ -0,0 +1,202 @@ + + + + + + + + + + + Bayesian Methods for Hackers + + + + + +
+
+ View on GitHub + +

Bayesian Methods for Hackers

+

An introduction to Bayesian methods + probabilistic programming in data analysis with a computation/understanding-first, mathematics-second point of view. All in pure Python ;)

+ +
+ Download this project as a .zip file + Download this project as a tar.gz file +
+
+
+ + +
+
+

The Bayesian method is the natural approach to inference, yet it is hidden from readers behind chapters of slow, mathematical analysis. The typical text on Bayesian inference involves two to three chapters on probability theory, then enters what Bayesian inference is. Unfortunately, due to mathematical intractability of most Bayesian models, the reader is only shown simple, artificial examples. This can leave the user with a so-what feeling about Bayesian inference. In fact, this was the author's own prior opinion.

+ +

After some recent success of Bayesian methods in machine-learning competitions, I decided to investigate the subject again. Even with my mathematical background, it took me three straight-days of reading examples and trying to put the pieces together to understand the methods. There was simply not enough literature bridging theory to practice. The problem with my misunderstanding was the disconnect between Bayesian mathematics and probabilistic programming. That being said, I suffered then so the reader would not have to now. This book attempts to bridge the gap.

+ +

If Bayesian inference is the destination, then mathematical analysis is a particular path to towards it. On the other hand, computing power is cheap enough that we can afford to take an alternate route via probabilistic programming. The latter path is much more useful, as it denies the necessity of mathematical intervention at each step, that is, we remove often-intractable mathematical analysis as a prerequisite to Bayesian inference. Simply put, this latter computational path proceeds via small intermediate jumps from beginning to end, where as the first path proceeds by enormous leaps, often landing far away from our target. Furthermore, without a strong mathematical background, the analysis required by the first path cannot even take place.

+ +

Bayesian Methods for Hackers is designed as a introduction to Bayesian inference from a computational/understanding-first, and mathematics-second, point of view. Of course as an introductory book, we can only leave it at that: an introductory book. For the mathematically trained, they may cure the curiosity this text generates with other texts designed with mathematical analysis in mind. For the enthusiast with less mathematical-background, or one who is not interested in the mathematics but simply the practice of Bayesian methods, this text should be sufficient and entertaining.

+ +

The choice of PyMC as the probabilistic programming language is two-fold. As of this writing, there is currently no central resource for examples and explanations in the PyMC universe. The official documentation assumes prior knowledge of Bayesian inference and probabilistic programming. We hope this book encourages users at every level to look at PyMC. Secondly, with recent core developments and popularity of the scientific stack in Python, PyMC is likely to become a core component soon enough.

+ +

PyMC does have dependencies to run, namely NumPy and (optionally) SciPy. To not limit the user, the examples in this book will rely only on PyMC, NumPy, SciPy and Matplotlib only.

+ +

+Contents

+ +

(The below chapters are rendered via the nbviewer at +nbviewer.ipython.org/, and is read-only and rendered in real-time. +Interactive notebooks + examples can be downloaded by cloning!

+ +
    +
  • Prologue: Why we do it.

  • +
  • +

    Chapter 1: Introduction to Bayesian Methods +Introduction to the philosophy and practice of Bayesian methods and answering the question, "What is probabilistic programming?" Examples include:

    + +
      +
    • Inferring human behaviour changes from text message rates
    • +
    +
  • +
  • +

    Chapter 2: A little more on PyMC +We explore modeling Bayesian problems using Python's PyMC library through examples. How do we create Bayesian models? Examples include:

    + +
      +
    • Detecting the frequency of cheating students, while avoiding liars
    • +
    • Calculating probabilities of the Challenger space-shuttle disaster
    • +
    +
  • +
  • +

    Chapter 3: Opening the Black Box of MCMC +We discuss how MCMC operates and diagnostic tools. Examples include:

    + +
      +
    • Bayesian clustering with mixture models
    • +
    +
  • +
  • +

    Chapter 4: The Greatest Theorem Never Told +We explore an incredibly useful, and dangerous, theorem: The Law of Large Numbers. Examples include:

    + +
      +
    • Exploring a Kaggle dataset and the pitfalls of naive analysis
    • +
    • How to sort Reddit comments from best to worst (not as easy as you think)
    • +
    +
  • +
  • +

    Chapter 5: Would you rather lose an arm or a leg? +The introduction of loss functions and their (awesome) use in Bayesian methods. Examples include:

    + +
      +
    • Solving the Price is Right's Showdown
    • +
    • Optimizing financial predictions
    • +
    • Winning solution to the Kaggle Dark World's competition
    • +
    +
  • +
  • +

    Chapter 6: Getting our prior-ities straight +Probably the most important chapter. We draw on expert opinions to answer questions. Examples include:

    + +
      +
    • Multi-Armed Bandits and the Bayesian Bandit solution.
    • +
    • What is the relationship between data sample size and prior?
    • +
    • Estimating financial unknowns using expert priors
    • +
    +

    We explore useful tips to be objective in analysis as well as common pitfalls of priors.

    +
  • +
  • +

    Chapter X1: Bayesian methods in Machine Learning and Model Validation +We explore how to resolve the overfitting problem plus popular ML methods. Also included are probablistic explainations of ridge regression and LASSO regression.

    + +
      +
    • Tim Saliman's winning solution to Kaggle's Don't Overfit problem
    • +
    +
  • +
  • +

    Chapter X2: More PyMC Hackery +We explore the gritty details of PyMC. Examples include:

    + +
      +
    • Analysis on real-time GitHub repo stars and forks.
    • +
    +
  • +

More questions about PyMC? +Please post your modeling, convergence, or any other PyMC question on cross-validated, the statistics stack-exchange.

+ +

+Using the book

+ +

The book can be read in three different ways, starting from most recommended to least recommended:

+ +
    +
  1. The most recommended option is to clone the repository to download the .ipynb files to your local machine. If you have IPython installed, you can view the +chapters in your browser plus edit and run the code provided (and try some practice questions). This is the preferred option to read +this book, though it comes with some dependencies. + +
      +
    • IPython v0.13 (or greater) is a requirement to view the ipynb files. It can be downloaded here. IPython notebooks can be run by (your-virtualenv) ~/path/to/the/book/Chapter1_Introduction $ ipython notebook +
    • +
    • For Linux users, you should not have a problem installing NumPy, SciPy, Matplotlib and PyMC. For Windows users, check out pre-compiled versions if you have difficulty.
    • +
    • In the styles/ directory are a number of files (.matplotlirc) that used to make things pretty. These are not only designed for the book, but they offer many improvements over the default settings of matplotlib.
    • +
    • while technically not required, it may help to run the IPython notebook with ipython notebook --pylab inline flag if you encounter io errors.
    • +
    +
  2. +
  3. The second, preferred, option is to use the nbviewer.ipython.org site, which display IPython notebooks in the browser (example). +The contents are updated synchronously as commits are made to the book. You can use the Contents section above to link to the chapters.

  4. +
  5. PDF versions are available! Look in the PDF/ directory. PDFs are the least-prefered method to read the book, as pdf's are static and non-interactive. If PDFs are desired, they can be created dynamically using Chrome's builtin print-to-pdf feature or using the nbconvert utility.

  6. +

+Installation and configuration

+ +

If you would like to run the IPython notebooks locally, (option 1. above), you'll need to install the following:

+ +
    +
  • IPython 0.13 is a requirement to view the ipynb files. It can be downloaded here +
  • +
  • +

    For Linux users, you should not have a problem installing NumPy, SciPy and PyMC. For Windows users, check out pre-compiled versions if you have difficulty.

    + +
      +
    • also recommended, for data-mining exercises, are PRAW and requests.
    • +
    +
  • +
  • In the styles/ directory are a number of files that are customized for the notebook. +These are not only designed for the book, but they offer many improvements over the +default settings of matplotlib and the IPython notebook. The in notebook style has not been finalized yet.

  • +

+Development

+ +

This book has an unusual development design. The content is open-sourced, meaning anyone can be an author. +Authors submit content or revisions using the GitHub interface.

+ +

We would like to thank the Python community for building an amazing architecture. We would like to thank the +statistics community for building an amazing architecture.

+ +

Similarly, the book is only possible because of the PyMC library. A big thanks to the core devs of PyMC: Chris Fonnesbeck, Anand Patil, David Huard and John Salvatier.

+ +

One final thanks. This book was generated by IPython Notebook, a wonderful tool for developing in Python. We thank the IPython +community for developing the Notebook interface. All IPython notebook files are available for download on the GitHub repository.

+ +

+Contact

+ +

Contact the main author, Cam Davidson-Pilon at cam.davidson.pilon@gmail.com or @cmrndp

+ +

created by Stef Gibson at StefGibson.com

+
+
+ + + + + + + + diff --git a/javascripts/main.js b/javascripts/main.js new file mode 100644 index 00000000..d8135d37 --- /dev/null +++ b/javascripts/main.js @@ -0,0 +1 @@ +console.log('This would be the main JS file.'); diff --git a/params.json b/params.json new file mode 100644 index 00000000..d8b2d3ca --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"Bayesian Methods for Hackers","tagline":"An introduction to Bayesian methods + probabilistic programming in data analysis with a computation/understanding-first, mathematics-second point of view. All in pure Python ;) ","body":"The Bayesian method is the natural approach to inference, yet it is hidden from readers behind chapters of slow, mathematical analysis. The typical text on Bayesian inference involves two to three chapters on probability theory, then enters what Bayesian inference is. Unfortunately, due to mathematical intractability of most Bayesian models, the reader is only shown simple, artificial examples. This can leave the user with a *so-what* feeling about Bayesian inference. In fact, this was the author's own prior opinion.\r\n\r\n\r\n\r\nAfter some recent success of Bayesian methods in machine-learning competitions, I decided to investigate the subject again. Even with my mathematical background, it took me three straight-days of reading examples and trying to put the pieces together to understand the methods. There was simply not enough literature bridging theory to practice. The problem with my misunderstanding was the disconnect between Bayesian mathematics and probabilistic programming. That being said, I suffered then so the reader would not have to now. This book attempts to bridge the gap.\r\n\r\nIf Bayesian inference is the destination, then mathematical analysis is a particular path to towards it. On the other hand, computing power is cheap enough that we can afford to take an alternate route via probabilistic programming. The latter path is much more useful, as it denies the necessity of mathematical intervention at each step, that is, we remove often-intractable mathematical analysis as a prerequisite to Bayesian inference. Simply put, this latter computational path proceeds via small intermediate jumps from beginning to end, where as the first path proceeds by enormous leaps, often landing far away from our target. Furthermore, without a strong mathematical background, the analysis required by the first path cannot even take place.\r\n\r\n*Bayesian Methods for Hackers* is designed as a introduction to Bayesian inference from a computational/understanding-first, and mathematics-second, point of view. Of course as an introductory book, we can only leave it at that: an introductory book. For the mathematically trained, they may cure the curiosity this text generates with other texts designed with mathematical analysis in mind. For the enthusiast with less mathematical-background, or one who is not interested in the mathematics but simply the practice of Bayesian methods, this text should be sufficient and entertaining.\r\n\r\n\r\nThe choice of PyMC as the probabilistic programming language is two-fold. As of this writing, there is currently no central resource for examples and explanations in the PyMC universe. The official documentation assumes prior knowledge of Bayesian inference and probabilistic programming. We hope this book encourages users at every level to look at PyMC. Secondly, with recent core developments and popularity of the scientific stack in Python, PyMC is likely to become a core component soon enough.\r\n\r\nPyMC does have dependencies to run, namely NumPy and (optionally) SciPy. To not limit the user, the examples in this book will rely only on PyMC, NumPy, SciPy and Matplotlib only.\r\n\r\n\r\nContents\r\n------\r\n\r\n(The below chapters are rendered via the *nbviewer* at\r\n[nbviewer.ipython.org/](http://nbviewer.ipython.org/), and is read-only and rendered in real-time.\r\nInteractive notebooks + examples can be downloaded by cloning! \r\n\r\n\r\n* [**Prologue:**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Prologue/Prologue.ipynb) Why we do it.\r\n\r\n* [**Chapter 1: Introduction to Bayesian Methods**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter1_Introduction/Chapter1_Introduction.ipynb)\r\n Introduction to the philosophy and practice of Bayesian methods and answering the question, \"What is probabilistic programming?\" Examples include:\r\n - Inferring human behaviour changes from text message rates\r\n \r\n* [**Chapter 2: A little more on PyMC**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter2_MorePyMC/MorePyMC.ipynb)\r\n We explore modeling Bayesian problems using Python's PyMC library through examples. How do we create Bayesian models? Examples include:\r\n - Detecting the frequency of cheating students, while avoiding liars\r\n - Calculating probabilities of the Challenger space-shuttle disaster\r\n \r\n* [**Chapter 3: Opening the Black Box of MCMC**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter3_MCMC/IntroMCMC.ipynb)\r\n We discuss how MCMC operates and diagnostic tools. Examples include:\r\n - Bayesian clustering with mixture models\r\n \r\n* [**Chapter 4: The Greatest Theorem Never Told**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter4_TheGreatestTheoremNeverTold/LawOfLargeNumbers.ipynb)\r\n We explore an incredibly useful, and dangerous, theorem: The Law of Large Numbers. Examples include:\r\n - Exploring a Kaggle dataset and the pitfalls of naive analysis\r\n - How to sort Reddit comments from best to worst (not as easy as you think)\r\n \r\n* [**Chapter 5: Would you rather lose an arm or a leg?**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter5_LossFunctions/LossFunctions.ipynb)\r\n The introduction of loss functions and their (awesome) use in Bayesian methods. Examples include:\r\n - Solving the *Price is Right*'s Showdown\r\n - Optimizing financial predictions\r\n - Winning solution to the Kaggle Dark World's competition\r\n \r\n* [**Chapter 6: Getting our *prior*-ities straight**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter6_Priorities/Priors.ipynb)\r\n Probably the most important chapter. We draw on expert opinions to answer questions. Examples include:\r\n - Multi-Armed Bandits and the Bayesian Bandit solution.\r\n - What is the relationship between data sample size and prior?\r\n - Estimating financial unknowns using expert priors\r\n \r\n We explore useful tips to be objective in analysis as well as common pitfalls of priors. \r\n \r\n* **Chapter X1: Bayesian methods in Machine Learning and Model Validation** \r\n We explore how to resolve the overfitting problem plus popular ML methods. Also included are probablistic explainations of ridge regression and LASSO regression.\r\n - Tim Saliman's winning solution to Kaggle's *Don't Overfit* problem \r\n \r\n* **Chapter X2: More PyMC Hackery**\r\n We explore the gritty details of PyMC. Examples include:\r\n - Analysis on real-time GitHub repo stars and forks.\r\n\r\n\r\n \r\n**More questions about PyMC?**\r\nPlease post your modeling, convergence, or any other PyMC question on [cross-validated](http://stats.stackexchange.com/), the statistics stack-exchange.\r\n \r\n \r\nUsing the book\r\n-------\r\n\r\nThe book can be read in three different ways, starting from most recommended to least recommended: \r\n\r\n1. The most recommended option is to clone the repository to download the .ipynb files to your local machine. If you have IPython installed, you can view the \r\nchapters in your browser *plus* edit and run the code provided (and try some practice questions). This is the preferred option to read\r\nthis book, though it comes with some dependencies. \r\n - IPython v0.13 (or greater) is a requirement to view the ipynb files. It can be downloaded [here](http://ipython.org/). IPython notebooks can be run by `(your-virtualenv) ~/path/to/the/book/Chapter1_Introduction $ ipython notebook`\r\n - For Linux users, you should not have a problem installing NumPy, SciPy, Matplotlib and PyMC. For Windows users, check out [pre-compiled versions](http://www.lfd.uci.edu/~gohlke/pythonlibs/) if you have difficulty. \r\n - In the styles/ directory are a number of files (.matplotlirc) that used to make things pretty. These are not only designed for the book, but they offer many improvements over the default settings of matplotlib.\r\n - while technically not required, it may help to run the IPython notebook with `ipython notebook --pylab inline` flag if you encounter io errors.\r\n2. The second, preferred, option is to use the nbviewer.ipython.org site, which display IPython notebooks in the browser ([example](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter1_Introduction/Chapter1_Introduction.ipynb)).\r\nThe contents are updated synchronously as commits are made to the book. You can use the Contents section above to link to the chapters.\r\n \r\n3. **PDF versions are available! Look in the PDF/ directory.** PDFs are the least-prefered method to read the book, as pdf's are static and non-interactive. If PDFs are desired, they can be created dynamically using Chrome's builtin print-to-pdf feature or using the [nbconvert](https://github.com/ipython/nbconvert) utility.\r\n \r\n\r\nInstallation and configuration\r\n------\r\nIf you would like to run the IPython notebooks locally, (option 1. above), you'll need to install the following:\r\n- IPython 0.13 is a requirement to view the ipynb files. It can be downloaded [here](http://ipython.org/ipython-doc/dev/install/index.html)\r\n- For Linux users, you should not have a problem installing NumPy, SciPy and PyMC. For Windows users, check out [pre-compiled versions](http://www.lfd.uci.edu/~gohlke/pythonlibs/) if you have difficulty. \r\n - also recommended, for data-mining exercises, are [PRAW](https://github.com/praw-dev/praw) and [requests](https://github.com/kennethreitz/requests). \r\n\r\n- In the styles/ directory are a number of files that are customized for the notebook. \r\nThese are not only designed for the book, but they offer many improvements over the \r\ndefault settings of matplotlib and the IPython notebook. The in notebook style has not been finalized yet.\r\n\r\n\r\n\r\nDevelopment\r\n------\r\n\r\nThis book has an unusual development design. The content is open-sourced, meaning anyone can be an author. \r\nAuthors submit content or revisions using the GitHub interface. \r\n\r\nWe would like to thank the Python community for building an amazing architecture. We would like to thank the \r\nstatistics community for building an amazing architecture. \r\n\r\nSimilarly, the book is only possible because of the [PyMC](http://github.com/pymc-devs/pymc) library. A big thanks to the core devs of PyMC: Chris Fonnesbeck, Anand Patil, David Huard and John Salvatier.\r\n\r\nOne final thanks. This book was generated by IPython Notebook, a wonderful tool for developing in Python. We thank the IPython \r\ncommunity for developing the Notebook interface. All IPython notebook files are available for download on the GitHub repository. \r\n\r\n\r\n\r\n####Contact\r\nContact the main author, Cam Davidson-Pilon at cam.davidson.pilon@gmail.com or [@cmrndp](https://twitter.com/cmrn_dp)\r\n\r\n\r\n![created by Stef Gibson at StefGibson.com](http://i.imgur.com/6DKYbPb.png?1)","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 00000000..e65cedff --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,70 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f0f3f3; } +.highlight .c { color: #0099FF; font-style: italic } /* Comment */ +.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #006699; font-weight: bold } /* Keyword */ +.highlight .o { color: #555555 } /* Operator */ +.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #009999 } /* Comment.Preproc */ +.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ +.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.highlight .go { color: #AAAAAA } /* Generic.Output */ +.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #99CC66 } /* Generic.Traceback */ +.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #006699 } /* Keyword.Pseudo */ +.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #FF6600 } /* Literal.Number */ +.highlight .s { color: #CC3300 } /* Literal.String */ +.highlight .na { color: #330099 } /* Name.Attribute */ +.highlight .nb { color: #336666 } /* Name.Builtin */ +.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ +.highlight .no { color: #336600 } /* Name.Constant */ +.highlight .nd { color: #9999FF } /* Name.Decorator */ +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #CC00FF } /* Name.Function */ +.highlight .nl { color: #9999FF } /* Name.Label */ +.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #003333 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ +.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ +.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ +.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ +.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ +.highlight .sc { color: #CC3300 } /* Literal.String.Char */ +.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ +.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ +.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ +.highlight .sx { color: #CC3300 } /* Literal.String.Other */ +.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ +.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ +.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ +.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #003333 } /* Name.Variable.Class */ +.highlight .vg { color: #003333 } /* Name.Variable.Global */ +.highlight .vi { color: #003333 } /* Name.Variable.Instance */ +.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css new file mode 100644 index 00000000..2bd468ab --- /dev/null +++ b/stylesheets/stylesheet.css @@ -0,0 +1,431 @@ +/******************************************************************************* +Slate Theme for GitHub Pages +by Jason Costello, @jsncostello +*******************************************************************************/ + +@import url(pygment_trac.css); + +/******************************************************************************* +MeyerWeb Reset +*******************************************************************************/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + vertical-align: baseline; +} + +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +ol, ul { + list-style: none; +} + +blockquote, q { +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +a:focus { + outline: none; +} + +/******************************************************************************* +Theme Styles +*******************************************************************************/ + +body { + box-sizing: border-box; + color:#373737; + background: #212121; + font-size: 16px; + font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} + +h1, h2, h3, h4, h5, h6 { + margin: 10px 0; + font-weight: 700; + color:#222222; + font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; + letter-spacing: -1px; +} + +h1 { + font-size: 36px; + font-weight: 700; +} + +h2 { + padding-bottom: 10px; + font-size: 32px; + background: url('../images/bg_hr.png') repeat-x bottom; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 21px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 16px; +} + +p { + margin: 10px 0 15px 0; +} + +footer p { + color: #f2f2f2; +} + +a { + text-decoration: none; + color: #007edf; + text-shadow: none; + + transition: color 0.5s ease; + transition: text-shadow 0.5s ease; + -webkit-transition: color 0.5s ease; + -webkit-transition: text-shadow 0.5s ease; + -moz-transition: color 0.5s ease; + -moz-transition: text-shadow 0.5s ease; + -o-transition: color 0.5s ease; + -o-transition: text-shadow 0.5s ease; + -ms-transition: color 0.5s ease; + -ms-transition: text-shadow 0.5s ease; +} + +#main_content a:hover { + color: #0069ba; + text-shadow: #0090ff 0px 0px 2px; +} + +footer a:hover { + color: #43adff; + text-shadow: #0090ff 0px 0px 2px; +} + +em { + font-style: italic; +} + +strong { + font-weight: bold; +} + +img { + position: relative; + margin: 0 auto; + max-width: 739px; + padding: 5px; + margin: 10px 0 10px 0; + border: 1px solid #ebebeb; + + box-shadow: 0 0 5px #ebebeb; + -webkit-box-shadow: 0 0 5px #ebebeb; + -moz-box-shadow: 0 0 5px #ebebeb; + -o-box-shadow: 0 0 5px #ebebeb; + -ms-box-shadow: 0 0 5px #ebebeb; +} + +pre, code { + width: 100%; + color: #222; + background-color: #fff; + + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + font-size: 14px; + + border-radius: 2px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + + + +} + +pre { + width: 100%; + padding: 10px; + box-shadow: 0 0 10px rgba(0,0,0,.1); + overflow: auto; +} + +code { + padding: 3px; + margin: 0 3px; + box-shadow: 0 0 10px rgba(0,0,0,.1); +} + +pre code { + display: block; + box-shadow: none; +} + +blockquote { + color: #666; + margin-bottom: 20px; + padding: 0 0 0 20px; + border-left: 3px solid #bbb; +} + +ul, ol, dl { + margin-bottom: 15px +} + +ul li { + list-style: inside; + padding-left: 20px; +} + +ol li { + list-style: decimal inside; + padding-left: 20px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + padding-left: 20px; + font-style: italic; +} + +dl p { + padding-left: 20px; + font-style: italic; +} + +hr { + height: 1px; + margin-bottom: 5px; + border: none; + background: url('../images/bg_hr.png') repeat-x center; +} + +table { + border: 1px solid #373737; + margin-bottom: 20px; + text-align: left; + } + +th { + font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; + padding: 10px; + background: #373737; + color: #fff; + } + +td { + padding: 10px; + border: 1px solid #373737; + } + +form { + background: #f2f2f2; + padding: 20px; +} + +img { + width: 100%; + max-width: 100%; +} + +/******************************************************************************* +Full-Width Styles +*******************************************************************************/ + +.outer { + width: 100%; +} + +.inner { + position: relative; + max-width: 640px; + padding: 20px 10px; + margin: 0 auto; +} + +#forkme_banner { + display: block; + position: absolute; + top:0; + right: 10px; + z-index: 10; + padding: 10px 50px 10px 10px; + color: #fff; + background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; + font-weight: 700; + box-shadow: 0 0 10px rgba(0,0,0,.5); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#header_wrap { + background: #212121; + background: -moz-linear-gradient(top, #373737, #212121); + background: -webkit-linear-gradient(top, #373737, #212121); + background: -ms-linear-gradient(top, #373737, #212121); + background: -o-linear-gradient(top, #373737, #212121); + background: linear-gradient(top, #373737, #212121); +} + +#header_wrap .inner { + padding: 50px 10px 30px 10px; +} + +#project_title { + margin: 0; + color: #fff; + font-size: 42px; + font-weight: 700; + text-shadow: #111 0px 0px 10px; +} + +#project_tagline { + color: #fff; + font-size: 24px; + font-weight: 300; + background: none; + text-shadow: #111 0px 0px 10px; +} + +#downloads { + position: absolute; + width: 210px; + z-index: 10; + bottom: -40px; + right: 0; + height: 70px; + background: url('../images/icon_download.png') no-repeat 0% 90%; +} + +.zip_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom left; +} + +.tar_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom right; + margin-left: 10px; +} + +.zip_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top left; +} + +.tar_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top right; +} + +#main_content_wrap { + background: #f2f2f2; + border-top: 1px solid #111; + border-bottom: 1px solid #111; +} + +#main_content { + padding-top: 40px; +} + +#footer_wrap { + background: #212121; +} + + + +/******************************************************************************* +Small Device Styles +*******************************************************************************/ + +@media screen and (max-width: 480px) { + body { + font-size:14px; + } + + #downloads { + display: none; + } + + .inner { + min-width: 320px; + max-width: 480px; + } + + #project_title { + font-size: 32px; + } + + h1 { + font-size: 28px; + } + + h2 { + font-size: 24px; + } + + h3 { + font-size: 21px; + } + + h4 { + font-size: 18px; + } + + h5 { + font-size: 14px; + } + + h6 { + font-size: 12px; + } + + code, pre { + min-width: 320px; + max-width: 480px; + font-size: 11px; + } + +} From 8f2cd8f9dc7e453c48ce53df7a17e7c6dc2e4e48 Mon Sep 17 00:00:00 2001 From: Cameron Davidson-Pilon Date: Wed, 12 Jun 2013 14:16:02 -0700 Subject: [PATCH 02/42] Create gh-pages branch via GitHub --- index.html | 4 ++-- params.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index c40a6ece..043daf89 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - + @@ -19,7 +19,7 @@ View on GitHub

Bayesian Methods for Hackers

-

An introduction to Bayesian methods + probabilistic programming in data analysis with a computation/understanding-first, mathematics-second point of view. All in pure Python ;)

+

An intro to Bayesian methods + probabilistic programming with a computation/understanding-first, mathematics-second point of view.

Download this project as a .zip file diff --git a/params.json b/params.json index d8b2d3ca..e0d95747 100644 --- a/params.json +++ b/params.json @@ -1 +1 @@ -{"name":"Bayesian Methods for Hackers","tagline":"An introduction to Bayesian methods + probabilistic programming in data analysis with a computation/understanding-first, mathematics-second point of view. All in pure Python ;) ","body":"The Bayesian method is the natural approach to inference, yet it is hidden from readers behind chapters of slow, mathematical analysis. The typical text on Bayesian inference involves two to three chapters on probability theory, then enters what Bayesian inference is. Unfortunately, due to mathematical intractability of most Bayesian models, the reader is only shown simple, artificial examples. This can leave the user with a *so-what* feeling about Bayesian inference. In fact, this was the author's own prior opinion.\r\n\r\n\r\n\r\nAfter some recent success of Bayesian methods in machine-learning competitions, I decided to investigate the subject again. Even with my mathematical background, it took me three straight-days of reading examples and trying to put the pieces together to understand the methods. There was simply not enough literature bridging theory to practice. The problem with my misunderstanding was the disconnect between Bayesian mathematics and probabilistic programming. That being said, I suffered then so the reader would not have to now. This book attempts to bridge the gap.\r\n\r\nIf Bayesian inference is the destination, then mathematical analysis is a particular path to towards it. On the other hand, computing power is cheap enough that we can afford to take an alternate route via probabilistic programming. The latter path is much more useful, as it denies the necessity of mathematical intervention at each step, that is, we remove often-intractable mathematical analysis as a prerequisite to Bayesian inference. Simply put, this latter computational path proceeds via small intermediate jumps from beginning to end, where as the first path proceeds by enormous leaps, often landing far away from our target. Furthermore, without a strong mathematical background, the analysis required by the first path cannot even take place.\r\n\r\n*Bayesian Methods for Hackers* is designed as a introduction to Bayesian inference from a computational/understanding-first, and mathematics-second, point of view. Of course as an introductory book, we can only leave it at that: an introductory book. For the mathematically trained, they may cure the curiosity this text generates with other texts designed with mathematical analysis in mind. For the enthusiast with less mathematical-background, or one who is not interested in the mathematics but simply the practice of Bayesian methods, this text should be sufficient and entertaining.\r\n\r\n\r\nThe choice of PyMC as the probabilistic programming language is two-fold. As of this writing, there is currently no central resource for examples and explanations in the PyMC universe. The official documentation assumes prior knowledge of Bayesian inference and probabilistic programming. We hope this book encourages users at every level to look at PyMC. Secondly, with recent core developments and popularity of the scientific stack in Python, PyMC is likely to become a core component soon enough.\r\n\r\nPyMC does have dependencies to run, namely NumPy and (optionally) SciPy. To not limit the user, the examples in this book will rely only on PyMC, NumPy, SciPy and Matplotlib only.\r\n\r\n\r\nContents\r\n------\r\n\r\n(The below chapters are rendered via the *nbviewer* at\r\n[nbviewer.ipython.org/](http://nbviewer.ipython.org/), and is read-only and rendered in real-time.\r\nInteractive notebooks + examples can be downloaded by cloning! \r\n\r\n\r\n* [**Prologue:**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Prologue/Prologue.ipynb) Why we do it.\r\n\r\n* [**Chapter 1: Introduction to Bayesian Methods**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter1_Introduction/Chapter1_Introduction.ipynb)\r\n Introduction to the philosophy and practice of Bayesian methods and answering the question, \"What is probabilistic programming?\" Examples include:\r\n - Inferring human behaviour changes from text message rates\r\n \r\n* [**Chapter 2: A little more on PyMC**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter2_MorePyMC/MorePyMC.ipynb)\r\n We explore modeling Bayesian problems using Python's PyMC library through examples. How do we create Bayesian models? Examples include:\r\n - Detecting the frequency of cheating students, while avoiding liars\r\n - Calculating probabilities of the Challenger space-shuttle disaster\r\n \r\n* [**Chapter 3: Opening the Black Box of MCMC**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter3_MCMC/IntroMCMC.ipynb)\r\n We discuss how MCMC operates and diagnostic tools. Examples include:\r\n - Bayesian clustering with mixture models\r\n \r\n* [**Chapter 4: The Greatest Theorem Never Told**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter4_TheGreatestTheoremNeverTold/LawOfLargeNumbers.ipynb)\r\n We explore an incredibly useful, and dangerous, theorem: The Law of Large Numbers. Examples include:\r\n - Exploring a Kaggle dataset and the pitfalls of naive analysis\r\n - How to sort Reddit comments from best to worst (not as easy as you think)\r\n \r\n* [**Chapter 5: Would you rather lose an arm or a leg?**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter5_LossFunctions/LossFunctions.ipynb)\r\n The introduction of loss functions and their (awesome) use in Bayesian methods. Examples include:\r\n - Solving the *Price is Right*'s Showdown\r\n - Optimizing financial predictions\r\n - Winning solution to the Kaggle Dark World's competition\r\n \r\n* [**Chapter 6: Getting our *prior*-ities straight**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter6_Priorities/Priors.ipynb)\r\n Probably the most important chapter. We draw on expert opinions to answer questions. Examples include:\r\n - Multi-Armed Bandits and the Bayesian Bandit solution.\r\n - What is the relationship between data sample size and prior?\r\n - Estimating financial unknowns using expert priors\r\n \r\n We explore useful tips to be objective in analysis as well as common pitfalls of priors. \r\n \r\n* **Chapter X1: Bayesian methods in Machine Learning and Model Validation** \r\n We explore how to resolve the overfitting problem plus popular ML methods. Also included are probablistic explainations of ridge regression and LASSO regression.\r\n - Tim Saliman's winning solution to Kaggle's *Don't Overfit* problem \r\n \r\n* **Chapter X2: More PyMC Hackery**\r\n We explore the gritty details of PyMC. Examples include:\r\n - Analysis on real-time GitHub repo stars and forks.\r\n\r\n\r\n \r\n**More questions about PyMC?**\r\nPlease post your modeling, convergence, or any other PyMC question on [cross-validated](http://stats.stackexchange.com/), the statistics stack-exchange.\r\n \r\n \r\nUsing the book\r\n-------\r\n\r\nThe book can be read in three different ways, starting from most recommended to least recommended: \r\n\r\n1. The most recommended option is to clone the repository to download the .ipynb files to your local machine. If you have IPython installed, you can view the \r\nchapters in your browser *plus* edit and run the code provided (and try some practice questions). This is the preferred option to read\r\nthis book, though it comes with some dependencies. \r\n - IPython v0.13 (or greater) is a requirement to view the ipynb files. It can be downloaded [here](http://ipython.org/). IPython notebooks can be run by `(your-virtualenv) ~/path/to/the/book/Chapter1_Introduction $ ipython notebook`\r\n - For Linux users, you should not have a problem installing NumPy, SciPy, Matplotlib and PyMC. For Windows users, check out [pre-compiled versions](http://www.lfd.uci.edu/~gohlke/pythonlibs/) if you have difficulty. \r\n - In the styles/ directory are a number of files (.matplotlirc) that used to make things pretty. These are not only designed for the book, but they offer many improvements over the default settings of matplotlib.\r\n - while technically not required, it may help to run the IPython notebook with `ipython notebook --pylab inline` flag if you encounter io errors.\r\n2. The second, preferred, option is to use the nbviewer.ipython.org site, which display IPython notebooks in the browser ([example](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter1_Introduction/Chapter1_Introduction.ipynb)).\r\nThe contents are updated synchronously as commits are made to the book. You can use the Contents section above to link to the chapters.\r\n \r\n3. **PDF versions are available! Look in the PDF/ directory.** PDFs are the least-prefered method to read the book, as pdf's are static and non-interactive. If PDFs are desired, they can be created dynamically using Chrome's builtin print-to-pdf feature or using the [nbconvert](https://github.com/ipython/nbconvert) utility.\r\n \r\n\r\nInstallation and configuration\r\n------\r\nIf you would like to run the IPython notebooks locally, (option 1. above), you'll need to install the following:\r\n- IPython 0.13 is a requirement to view the ipynb files. It can be downloaded [here](http://ipython.org/ipython-doc/dev/install/index.html)\r\n- For Linux users, you should not have a problem installing NumPy, SciPy and PyMC. For Windows users, check out [pre-compiled versions](http://www.lfd.uci.edu/~gohlke/pythonlibs/) if you have difficulty. \r\n - also recommended, for data-mining exercises, are [PRAW](https://github.com/praw-dev/praw) and [requests](https://github.com/kennethreitz/requests). \r\n\r\n- In the styles/ directory are a number of files that are customized for the notebook. \r\nThese are not only designed for the book, but they offer many improvements over the \r\ndefault settings of matplotlib and the IPython notebook. The in notebook style has not been finalized yet.\r\n\r\n\r\n\r\nDevelopment\r\n------\r\n\r\nThis book has an unusual development design. The content is open-sourced, meaning anyone can be an author. \r\nAuthors submit content or revisions using the GitHub interface. \r\n\r\nWe would like to thank the Python community for building an amazing architecture. We would like to thank the \r\nstatistics community for building an amazing architecture. \r\n\r\nSimilarly, the book is only possible because of the [PyMC](http://github.com/pymc-devs/pymc) library. A big thanks to the core devs of PyMC: Chris Fonnesbeck, Anand Patil, David Huard and John Salvatier.\r\n\r\nOne final thanks. This book was generated by IPython Notebook, a wonderful tool for developing in Python. We thank the IPython \r\ncommunity for developing the Notebook interface. All IPython notebook files are available for download on the GitHub repository. \r\n\r\n\r\n\r\n####Contact\r\nContact the main author, Cam Davidson-Pilon at cam.davidson.pilon@gmail.com or [@cmrndp](https://twitter.com/cmrn_dp)\r\n\r\n\r\n![created by Stef Gibson at StefGibson.com](http://i.imgur.com/6DKYbPb.png?1)","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file +{"name":"Bayesian Methods for Hackers","tagline":"An intro to Bayesian methods + probabilistic programming with a computation/understanding-first, mathematics-second point of view. ","body":"The Bayesian method is the natural approach to inference, yet it is hidden from readers behind chapters of slow, mathematical analysis. The typical text on Bayesian inference involves two to three chapters on probability theory, then enters what Bayesian inference is. Unfortunately, due to mathematical intractability of most Bayesian models, the reader is only shown simple, artificial examples. This can leave the user with a *so-what* feeling about Bayesian inference. In fact, this was the author's own prior opinion.\r\n\r\n\r\n\r\nAfter some recent success of Bayesian methods in machine-learning competitions, I decided to investigate the subject again. Even with my mathematical background, it took me three straight-days of reading examples and trying to put the pieces together to understand the methods. There was simply not enough literature bridging theory to practice. The problem with my misunderstanding was the disconnect between Bayesian mathematics and probabilistic programming. That being said, I suffered then so the reader would not have to now. This book attempts to bridge the gap.\r\n\r\nIf Bayesian inference is the destination, then mathematical analysis is a particular path to towards it. On the other hand, computing power is cheap enough that we can afford to take an alternate route via probabilistic programming. The latter path is much more useful, as it denies the necessity of mathematical intervention at each step, that is, we remove often-intractable mathematical analysis as a prerequisite to Bayesian inference. Simply put, this latter computational path proceeds via small intermediate jumps from beginning to end, where as the first path proceeds by enormous leaps, often landing far away from our target. Furthermore, without a strong mathematical background, the analysis required by the first path cannot even take place.\r\n\r\n*Bayesian Methods for Hackers* is designed as a introduction to Bayesian inference from a computational/understanding-first, and mathematics-second, point of view. Of course as an introductory book, we can only leave it at that: an introductory book. For the mathematically trained, they may cure the curiosity this text generates with other texts designed with mathematical analysis in mind. For the enthusiast with less mathematical-background, or one who is not interested in the mathematics but simply the practice of Bayesian methods, this text should be sufficient and entertaining.\r\n\r\n\r\nThe choice of PyMC as the probabilistic programming language is two-fold. As of this writing, there is currently no central resource for examples and explanations in the PyMC universe. The official documentation assumes prior knowledge of Bayesian inference and probabilistic programming. We hope this book encourages users at every level to look at PyMC. Secondly, with recent core developments and popularity of the scientific stack in Python, PyMC is likely to become a core component soon enough.\r\n\r\nPyMC does have dependencies to run, namely NumPy and (optionally) SciPy. To not limit the user, the examples in this book will rely only on PyMC, NumPy, SciPy and Matplotlib only.\r\n\r\n\r\nContents\r\n------\r\n\r\n(The below chapters are rendered via the *nbviewer* at\r\n[nbviewer.ipython.org/](http://nbviewer.ipython.org/), and is read-only and rendered in real-time.\r\nInteractive notebooks + examples can be downloaded by cloning! \r\n\r\n\r\n* [**Prologue:**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Prologue/Prologue.ipynb) Why we do it.\r\n\r\n* [**Chapter 1: Introduction to Bayesian Methods**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter1_Introduction/Chapter1_Introduction.ipynb)\r\n Introduction to the philosophy and practice of Bayesian methods and answering the question, \"What is probabilistic programming?\" Examples include:\r\n - Inferring human behaviour changes from text message rates\r\n \r\n* [**Chapter 2: A little more on PyMC**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter2_MorePyMC/MorePyMC.ipynb)\r\n We explore modeling Bayesian problems using Python's PyMC library through examples. How do we create Bayesian models? Examples include:\r\n - Detecting the frequency of cheating students, while avoiding liars\r\n - Calculating probabilities of the Challenger space-shuttle disaster\r\n \r\n* [**Chapter 3: Opening the Black Box of MCMC**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter3_MCMC/IntroMCMC.ipynb)\r\n We discuss how MCMC operates and diagnostic tools. Examples include:\r\n - Bayesian clustering with mixture models\r\n \r\n* [**Chapter 4: The Greatest Theorem Never Told**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter4_TheGreatestTheoremNeverTold/LawOfLargeNumbers.ipynb)\r\n We explore an incredibly useful, and dangerous, theorem: The Law of Large Numbers. Examples include:\r\n - Exploring a Kaggle dataset and the pitfalls of naive analysis\r\n - How to sort Reddit comments from best to worst (not as easy as you think)\r\n \r\n* [**Chapter 5: Would you rather lose an arm or a leg?**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter5_LossFunctions/LossFunctions.ipynb)\r\n The introduction of loss functions and their (awesome) use in Bayesian methods. Examples include:\r\n - Solving the *Price is Right*'s Showdown\r\n - Optimizing financial predictions\r\n - Winning solution to the Kaggle Dark World's competition\r\n \r\n* [**Chapter 6: Getting our *prior*-ities straight**](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter6_Priorities/Priors.ipynb)\r\n Probably the most important chapter. We draw on expert opinions to answer questions. Examples include:\r\n - Multi-Armed Bandits and the Bayesian Bandit solution.\r\n - What is the relationship between data sample size and prior?\r\n - Estimating financial unknowns using expert priors\r\n \r\n We explore useful tips to be objective in analysis as well as common pitfalls of priors. \r\n \r\n* **Chapter X1: Bayesian methods in Machine Learning and Model Validation** \r\n We explore how to resolve the overfitting problem plus popular ML methods. Also included are probablistic explainations of ridge regression and LASSO regression.\r\n - Tim Saliman's winning solution to Kaggle's *Don't Overfit* problem \r\n \r\n* **Chapter X2: More PyMC Hackery**\r\n We explore the gritty details of PyMC. Examples include:\r\n - Analysis on real-time GitHub repo stars and forks.\r\n\r\n\r\n \r\n**More questions about PyMC?**\r\nPlease post your modeling, convergence, or any other PyMC question on [cross-validated](http://stats.stackexchange.com/), the statistics stack-exchange.\r\n \r\n \r\nUsing the book\r\n-------\r\n\r\nThe book can be read in three different ways, starting from most recommended to least recommended: \r\n\r\n1. The most recommended option is to clone the repository to download the .ipynb files to your local machine. If you have IPython installed, you can view the \r\nchapters in your browser *plus* edit and run the code provided (and try some practice questions). This is the preferred option to read\r\nthis book, though it comes with some dependencies. \r\n - IPython v0.13 (or greater) is a requirement to view the ipynb files. It can be downloaded [here](http://ipython.org/). IPython notebooks can be run by `(your-virtualenv) ~/path/to/the/book/Chapter1_Introduction $ ipython notebook`\r\n - For Linux users, you should not have a problem installing NumPy, SciPy, Matplotlib and PyMC. For Windows users, check out [pre-compiled versions](http://www.lfd.uci.edu/~gohlke/pythonlibs/) if you have difficulty. \r\n - In the styles/ directory are a number of files (.matplotlirc) that used to make things pretty. These are not only designed for the book, but they offer many improvements over the default settings of matplotlib.\r\n - while technically not required, it may help to run the IPython notebook with `ipython notebook --pylab inline` flag if you encounter io errors.\r\n2. The second, preferred, option is to use the nbviewer.ipython.org site, which display IPython notebooks in the browser ([example](http://nbviewer.ipython.org/urls/raw.github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/master/Chapter1_Introduction/Chapter1_Introduction.ipynb)).\r\nThe contents are updated synchronously as commits are made to the book. You can use the Contents section above to link to the chapters.\r\n \r\n3. **PDF versions are available! Look in the PDF/ directory.** PDFs are the least-prefered method to read the book, as pdf's are static and non-interactive. If PDFs are desired, they can be created dynamically using Chrome's builtin print-to-pdf feature or using the [nbconvert](https://github.com/ipython/nbconvert) utility.\r\n \r\n\r\nInstallation and configuration\r\n------\r\nIf you would like to run the IPython notebooks locally, (option 1. above), you'll need to install the following:\r\n- IPython 0.13 is a requirement to view the ipynb files. It can be downloaded [here](http://ipython.org/ipython-doc/dev/install/index.html)\r\n- For Linux users, you should not have a problem installing NumPy, SciPy and PyMC. For Windows users, check out [pre-compiled versions](http://www.lfd.uci.edu/~gohlke/pythonlibs/) if you have difficulty. \r\n - also recommended, for data-mining exercises, are [PRAW](https://github.com/praw-dev/praw) and [requests](https://github.com/kennethreitz/requests). \r\n\r\n- In the styles/ directory are a number of files that are customized for the notebook. \r\nThese are not only designed for the book, but they offer many improvements over the \r\ndefault settings of matplotlib and the IPython notebook. The in notebook style has not been finalized yet.\r\n\r\n\r\n\r\nDevelopment\r\n------\r\n\r\nThis book has an unusual development design. The content is open-sourced, meaning anyone can be an author. \r\nAuthors submit content or revisions using the GitHub interface. \r\n\r\nWe would like to thank the Python community for building an amazing architecture. We would like to thank the \r\nstatistics community for building an amazing architecture. \r\n\r\nSimilarly, the book is only possible because of the [PyMC](http://github.com/pymc-devs/pymc) library. A big thanks to the core devs of PyMC: Chris Fonnesbeck, Anand Patil, David Huard and John Salvatier.\r\n\r\nOne final thanks. This book was generated by IPython Notebook, a wonderful tool for developing in Python. We thank the IPython \r\ncommunity for developing the Notebook interface. All IPython notebook files are available for download on the GitHub repository. \r\n\r\n\r\n\r\n####Contact\r\nContact the main author, Cam Davidson-Pilon at cam.davidson.pilon@gmail.com or [@cmrndp](https://twitter.com/cmrn_dp)\r\n\r\n\r\n![created by Stef Gibson at StefGibson.com](http://i.imgur.com/6DKYbPb.png?1)","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file From b2e0002489fb8c5c310c15b14be1b5b0a9bd0443 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sat, 15 Jun 2013 20:20:58 -0400 Subject: [PATCH 03/42] First pages commit --- index.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 00000000..2fa8aafb --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +"Test page" From c353aa06d4379c0063fe8bcd5c31105d50ad856a Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sat, 15 Jun 2013 20:53:49 -0400 Subject: [PATCH 04/42] I have no idea what I am doing --- index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/index.html b/index.html index 2fa8aafb..e69de29b 100644 --- a/index.html +++ b/index.html @@ -1 +0,0 @@ -"Test page" From 4cc2a446a365be8d018bec496ed130fa28d7b500 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 00:33:49 -0400 Subject: [PATCH 05/42] added custom borders + examples --- images/test.png | Bin 0 -> 225 bytes images/test2.png | Bin 0 -> 214 bytes index.html | 233 ++++++++++++++++++++++++++++--------- stylesheets/stylesheet.css | 66 +++++++---- 4 files changed, 218 insertions(+), 81 deletions(-) create mode 100644 images/test.png create mode 100644 images/test2.png diff --git a/images/test.png b/images/test.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6a0f8a49d03e7c354d205775ffdefc09c6a5f1 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0y~yU{(OKIXIYrWFITfPawrv;1OBOz`!jG!i)^F=12eq z*-JcqUD@xl39v{i=K6|#0Sd`xhD4M&=jZ08=9K`s3=Gaisfi`2DGKG8B^e6tp1uJo zda3L{@o-NU$B>F!Z?75h9#CLlaO`TadJ!j^k+hDl$)rroMBZ?75h9#CLlaO`TadJ!j^k+hDl$)rrojv7@j28M(U3=BMC3=IdF7!q!Aw=}cfThy!F2eQ!9)z4*}Q$iB} D`gA$z literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 043daf89..23dac310 100644 --- a/index.html +++ b/index.html @@ -5,9 +5,19 @@ - + + - + Bayesian Methods for Hackers @@ -18,8 +28,7 @@
View on GitHub -

Bayesian Methods for Hackers

-

An intro to Bayesian methods + probabilistic programming with a computation/understanding-first, mathematics-second point of view.

+

Probablistic Programming & Bayesian Methods for Hackers

Download this project as a .zip file @@ -31,9 +40,24 @@

An intro to Bayesian methods + probabilistic programmin
-

The Bayesian method is the natural approach to inference, yet it is hidden from readers behind chapters of slow, mathematical analysis. The typical text on Bayesian inference involves two to three chapters on probability theory, then enters what Bayesian inference is. Unfortunately, due to mathematical intractability of most Bayesian models, the reader is only shown simple, artificial examples. This can leave the user with a so-what feeling about Bayesian inference. In fact, this was the author's own prior opinion.

+

An intro to Bayesian methods and probabilistic programming from a computation/understanding-first, mathematics-second point of view.

+ + + +

Prolouge

+ + The Bayesian method is the natural approach to inference, yet it is hidden from readers behind chapters of slow, mathematical analysis. The typical text on Bayesian inference involves two to three chapters on probability theory, then enters what Bayesian inference is. Unfortunately, due to mathematical intractability of most Bayesian models, the reader is only shown simple, artificial examples. This can leave the user with a so-what feeling about Bayesian inference. In fact, this was the author's own prior opinion.

After some recent success of Bayesian methods in machine-learning competitions, I decided to investigate the subject again. Even with my mathematical background, it took me three straight-days of reading examples and trying to put the pieces together to understand the methods. There was simply not enough literature bridging theory to practice. The problem with my misunderstanding was the disconnect between Bayesian mathematics and probabilistic programming. That being said, I suffered then so the reader would not have to now. This book attempts to bridge the gap.

+

If Bayesian inference is the destination, then mathematical analysis is a particular path to towards it. On the other hand, computing power is cheap enough that we can afford to take an alternate route via probabilistic programming. The latter path is much more useful, as it denies the necessity of mathematical intervention at each step, that is, we remove often-intractable mathematical analysis as a prerequisite to Bayesian inference. Simply put, this latter computational path proceeds via small intermediate jumps from beginning to end, where as the first path proceeds by enormous leaps, often landing far away from our target. Furthermore, without a strong mathematical background, the analysis required by the first path cannot even take place.

@@ -54,78 +78,163 @@

  • Prologue: Why we do it.

  • Chapter 1: Introduction to Bayesian Methods -Introduction to the philosophy and practice of Bayesian methods and answering the question, "What is probabilistic programming?" Examples include:

    - -
      -
    • Inferring human behaviour changes from text message rates
    • -
    +Introduction to the philosophy and practice of Bayesian methods and answering the question, "What is probabilistic programming?"

  • Chapter 2: A little more on PyMC -We explore modeling Bayesian problems using Python's PyMC library through examples. How do we create Bayesian models? Examples include:

    - -
      -
    • Detecting the frequency of cheating students, while avoiding liars
    • -
    • Calculating probabilities of the Challenger space-shuttle disaster
    • -
    -
  • +We explore modeling Bayesian problems using Python's PyMC library through examples. How do we create Bayesian models?

  • Chapter 3: Opening the Black Box of MCMC -We discuss how MCMC operates and diagnostic tools. Examples include:

    - -
      -
    • Bayesian clustering with mixture models
    • -
    -
  • +We discuss how MCMC, Markov Chain Monte Carlo, operates and diagnostic tools.

  • Chapter 4: The Greatest Theorem Never Told -We explore an incredibly useful, and dangerous, theorem: The Law of Large Numbers. Examples include:

    - -
      -
    • Exploring a Kaggle dataset and the pitfalls of naive analysis
    • -
    • How to sort Reddit comments from best to worst (not as easy as you think)
    • -
    +We explore an incredibly useful, and dangerous, theorem: The Law of Large Numbers.

  • Chapter 5: Would you rather lose an arm or a leg? -The introduction of loss functions and their (awesome) use in Bayesian methods. Examples include:

    - -
      -
    • Solving the Price is Right's Showdown
    • -
    • Optimizing financial predictions
    • -
    • Winning solution to the Kaggle Dark World's competition
    • -
    +The introduction of loss functions and their (awesome) use in Bayesian methods.

  • Chapter 6: Getting our prior-ities straight -Probably the most important chapter. We draw on expert opinions to answer questions. Examples include:

    - -
      -
    • Multi-Armed Bandits and the Bayesian Bandit solution.
    • -
    • What is the relationship between data sample size and prior?
    • -
    • Estimating financial unknowns using expert priors
    • -
    -

    We explore useful tips to be objective in analysis as well as common pitfalls of priors.

    +Probably the most important chapter. We examine our prior choices and draw on expert opinions craft priors.

  • Chapter X1: Bayesian methods in Machine Learning and Model Validation -We explore how to resolve the overfitting problem plus popular ML methods. Also included are probablistic explainations of ridge regression and LASSO regression.

    +We explore how to resolve the overfitting problem plus popular ML methods.

    -
      -
    • Tim Saliman's winning solution to Kaggle's Don't Overfit problem
    • -
  • Chapter X2: More PyMC Hackery -We explore the gritty details of PyMC. Examples include:

    - -
      -
    • Analysis on real-time GitHub repo stars and forks.
    • -
    +We explore the gritty details of PyMC.

  • More questions about PyMC? Please post your modeling, convergence, or any other PyMC question on cross-validated, the statistics stack-exchange.

    +

    +Examples from the book

    +

    Below are just some examples from Bayesian Methods for Hackers. +

    +

    Inferring behaviour changes using SMS message rates

    +
    +

    Chapter 1

    + +

    + By only visually inspecting a noisy stream of daily SMS message rates, it can be difficult to detect a sudden change in the + users's SMS behaviour. In our first probabilistic programming example, we solve the problem by setting up a simple model to detect probable + points where the user's behaviour changed, and examine pre and post behaviour.

    + + + +

    +
    + +

    Discovering cheating while maintaing privacy

    +
    +

    Chapter 2

    + +

    A very simple algorithm can be used to infer proportions of cheaters, while also maintaining the privacy of + the population. + +

    +
    + +

    Challenger Space Shuttle disaster

    +
    +

    Chapter 2

    + +

    + On January 28, 1986, the twenty-fifth flight of the U.S. space shuttle program ended in disaster when one of the rocket boosters of the Shuttle Challenger exploded shortly after lift-off, killing all seven crew members. The presidential commission on the accident concluded that it was caused by the failure of an O-ring in a field joint on the rocket booster, and that this failure was due to a faulty design that made the O-ring unacceptably sensitive to a number of factors including outside temperature. Of the previous 24 flights, data were available on failures of O-rings on 23, (one was lost at sea), and these data were discussed on the evening preceding the Challenger launch, but unfortunately only the data corresponding to the 7 flights on which there was a damage incident were considered important and these were thought to show no obvious trend.

    + +

    We examine this data in a Bayesian framework and show strong support that a faulty O-ring, caused by low abmient temperatures, was likely the cause of the disaster.

    + +

    +
    +

    Understanding Bayesian posteriors and MCMC

    +
    +

    Chapter 3

    + +

    + The prior-posterior paradigm is visualized to make understanding the MCMC algorithm more clear. Below we show how two different priors + can result in two different posteriors. + + +

    +
    + +

    Clustering data

    +
    +

    Chapter 3

    + +

    + + Given data, sometimes we wish to ask whether there may be more than one hidden source that's creating it. A priori, it is not + always clear this is the case. We introduce a simple model to try to pry data apart into two clusters.

    + +

    +

    A very important consequence of MCMC is convergence, and understanding trace plots is the first step of diagnosis. + + +

    +
    +

    Sorting Reddit comments from best to worst

    +
    +

    Chapter 4

    + +

    + Consider ratings on online products: how often do you trust an average 5-star rating if there is only 1 reviewer? 2 reviewers? 3 reviewers? We implicitly understand that with such few reviewers that the average rating is not a good reflection of the true value of the product. +This has created flaws in how we sort items, and more generally, how we compare items. Many people have realized that sorting online search results by their rating, whether the objects be books, videos, or online comments, return poor results. Often the seemingly top videos or comments have perfect ratings only from a few enthusiastic fans, and truly more quality videos or comments are hidden in later pages with falsely-substandard ratings of around 4.8. How can we correct this? + + + +

    +
    + +

    Solving the Price is Right's Showcase

    +
    +

    Chapter 5

    + +

    + Bless you if you are ever chosen as a contestant on the Price is Right, for here we will show you how to optimize your final price on the Showcase. + +

    +
    + +

    Kaggle's Dark World winning solution

    +
    +

    Chapter 5

    + +

    + We implement Tim Salisman's winning solution to the Dark World's contest on the data science website Kaggle. + + +

    +
    + +

    Bayesian Bandits - a solution to the Multi-Armed Bandit problem

    +
    +

    Chapter 6

    +

    + Suppose you are faced with N slot machines (colourfully called multi-armed bandits). Each bandit has an unknown probability of distributing a prize (assume for now the prizes are the same for each bandit, only the probabilities differ). Some bandits are very generous, others not so much. Of course, you don't know what these probabilities are. By only choosing one bandit per round, our task is devise a strategy to maximize our winnings. + +

    +
    + +

    Stock Market analysis

    +
    +

    Chapter 6

    + +

    + For decades, finance students have been taught using naive statistical methods to pick stocks. This has caused terrible inference, mostly + caused by two things: temporal parameters and ignoring uncertainty. The first is harder to solve, the second fits right into a Bayesian framework. + +

    +
    + + + + +
    +

    Using the book

    @@ -147,8 +256,9 @@

  • The second, preferred, option is to use the nbviewer.ipython.org site, which display IPython notebooks in the browser (example). The contents are updated synchronously as commits are made to the book. You can use the Contents section above to link to the chapters.

  • PDF versions are available! Look in the PDF/ directory. PDFs are the least-prefered method to read the book, as pdf's are static and non-interactive. If PDFs are desired, they can be created dynamically using Chrome's builtin print-to-pdf feature or using the nbconvert utility.

  • -

    -Installation and configuration

    + +

    +Installation and configuration

    If you would like to run the IPython notebooks locally, (option 1. above), you'll need to install the following:

    @@ -171,6 +281,18 @@

    This book has an unusual development design. The content is open-sourced, meaning anyone can be an author. Authors submit content or revisions using the GitHub interface.

    + +

    What to contribute?

    +

    +

      +
    1. The current chapter list is not finalized. If you see something that is missing (MCMC, MAP, Bayesian networks, good prior choices, Potential classes etc.), feel free to start there. +
    2. Cleaning up Python code and making code more PyMC-esque +
    3. Giving better explanations +
    4. Spelling/grammar mistakes +
    5. Suggestions +
    6. Contributing to the IPython notebook styles +
    +

    We would like to thank the Python community for building an amazing architecture. We would like to thank the statistics community for building an amazing architecture.

    @@ -184,7 +306,6 @@

    Contact the main author, Cam Davidson-Pilon at cam.davidson.pilon@gmail.com or @cmrndp

    -

    created by Stef Gibson at StefGibson.com

    diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css index 2bd468ab..17de93e7 100644 --- a/stylesheets/stylesheet.css +++ b/stylesheets/stylesheet.css @@ -29,6 +29,11 @@ time, mark, audio, video { vertical-align: baseline; } +@font-face { + font-family: "Computer Modern"; + src: url('http://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunss.otf'); +} + /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { @@ -59,7 +64,7 @@ body { box-sizing: border-box; color:#373737; background: #212121; - font-size: 16px; + font-size: 17px; font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; line-height: 1.5; -webkit-font-smoothing: antialiased; @@ -81,7 +86,7 @@ h1 { h2 { padding-bottom: 10px; font-size: 32px; - background: url('../images/bg_hr.png') repeat-x bottom; + background: url('../images/test2.png') repeat-x bottom; } h3 { @@ -113,26 +118,16 @@ a { color: #007edf; text-shadow: none; - transition: color 0.5s ease; - transition: text-shadow 0.5s ease; - -webkit-transition: color 0.5s ease; - -webkit-transition: text-shadow 0.5s ease; - -moz-transition: color 0.5s ease; - -moz-transition: text-shadow 0.5s ease; - -o-transition: color 0.5s ease; - -o-transition: text-shadow 0.5s ease; - -ms-transition: color 0.5s ease; - -ms-transition: text-shadow 0.5s ease; + } #main_content a:hover { color: #0069ba; - text-shadow: #0090ff 0px 0px 2px; + text-decoration: underline; } footer a:hover { color: #43adff; - text-shadow: #0090ff 0px 0px 2px; } em { @@ -204,8 +199,8 @@ ul, ol, dl { } ul li { - list-style: inside; - padding-left: 20px; + list-style: none; + padding-left: 15px; } ol li { @@ -217,6 +212,11 @@ dl dt { font-weight: bold; } +#accordion h3:hover{ + cursor:pointer; +} + + dl dd { padding-left: 20px; font-style: italic; @@ -272,7 +272,7 @@ Full-Width Styles .inner { position: relative; - max-width: 640px; + max-width: 700px; padding: 20px 10px; margin: 0 auto; } @@ -306,19 +306,30 @@ Full-Width Styles } #project_title { - margin: 0; + margin: 20px 0px; color: #fff; font-size: 42px; font-weight: 700; text-shadow: #111 0px 0px 10px; + font-family: 'Computer Modern'; } -#project_tagline { - color: #fff; - font-size: 24px; - font-weight: 300; +#desc { + font-size: 26px; + font-weight: 400; background: none; - text-shadow: #111 0px 0px 10px; + font-family: "Computer Modern"; + +} + +#TOC{ + font-size: 23px; + margin-bottom: 30px; + +} + +#TOC ul{ + list-style-type: square; } #downloads { @@ -362,8 +373,10 @@ Full-Width Styles #main_content_wrap { background: #f2f2f2; - border-top: 1px solid #111; - border-bottom: 1px solid #111; + border-top:8px solid transparent; + border-bottom:8px solid transparent; + + border-image: url('/images/test.png') 100% 1 0 stretch; } #main_content { @@ -371,6 +384,9 @@ Full-Width Styles } #footer_wrap { + border-top:8px solid transparent; + + border-image: url('/images/test.png') 100% 1 0 stretch; background: #212121; } From 39d22fea2c7bc35bbca1a59d575018f2fbd8d137 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 00:36:04 -0400 Subject: [PATCH 06/42] renaming borders --- images/{test2.png => border.png} | Bin images/{test.png => larger_border.png} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename images/{test2.png => border.png} (100%) rename images/{test.png => larger_border.png} (100%) diff --git a/images/test2.png b/images/border.png similarity index 100% rename from images/test2.png rename to images/border.png diff --git a/images/test.png b/images/larger_border.png similarity index 100% rename from images/test.png rename to images/larger_border.png From 0d05dd0b5418226503a46af7fe64acbae9af1f09 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 00:37:30 -0400 Subject: [PATCH 07/42] renaming borders --- stylesheets/stylesheet.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css index 17de93e7..58857afc 100644 --- a/stylesheets/stylesheet.css +++ b/stylesheets/stylesheet.css @@ -86,7 +86,7 @@ h1 { h2 { padding-bottom: 10px; font-size: 32px; - background: url('../images/test2.png') repeat-x bottom; + background: url('../images/border.png') repeat-x bottom; } h3 { @@ -376,7 +376,7 @@ Full-Width Styles border-top:8px solid transparent; border-bottom:8px solid transparent; - border-image: url('/images/test.png') 100% 1 0 stretch; + border-image: url('/images/larger_border.png') 100% 1 0 stretch; } #main_content { @@ -386,7 +386,7 @@ Full-Width Styles #footer_wrap { border-top:8px solid transparent; - border-image: url('/images/test.png') 100% 1 0 stretch; + border-image: url('/images/larger_border.png') 100% 1 0 stretch; background: #212121; } From 4e0b016dbfad71164725bf8b00358d1b1aa44d7f Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 00:51:04 -0400 Subject: [PATCH 08/42] fixing border issue --- stylesheets/stylesheet.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css index 58857afc..c6d19743 100644 --- a/stylesheets/stylesheet.css +++ b/stylesheets/stylesheet.css @@ -376,7 +376,7 @@ Full-Width Styles border-top:8px solid transparent; border-bottom:8px solid transparent; - border-image: url('/images/larger_border.png') 100% 1 0 stretch; + border-image: url('../images/larger_border.png') 100% 1 0 stretch; } #main_content { @@ -386,7 +386,7 @@ Full-Width Styles #footer_wrap { border-top:8px solid transparent; - border-image: url('/images/larger_border.png') 100% 1 0 stretch; + border-image: url('../images/larger_border.png') 100% 1 0 stretch; background: #212121; } From 8c949aeeaaafee3f2c6e815818cf53669826bd41 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 00:55:49 -0400 Subject: [PATCH 09/42] removing small border --- stylesheets/stylesheet.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css index c6d19743..00093728 100644 --- a/stylesheets/stylesheet.css +++ b/stylesheets/stylesheet.css @@ -86,7 +86,7 @@ h1 { h2 { padding-bottom: 10px; font-size: 32px; - background: url('../images/border.png') repeat-x bottom; + background: url('../images/bg_hr.png') repeat-x bottom; } h3 { From e599a338030fe86b6cba7c06cbae7d60d68a7ca8 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 01:06:39 -0400 Subject: [PATCH 10/42] revert. adding new cover --- index.html | 2 +- stylesheets/stylesheet.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 23dac310..b5daaa38 100644 --- a/index.html +++ b/index.html @@ -57,7 +57,7 @@

    Inferring behaviour changes using SMS message rates

    -

    Chapter 1

    +

    Chapter 1

    By only visually inspecting a noisy stream of daily SMS message rates, it can be difficult to detect a sudden change in the @@ -130,17 +130,26 @@

    Inferring behaviour changes using SMS message rates

    Discovering cheating while maintaing privacy

    Challenger Space Shuttle disaster

    -

    Chapter 2

    +

    Chapter 2

    On January 28, 1986, the twenty-fifth flight of the U.S. space shuttle program ended in disaster when one of the rocket boosters of the Shuttle Challenger exploded shortly after lift-off, killing all seven crew members. The presidential commission on the accident concluded that it was caused by the failure of an O-ring in a field joint on the rocket booster, and that this failure was due to a faulty design that made the O-ring unacceptably sensitive to a number of factors including outside temperature. Of the previous 24 flights, data were available on failures of O-rings on 23, (one was lost at sea), and these data were discussed on the evening preceding the Challenger launch, but unfortunately only the data corresponding to the 7 flights on which there was a damage incident were considered important and these were thought to show no obvious trend.

    @@ -151,10 +160,10 @@

    Challenger Space Shuttle disaster

    Understanding Bayesian posteriors and MCMC

    -

    Chapter 3

    +

    Chapter 3

    - The prior-posterior paradigm is visualized to make understanding the MCMC algorithm more clear. Below we show how two different priors + The prior-posterior paradigm is visualized to make understanding the MCMC algorithm more clear. For example, below we show how two different priors can result in two different posteriors. @@ -163,22 +172,19 @@

    Understanding Bayesian posteriors and MCMC

    Clustering data

    -

    Chapter 3

    +

    Chapter 3

    - Given data, sometimes we wish to ask whether there may be more than one hidden source that's creating it. A priori, it is not + Given a dataset, sometimes we wish to ask whether there may be more than one hidden source that created it. A priori, it is not always clear this is the case. We introduce a simple model to try to pry data apart into two clusters.

    -

    -

    A very important consequence of MCMC is convergence, and understanding trace plots is the first step of diagnosis. -

    Sorting Reddit comments from best to worst

    -

    Chapter 4

    +

    Chapter 4

    Consider ratings on online products: how often do you trust an average 5-star rating if there is only 1 reviewer? 2 reviewers? 3 reviewers? We implicitly understand that with such few reviewers that the average rating is not a good reflection of the true value of the product. @@ -189,22 +195,22 @@

    Sorting Reddit comments from best to worst

    -

    Solving the Price is Right's Showcase

    +

    Solving the Price is Right's Showcase

    -

    Chapter 5

    +

    Chapter 5

    - Bless you if you are ever chosen as a contestant on the Price is Right, for here we will show you how to optimize your final price on the Showcase. + Bless you if you are ever chosen as a contestant on the Price is Right, for here we will show you how to optimize your final price on the Showcase. We create a Bayesian model of your best guess and your uncertainty in that guess, and push it through the odd Showdown loss function (closest wins, lose if you bid over).

    Kaggle's Dark World winning solution

    -

    Chapter 5

    +

    Chapter 5

    - We implement Tim Salisman's winning solution to the Dark World's contest on the data science website Kaggle. + We implement Tim Saliman's winning solution to the Observing Dark World's contest on the data science website Kaggle.

    @@ -262,20 +268,17 @@

    If you would like to run the IPython notebooks locally, (option 1. above), you'll need to install the following:

    -
      +
      1. IPython 0.13 is a requirement to view the ipynb files. It can be downloaded here
      2. -

        For Linux users, you should not have a problem installing NumPy, SciPy and PyMC. For Windows users, check out pre-compiled versions if you have difficulty.

        - -
          -
        • also recommended, for data-mining exercises, are PRAW and requests.
        • -
        -
      3. +

        For Linux users, you should not have a problem installing NumPy, SciPy and PyMC. For Windows users, check out pre-compiled versions if you have difficulty. Also recommended, for data-mining exercises, are PRAW and requests.

      4. In the styles/ directory are a number of files that are customized for the notebook. These are not only designed for the book, but they offer many improvements over the default settings of matplotlib and the IPython notebook. The in notebook style has not been finalized yet.

      5. -

    + + +

    Development

    This book has an unusual development design. The content is open-sourced, meaning anyone can be an author. From d08c1adc200104bab1537434f57f8e59051e1572 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 19:07:24 -0400 Subject: [PATCH 13/42] adding goog analytics --- index.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/index.html b/index.html index fce32e81..3eacfb39 100644 --- a/index.html +++ b/index.html @@ -19,6 +19,17 @@ Bayesian Methods for Hackers + + From 07fbe4f7f52aae74b6277d1b558799a64a3e987c Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 21:58:21 -0400 Subject: [PATCH 14/42] changes to web --- index.html | 6 ++++-- stylesheets/stylesheet.css | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 3eacfb39..3f9931e9 100644 --- a/index.html +++ b/index.html @@ -38,12 +38,13 @@

    View on GitHub - +

    Probablistic Programming & Bayesian Methods for Hackers

    Download this project as a .zip file Download this project as a tar.gz file +
    @@ -61,6 +62,7 @@

    An intro to Bayesian methods and probabilistic programming from a
  • Reading and Installation
  • Development +
  • Prolouge

    @@ -318,7 +320,7 @@

    What to contribute?

    Contact

    -

    Contact the main author, Cam Davidson-Pilon at cam.davidson.pilon@gmail.com or @cmrndp

    +

    Contact the main author, Cam Davidson-Pilon at cam.davidson.pilon@gmail.com or @cmrn_dp

    diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css index 00148727..470d860d 100644 --- a/stylesheets/stylesheet.css +++ b/stylesheets/stylesheet.css @@ -297,6 +297,8 @@ Full-Width Styles border-bottom-right-radius: 2px; } + + #header_wrap { background: #212121; background: -moz-linear-gradient(top, #373737, #212121); From 214b6dc0798a09152fa3554ac3eb098800e85f34 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Sun, 16 Jun 2013 23:00:48 -0400 Subject: [PATCH 15/42] adding new image --- index.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/index.html b/index.html index 3f9931e9..75fcce71 100644 --- a/index.html +++ b/index.html @@ -136,8 +136,7 @@

    Inferring behaviour changes using SMS message rates

    users's SMS behaviour. In our first probabilistic programming example, we solve the problem by setting up a simple model to detect probable points where the user's behaviour changed, and examine pre and post behaviour.

    - - +

    From fa0a90b3d15e50334365d0d78461ac2254fd795b Mon Sep 17 00:00:00 2001 From: Fernando Perez Date: Mon, 17 Jun 2013 15:45:43 -0600 Subject: [PATCH 16/42] Fix minor typo. --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 75fcce71..11f34459 100644 --- a/index.html +++ b/index.html @@ -56,7 +56,7 @@

    An intro to Bayesian methods and probabilistic programming from a
      -
    1. Prolouge +
    2. Prologue
    3. Contents
    4. Examples
    5. Reading and Installation @@ -65,7 +65,7 @@

      An intro to Bayesian methods and probabilistic programming from a

    -

    Prolouge

    +

    Prologue

    The Bayesian method is the natural approach to inference, yet it is hidden from readers behind chapters of slow, mathematical analysis. The typical text on Bayesian inference involves two to three chapters on probability theory, then enters what Bayesian inference is. Unfortunately, due to mathematical intractability of most Bayesian models, the reader is only shown simple, artificial examples. This can leave the user with a so-what feeling about Bayesian inference. In fact, this was the author's own prior opinion.

    From 1f2acd88e09cd159d9ca96db754a7bfce4b330c7 Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Fri, 21 Jun 2013 23:18:36 -0400 Subject: [PATCH 17/42] adding color links to gh-pages/recompiling privacy algo --- Chapter2_MorePyMC/MorePyMC.ipynb | 70 ++++++++++++++++++-------------- stylesheets/stylesheet.css | 2 + 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/Chapter2_MorePyMC/MorePyMC.ipynb b/Chapter2_MorePyMC/MorePyMC.ipynb index 20eef7f1..a3458fdd 100644 --- a/Chapter2_MorePyMC/MorePyMC.ipynb +++ b/Chapter2_MorePyMC/MorePyMC.ipynb @@ -860,7 +860,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 5 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -878,7 +878,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 6 + "prompt_number": 4 }, { "cell_type": "markdown", @@ -901,19 +901,19 @@ "output_type": "stream", "stream": "stdout", "text": [ - "[False False False True False True False True True False True True\n", - " True False False True True True True False False True True False\n", - " True True True False False True True True True False True True\n", - " False False False False False False True True False True True False\n", - " True False True True True True True False False True True False\n", - " True False True False True False False True True False True False\n", - " True True False True True True False False True True False True\n", - " False True False True True False False False True False True False\n", - " False False True False]\n" + "[False True True False True True False True True True True True\n", + " False True True True False True False True True False False True\n", + " True False True False True False False False False False True False\n", + " True False True False False True True False True False False False\n", + " False False True False False True True True True True False False\n", + " False True True False True False True False True True True True\n", + " False True False True False True True False True True True False\n", + " False True True False False True True True False False False True\n", + " True True False False]\n" ] } ], - "prompt_number": 7 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -931,7 +931,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 8 + "prompt_number": 6 }, { "cell_type": "markdown", @@ -955,7 +955,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 9 + "prompt_number": 7 }, { "cell_type": "markdown", @@ -975,13 +975,13 @@ "outputs": [ { "output_type": "pyout", - "prompt_number": 10, + "prompt_number": 8, "text": [ - "0.54000000000000004" + "0.32000000000000001" ] } ], - "prompt_number": 10 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -1003,7 +1003,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 13 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -1021,7 +1021,7 @@ "\n", "### To be explained in Chapter 3!\n", "mcmc = mc.MCMC( model )\n", - "mcmc.sample( 120000, 80000,4 )" + "mcmc.sample( 150000, 120000,4 )" ], "language": "python", "metadata": {}, @@ -1031,7 +1031,7 @@ "stream": "stdout", "text": [ " \r", - "[****************100%******************] 120000 of 120000 complete" + "[****************100%******************] 150000 of 150000 complete" ] }, { @@ -1049,11 +1049,16 @@ "collapsed": false, "input": [ "figsize(12.5, 3 )\n", + "from scipy.stats.mstats import mquantiles\n", + "\n", "p_trace = mcmc.trace(\"freq_cheating\")[:]\n", + "quantiles =mquantiles( p_trace, prob=[0.05, 0.95] )\n", + "\n", + "plt.title(\"Posterior distribution of frequency of cheaters\")\n", "plt.hist( p_trace, histtype=\"stepfilled\" , normed = True, \n", " alpha = 0.85, bins = 30, label = \"posterior distribution\",\n", " color = \"#348ABD\")\n", - "plt.vlines( [.05, .35], [0,0], [5,5], linestyles = \"--\" )\n", + "plt.vlines( quantiles, [0,0], [5,5], linestyles = \"--\" )\n", "plt.xlim(0,1)\n", "plt.legend();" ], @@ -1062,16 +1067,16 @@ "outputs": [ { "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAADFCAYAAABuBIVpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X90FPW9//FXCEkgICELFAJk+KEIUuJCLhVpgz9CVYJf\nsBZsG/RWMUIVpOppT9lKe+69tlcJ99gqknP19qqVCqYVtVoroRpBb0IVbYIoKijCJkCCJCyGhJAf\nm/3+4WELQrIzYXdmd/N8nOM5Drsz897wAt6ZvOczCYFAICAAAAAAYdHL6QIAAACAeEKDDQAAAIQR\nDTYAAAAQRjTYAAAAQBjRYAMAAABhRIMNAAAAhFFvM28aPXq0BgwYoMTERCUlJWnbtm2RrgsAAACI\nSaYa7ISEBG3ZskUulyvS9QAAAAAxzfSICM+jAQAAAEJLMPMkx7FjxyotLU2JiYn60Y9+pEWLFgVf\nKy0tjWiBAAAAgFNmzpxpeR9TIyLl5eXKyMjQ4cOHddVVV2nChAmaMWNG8PXs7GzLJ0bPVFhYqOXL\nlztdBmIAWYEV5AVmkRVYUVFR0a39TI2IZGRkSJKGDBmi66+/npscAQAAgE6EbLCPHz+uY8eOSZKa\nmpr0t7/9TVlZWREvDPGpqqrK6RIQI8gKrCAvMIuswA4hR0QOHTqk66+/XpLU3t6uG2+8UVdffXXE\nC0N8mjRpktMlIEaQFVhBXmAWWYEdTN3k2JXS0tKomMH2er3y+XwyDIPlBIFuqK+vV3V1tVwulwzD\ncLocAAAcV1FREbmbHGNBYWGhiouLVVRUpPz8fKfLAWJOSUmJli1bpgULFmjNmjVOlwMgzrS2tqqu\nrk7Sl8/XAKJBIBBQSkqKBg0aFNbjxk2DjdhQVlamnJwcp8tADCArsIK8RLfW1lYdOnRII0aMUK9e\nph/BAdiivr5ejY2N6t+/f9iOScoBAEBE1dXV0VwjarlcLjU0NIT1mCQdtuIKE8wiK7CCvEQ/mmtE\nq0iMLJF2AAAQUcxcI9qFO6Nx02AbhiG326309HSnS0EXysrKnC4BnXC5XHK73crMzHS6FElkBdaQ\nFwDRJG4abI/Ho82bN2vWrFlOlwLEpLy8PG3evJlHCANAlPjtb3+ru+66K2LHnzNnjv7whz9Ikp59\n9lnNnz8/bMf+5je/qa1bt0r6cqW322+/PWzHjvTXJRxYRQS2Yk4SZpEVWEFeYk9NQ4sON7VG7PhD\n+iUrY0BKxI4fytKlSzVixAjde++93T7GPffcE8aKzpSQkBAcjbjhhht0ww03hNzH7Oc62Vyfq7Ky\nMt1+++364IMPgr8W6a9LONBgAwAA2x1uatVDZdURO/7dOZmONtjnyu/3KzExsVv7tre3q3dvZ1o8\nJ88dTeJmRASxgTlJmEVWYAV5wblwu9166KGHNH36dI0dO1bLli1TS0tL8PW1a9dq6tSpOv/883Xj\njTeqtrY2+NqKFSs0fvx4jRo1Sjk5Ofr444/11FNPacOGDVq9erUMw9CNN94oSaqpqdHNN9+sCy+8\nUFOmTNH//M//BI9TWFioW265RbfffrtGjRql9evXnzFasXHjRk2fPl1jxozR3LlztXv37tM+w+rV\nq5WTkyPDMNTR0XHG59y8ebOmTZum0aNHa/ny5Tr1Yd7r16/X7NmzJX358BUrn+ur5/b7/XK73Xrz\nzTeDx29paVFBQYFGjRqlK6+8Ujt37gy+NmjQIO3bty+4vXTpUt1///06fvy4vve976m2tlaGYWjU\nqFGqra21/HUpKirSjBkzNHr0aBUUFJz2exspNNgAAKDH27Bhg5577jlVVFTo008/1YMPPihJevPN\nN/WrX/1KTz75pD766CNlZmbqtttukySVlpbq73//u9555x15vV49+eSTSk9P180336wbbrhBd911\nl6qqqrRu3Tp1dHRowYIFysrK0ocffqg///nPevTRR/X6668Ha9i4caOuu+46eb3eM8Y1Pv30Uy1e\nvFgrV67Up59+qquuukoLFixQe3t78D3PP/+8/vSnP2nv3r1nLItYX1+vW265Rb/4xS+0Z88ejR49\nWm+//fZZvxavv/666c91tnMnJiaesSrHK6+8ou985zv67LPPNH/+fN10003y+/1nPf/J0ZXU1FQ9\n++yzGjZsmKqqquT1ejVs2DBLX5eEhAS9+OKL2rBhg7Zv364PP/xQzzzzzFnPG05x02B7vV5t375d\nR44ccboUdIE5yehVX1+v7du3q6qqyulSJJEVWENecC4SEhK0aNEiDR8+XAMHDtRPfvITPffcc5K+\nbLxvuukmZWVlKTk5Wb/85S/1zjvvaP/+/UpOTlZjY6N2796tjo4OjRs3TkOHDg0e99QrxBUVFaqv\nr9dPf/pT9e7dW6NGjdK//uu/6oUXXgi+55JLLlFeXp4kqU+fPqfV+MILL+jqq6/W5ZdfrsTERN15\n5506ceKEtm3bFvwMixcv1vDhw5WScuZozKuvvqoJEyZozpw5SkxM1B133KGvfe1rZ/16JCUlmf5c\nZs4tSZMnTw6ee8mSJWppadG777571veeeo6vnuurQn1dJGnx4sUaOnSoBg4cqGuuuUbvv/9+l8cM\nh7hpsAsLC5Wbm6tNmzY5XQoQk0pKSpSbm6tVq1Y5XQoA2G7EiBHB/x85cmRwDKS2tva05Uv79esn\nl8ulmpoazZgxQ7fddpt+9rOfafz48brnnnt07Nixsx5///79qq2t1ZgxY4L/PfTQQzp8+HDwPcOH\nD++0vtraWo0cOTK4nZCQoOHDh6umpuasn+Fs+3/1+J29/7LLLjP9ucycWzr9s52t9u4y83U59RuJ\nvn37qqmp6ZzPG0rcNNiIDcxJwiyyAivIC87V/v37T/v/jIwMSQqOJ5zU1NSkI0eOBF9fvHhxcKRi\nz549WrNmjaQzH1wyYsQIjRo1Snv37g3+5/V6VVxcHHxPVw87ycjIUHX1P28KDQQCOnjwYLCOUPsP\nGzZMBw4cOG3/U7e/yuznMnNuSaedq6Oj47TaU1NT1dzcHHy9trY2eLxQxzXzdXECDTYAAOjRAoGA\nHn/8cR08eFA+n08PPvigrr/+eknSvHnztH79en3wwQdqaWnRr3/9a02dOlUjR45UZWWl3n33XbW1\ntalv375KSUkJzj4PGTLktBv3/uVf/kX9+/fX6tWr1dzcLL/fr48++kiVlZWmarzuuuv06quv6s03\n31RbW5uKioqUkpKiSy65xNT+V199tXbt2qWXX35Z7e3teuyxx/T555+f9b1WPpdZ7733XvDcjz76\nqFJSUjR16lRJ0qRJk/Tss8/K7/cH59pPGjJkiHw+nxoaGs563HP9ukQK66jAVsxJwiyyAivIS+wZ\n0i9Zd+dE7smxQ/olm35vQkKC5s+fr3nz5qm2tlbXXnutfvKTn0iSLr/8ct177726+eabdfToUU2b\nNk3/+7//K0k6duyYVqxYIa/Xq5SUFM2cOVPLli2TJN10001auHChxowZoxkzZmjt2rV65pln9Mtf\n/lLZ2dlqaWnRuHHjtGLFitPqOFttkjRu3Dg9+uijWr58uWpqanTxxRdr/fr1ppfEc7lceuKJJ/Tz\nn/9cd955p77//e/r0ksvPe08J89l9XOZMXv2bL3wwgtaunSpxo4dq7Vr1waXIXzggQe0ZMkSPf74\n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\n" + "png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAADRCAYAAAD2Q8XkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VHX2P/D3TPpkCB0CCYGEiSAtISAEpFeJDzZgVUAQ\nAyiiBkRFVL4org3XBSIofi0sLMKqoMBXArsQKQYwlADSE0oKJZFqgJA2Ob8/+GWWSZs7k8mdkvfr\neXj0ztxy5s7hw8nNuZ+rEREBERERERHZhdbRARARERERuRMW2EREREREdsQCm4iIiIjIjlhgExER\nERHZEQtsIiIiIiI7YoFNRERERGRHLLCJ3FC/fv0wefJk1Y63bds2aLVaXLhwocJle9NqtVi5cmWl\ny/aUnp4OrVaLXbt21cj+rVVcXIxnnnkGjRo1glarxY4dOypcLysrCwMHDoRer4eHh4fKUbqvTz/9\nFMHBwfDw8MDcuXNt2kdN5isROQcW2EQWPP3009BqtdBqtfDy8kKrVq0wZcoUXL161S77T0pKglar\nRWZmpl32BwBr167F3//+d7vtz1r3338/srOz0axZM0XrT5w4Ef3791e8/+zsbIwYMcLW8CplMBjw\nzjvvmL0WEhKC7OxsdOvWze7Hs8WaNWuwatUq/Pzzz8jOzkaPHj0qXO/999/H5cuXcejQIVy8eFHl\nKN3ThQsXMG3aNLz55pu4cOECZsyY4eiQqlQTYwsRKePp6ACIXEGfPn3w/fffo7i4GPv27cOkSZOQ\nlZWFn3/+2W7HsMcznwoLC+Ht7Y169erZbV+28PLyQpMmTaodQ1mlMdXEvgFAo9GUe02r1dbY8WyR\nlpaGoKAgREdHW1zvvvvuQ+vWrStdpzrfcW105swZiAiGDx+Opk2bOjocxew5thCRQkJEVRo/frwM\nGjTI7LX33ntPPDw8JD8/X0pKSuTjjz+W0NBQ8fb2ltatW8uCBQvM1l+7dq1ERkaKTqeTevXqSbdu\n3eTAgQNy9uxZ0Wg0Zn/69+9v2m7VqlUSEREhvr6+0qpVK3n55Zfl1q1bpvf79u0rsbGx8tZbb0lg\nYKA0a9bM9PrEiRNN6xUWFsrMmTMlKChIvL29pV27drJy5UqzGDUajcTHx8uTTz4pdevWlSeeeKLS\ncxIfHy9BQUGi0+lk6NChsmzZMtFoNHL+/HkREdm6davZcmFhoUyfPl2Cg4PFx8dHmjVrZtr/nDlz\nyp2DZcuWVRmTRqORFStWmMW+cOFCeeyxx8Tf31+CgoJk4cKF5T7ft99+a/bawIED5emnnzads7Jx\nZGRkmL6jnTt3mrY7ceKExMTEiF6vF71eL8OHD5dTp06Z3l+6dKl4enrKzp07pXPnzqLT6aRLly6y\nd+/eSs9pqapyqWyMoaGhFe6j7OeYMGFClefzP//5j/Ts2VP8/PwkKChIJkyYIFeuXDHtr6SkRN56\n6y1p3Lix6PV6efzxx+Xvf/+7eHp6mtaZM2eOGAwGszh+/fVX03kstW/fPhk8eLDo9Xpp3LixPPbY\nY2bvl+5n3bp10qZNG/H395d+/fpJWlqa2b737dsnQ4cOlYCAANHr9dKtWzdJTk6W06dPi0ajkV27\ndpmtv337dvHw8JDMzMxKz/2GDRskKipKfHx8pEmTJvL888+b/r5VlKd3x323oqIiefvttyUsLEx8\nfHwkKChIXnzxRbPv57PPPpOxY8dKnTp1JDg4WD744AOzfRQWFsqcOXMkNDRUfH19pX379vLFF1+Y\nrbNgwQKJjIwUvV4vgYGB8sQTT8jFixdFRGpsbKlsLCMicyywiSwYP368DB482Oy1Tz75RDQajdy8\neVMWLVokfn5+8uWXX8qpU6dkyZIl4uvrK19//bWIiFy8eFG8vLzk448/lvT0dDlx4oSsWrVKDh8+\nLEajUdavXy8ajUb27dsnOTk5cu3aNRG5U6TVr19fVqxYIWfPnpUdO3ZIp06d5KmnnjLF0bdvX6lT\np45MmTJFjh8/LkeOHBERkX79+smkSZNM673yyivSsGFDWb16taSlpcn7778vWq1WEhMTTetoNBpp\n2LChLF68WM6cOWNWMN5t7dq14unpKfPnz5e0tDT5+uuvpUmTJqLVaistsD/55BMJDg6W7du3S1ZW\nluzdu9dUAN+8eVPGjBkj999/v+Tk5EhOTo7k5+dXGVPZYlmj0UiDBg1k0aJFkpaWJgsXLhRPT09Z\nt26d2TplC+xBgwaZis+rV69KaGiovPrqq6Y4jEZjuQI7Ly9PQkJCZNCgQZKSkiL79++X/v37i8Fg\nkMLCQtN3p9VqpW/fvpKUlCQnTpyQYcOGSWhoqBQXF1d4XkXEYi5dvXpVXnnlFQkNDZWcnBy5fPly\nhfvJzs6Wnj17ytixYyUnJ0dyc3MrPZ+JiYmi0+lk0aJFcurUKdm7d6/0799f+vbta9rfggULxN/f\n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\nm4iIiIjIjv4ff4RvwocEZQ4AAAAASUVORK5CYII=\n" } ], - "prompt_number": 17 + "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "With regards to the above plot, we are still pretty uncertain about what the true frequency of cheaters might be, but we have narrowed it down to a range between 0.05 to 0.35 (marked by the dashed lines). This is pretty good, as *a priori* we had no idea how many students might have cheated (hence the uniform distribution for our prior). On the other hand, it is also pretty bad since there is a .3 length window the true value most likely lives in. Have we even gained anything, or are we still too uncertain about the true frequency? \n", + "With regards to the above plot, we are still pretty uncertain about what the true frequency of cheaters might be, but we have narrowed the true frequency down to a range between 0.05 to 0.45 (marked by the dashed lines). This is pretty good, as *a priori* we had no idea how many students might have cheated (hence the uniform distribution for our prior). On the other hand, it is also pretty bad since there is a .4 length window the true value most likely lives in. Have we even gained anything, or are we still too uncertain about the true frequency? \n", "\n", "I would argue, yes, we have discovered something. It is implausible, according to our posterior, that there are *no cheaters*, i.e. the posterior assigns low probability to $p=0$. Since we started with an uniform prior, treating all values of $p$ as equally plausible, but the data ruled out $p=0$ as a possibility, we can be confident that there were cheaters. \n", "\n", @@ -1109,7 +1114,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 18 + "prompt_number": 17 }, { "cell_type": "markdown", @@ -1132,7 +1137,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 19 + "prompt_number": 18 }, { "cell_type": "markdown", @@ -1170,7 +1175,7 @@ ] } ], - "prompt_number": 22 + "prompt_number": 19 }, { "cell_type": "code", @@ -1178,10 +1183,13 @@ "input": [ "figsize(12.5, 3 )\n", "p_trace = mcmc.trace(\"freq_cheating\")[:]\n", + "quantiles =mquantiles( p_trace, prob=[0.05, 0.95] )\n", + "\n", + "plt.title(\"Posterior distribution of frequency of cheaters\")\n", "plt.hist( p_trace, histtype=\"stepfilled\" , normed = True, \n", " alpha = 0.85, bins = 30, label = \"posterior distribution\",\n", " color = \"#348ABD\")\n", - "plt.vlines( [.05, .35], [0,0], [5,5], linestyles = \"--\" )\n", + "plt.vlines( quantiles, [0,0], [5,5], linestyles = \"--\" )\n", "plt.xlim(0,1)\n", "plt.legend();" ], @@ -1190,10 +1198,10 @@ "outputs": [ { "output_type": "display_data", - "png": "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\nefnss890/PhxTZo0SWPHjtVvf/tbu8tEHDCTlblz5+qTTz5R//795Xa79ctf/tLuMpEg2tPjmvqn\nmtm/0EJfeWYNfxF2TFZ+3devX6+XXnpJ5eXlMawI8cpMVp544gk988wzSklJUSgU+tqfM+g4zOSl\nublZFRUVKi0tVUNDg2666SbdeOONGjZsmA0VIl6YycrixYuVm5urDRs2aP/+/brtttu0fft29e7d\n24YKkWis9rimGmwz+2F/9TWHDh1SVlaWmcsjyZjdP33Hjh2aO3euiouL2/yvGSQvM1n56KOP9J3v\nfEfSF29KWrdunbp27cqWoR2QmbxkZ2friiuuUI8ePdSjRw/dfPPN2r59Ow12B2MmK5s2bdKiRYsk\nSUOHDtXgwYO1Z88ejR071tZaEf/a0+OaGhExsx/29OnTtWLFCknS5s2bdfnll+uqq66y+jUgCZjJ\nS1VVle655x698soruvrqqx2qFE4zk5XPP/9cBw4c0IEDBzRz5kz9+te/prnuoMzk5a677lJZWZmC\nwaAaGhq0ZcsWjRo1yqGK4RQzWRkxYoTee+89SdLRo0e1Z88eDRkyxIlyEefa0+OaWsG+2H7YL7zw\ngiTp+9//vqZOnaq1a9fq6quvVs+ePbV8+fJL/HKQqMzk5Wc/+5kCgUB4rrZr167aunWrk2XDAWay\nApxjJi8jRozQlClTdN1116lTp06aO3cuDXYHZCYrTz31lB5++GG53W61trZqyZIlcrlcDlcOJ8ya\nNUt/+ctfVFtbq+zsbP3bv/2bmpubJbW/x00JMdAIAAAARI2pEREAAAAA5tBgAwAAAFFEgw0AAABE\nEQ02AAAAEEU02AAAAEAU/T9jf5e6h6hy0gAAAABJRU5ErkJggg==\n" + "png": "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\npATLli1D3759ERERgZycHIt91td3S03fZUT0N85gE92ml156CXPnzkVERAQGDRqEn3/+GatXr0Zc\nXByAG4VeQkICRowYgdatWyMjIwOpqanmf/BDQ0Oh0Wjw3Xff4R//+Ac8PT3h7++PN998E5MmTULT\npk1x3333wcPDA2lpadi+fTtWr14N4MaMW02zqZWP+/j44JlnnsHChQvRsmVLdO3aFZs2bcLWrVvx\n008/2fx+586dizFjxqB3794YOXIkEhMTsX79+lpf89577yEwMBAGgwE+Pj7YuHEj3N3dcccddwAA\nwsPDsWnTJhw/fhytWrWCn5+fzUuCfffdd1i1ahWio6Oxfft2fPnll9i0aZP5+WHDhmH16tUYOHAg\nfH198eabb6K8vNzi/IWFhSExMRHZ2dnw9va2aFOoNHbsWLz++ut4+OGH8d5778FkMmHevHkICgrC\nww8/bFPMt7KWS7aoKTdu9frrryM6Ohpz587FY489hsaNGyMjIwObNm3CypUr4eXlhblz52LhwoXo\n2LEj+vTpg61btyIhIcFiP1FRUSguLsZ///d/Y+LEiUhJSakS98svv4zevXtj/PjxmD17Nlq0aIHM\nzExs2bIFs2fPNheP1rzwwgvo06cPxo0bh7lz56JJkyZISUlBcHCwefnCkJAQ3HPPPXj22WcxbNgw\ntGvXrtZ9Pv/884iMjMRzzz2HqVOnIjMzE7NmzcL48eMRFBQkKy7gxg+048aNw/Tp01FSUoK77roL\nV65cwb59+/DMM8/U+LqbPy+dTocnn3wSU6ZMweLFi3HXXXehqKgIv/32G/Ly8vDCCy8gIiICkiTh\nn//8J8aOHYvDhw/jjTfesNinvb9b9u3bh59++qnG7zIiuoly7d5EzumJJ56osorIrSqXVvPw8BDt\n27e3WDHg2LFjIiYmRrRu3Vp4enqK0NBQ8cILL4jy8nLzmMWLF4vAwEDh5uZmsZTW5s2bRd++fYWP\nj4/w8/MT3bp1E2+88Yb5+eouZKvu8fLycvHiiy+al+nr3Lmz2Lhxo8VrqrsIsCbLly8XgYGBwtvb\nWwwfPlysXbu2yioiN29/8MEHokePHhZLqm3dutW8vytXroiYmBjh7+9fZZm+6mKq7iLH5cuXiwce\neED4+PiItm3biqVLl1q8JicnR8TGxgo/Pz8REhIiVq9eXeUix+TkZBEZGSm8vb2FRqMxL9On0Wgs\n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\n" } ], - "prompt_number": 23 + "prompt_number": 20 }, { "cell_type": "markdown", @@ -1609,6 +1617,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "Notice that neither distribution has postive probability at 0. What would it mean if a variable assigned positive probability at 0? If the coefficient *was* zero, then it would not influence the probability of defect. The larger the probability at 0, the larger the probability the variable has no effect on the outcome. In this example though, both variables are significant to the outcome.\n", + "\n", "Regarding the spread of the data, we are very uncertain about what the true parameters might be (though considering the low sample size and the large overlap of defects-to-nondefects this behaviour is perhaps expected). \n", "\n", "Next, let's look at the *expected probability* for a specific value of the temperature. That is, we average over all samples from the posterior to get a likely value for $p(t_i)$." diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css index 470d860d..2e32605d 100644 --- a/stylesheets/stylesheet.css +++ b/stylesheets/stylesheet.css @@ -219,6 +219,8 @@ dl dt { #accordion h3:hover{ cursor:pointer; + color: #007edf; + } From 6ca9eb933763f7f6ac481a13cc73d5bff9e77b5e Mon Sep 17 00:00:00 2001 From: Cam Davidson-Pilon Date: Tue, 25 Jun 2013 19:51:08 -0400 Subject: [PATCH 18/42] annoying PRAW --- Chapter4_TheGreatestTheoremNeverTold/top_pic_comments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Chapter4_TheGreatestTheoremNeverTold/top_pic_comments.py b/Chapter4_TheGreatestTheoremNeverTold/top_pic_comments.py index 9f0eeffe..b362bb35 100644 --- a/Chapter4_TheGreatestTheoremNeverTold/top_pic_comments.py +++ b/Chapter4_TheGreatestTheoremNeverTold/top_pic_comments.py @@ -6,7 +6,7 @@ import praw -reddit = praw.Reddit("BayesianMethodsForHackers") +reddit = praw.Reddit("BayesianMethodsForHackers", disable_update_check=True) subreddit = reddit.get_subreddit( "pics" ) top_submissions = subreddit.get_top() From 926447c33f40a516e3de490cef2a6473ed5705fa Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Mon, 29 Jul 2013 21:08:55 -0400 Subject: [PATCH 19/42] fixing typo in title --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 11f34459..4990a791 100644 --- a/index.html +++ b/index.html @@ -39,7 +39,7 @@
    View on GitHub -

    Probablistic Programming & Bayesian Methods for Hackers

    +

    Probabilistic Programming & Bayesian Methods for Hackers

    Download this project as a .zip file @@ -59,7 +59,7 @@

    An intro to Bayesian methods and probabilistic programming from a
  • Prologue
  • Contents
  • Examples -
  • Reading and Installation +
  • Reading and Installation Instructions
  • Development From 2d2f6451518f72f3bbbf13d728371a5496e96ac3 Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Wed, 31 Jul 2013 16:31:33 -0400 Subject: [PATCH 20/42] adding so real --- index.html | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/index.html b/index.html index 4990a791..e780816c 100644 --- a/index.html +++ b/index.html @@ -321,6 +321,26 @@

    Contact the main author, Cam Davidson-Pilon at cam.davidson.pilon@gmail.com or @cmrn_dp

    +

    Reviews

    + +These are satirical, but real + +

    "No, but it looks good" - John D. Cook

    + +

    "I ... read this book ... I like it!" - Andrew Gelman

    + +

    "This book is a godsend, and a direct refutation to that 'hmph! you don't know maths, piss off!' school of thought... +The publishing model is so unusual. Not only is it open source but it relies on pull requests from anyone in order to progress the book. This is ingenious and heartening" - excited Reddit user

    + + +Available for ALL the mobile devices, as these in real-life screenshots suggest: + + + + +(thanks to [http://placeit.breezi.com/](http://placeit.breezi.com/) for these hilarious shots) + +
  • From 1df680af666f0a2a02b48236909de87da9142b9b Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Wed, 31 Jul 2013 16:42:25 -0400 Subject: [PATCH 21/42] ab testing --- index.html | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/index.html b/index.html index e780816c..7c0d6b5b 100644 --- a/index.html +++ b/index.html @@ -140,6 +140,24 @@

    Inferring behaviour changes using SMS message rates

    + + + + +

    Simpiler AB Testing

    +
    +

    Chapter 2

    +

    AB testing, also called randomized experiments in other literature, is a great framework for determining + the difference between competing alternatives, with applications to web designs, drug treatments, advertising, plus much more.

    + +

    With our new interpretation of probability, a more intuitive method of AB testing is demonstrated. And since we are not dealing + with confusing ideas like p-values or Z-scores, we can compute more understandable quantities about our uncertainty.

    + + + +

    +
    +

    Discovering cheating while maintaing privacy

    Chapter 2

    From 18a0e3d99f7fa2188c5bc7941b45b4422dab032c Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Thu, 1 Aug 2013 16:32:54 -0400 Subject: [PATCH 22/42] typo --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 7c0d6b5b..02875b9c 100644 --- a/index.html +++ b/index.html @@ -144,7 +144,7 @@

    Inferring behaviour changes using SMS message rates

    -

    Simpiler AB Testing

    +

    Simpler AB Testing

    Chapter 2

    AB testing, also called randomized experiments in other literature, is a great framework for determining From a75d17c2850168ee32e9b23482810cd332d3f472 Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Sun, 1 Sep 2013 23:20:18 -0400 Subject: [PATCH 23/42] adding CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..799818e4 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +bm4h.com From b974f8f91680ae1f3e01dad6c6f1d97e649f5903 Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Mon, 2 Sep 2013 00:02:47 -0400 Subject: [PATCH 24/42] removing images --- index.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/index.html b/index.html index 02875b9c..931c7558 100644 --- a/index.html +++ b/index.html @@ -351,12 +351,6 @@

    Reviews

    The publishing model is so unusual. Not only is it open source but it relies on pull requests from anyone in order to progress the book. This is ingenious and heartening" - excited Reddit user

    -Available for ALL the mobile devices, as these in real-life screenshots suggest: - - - - -(thanks to [http://placeit.breezi.com/](http://placeit.breezi.com/) for these hilarious shots)
    From e500f91dd70f22f455f4787dd0267f14b65efd93 Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Sat, 21 Sep 2013 18:09:34 -0400 Subject: [PATCH 25/42] typo --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 931c7558..4b4cc2fe 100644 --- a/index.html +++ b/index.html @@ -72,7 +72,7 @@

    -

    If Bayesian inference is the destination, then mathematical analysis is a particular path to towards it. On the other hand, computing power is cheap enough that we can afford to take an alternate route via probabilistic programming. The latter path is much more useful, as it denies the necessity of mathematical intervention at each step, that is, we remove often-intractable mathematical analysis as a prerequisite to Bayesian inference. Simply put, this latter computational path proceeds via small intermediate jumps from beginning to end, where as the first path proceeds by enormous leaps, often landing far away from our target. Furthermore, without a strong mathematical background, the analysis required by the first path cannot even take place.

    +

    If Bayesian inference is the destination, then mathematical analysis is a particular path towards it. On the other hand, computing power is cheap enough that we can afford to take an alternate route via probabilistic programming. The latter path is much more useful, as it denies the necessity of mathematical intervention at each step, that is, we remove often-intractable mathematical analysis as a prerequisite to Bayesian inference. Simply put, this latter computational path proceeds via small intermediate jumps from beginning to end, where as the first path proceeds by enormous leaps, often landing far away from our target. Furthermore, without a strong mathematical background, the analysis required by the first path cannot even take place.

    Bayesian Methods for Hackers is designed as a introduction to Bayesian inference from a computational/understanding-first, and mathematics-second, point of view. Of course as an introductory book, we can only leave it at that: an introductory book. For the mathematically trained, they may cure the curiosity this text generates with other texts designed with mathematical analysis in mind. For the enthusiast with less mathematical-background, or one who is not interested in the mathematics but simply the practice of Bayesian methods, this text should be sufficient and entertaining.

    From 94665efb676f744e4bec6b5b766b4b11dfaa71f5 Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Sun, 29 Sep 2013 10:26:16 -0400 Subject: [PATCH 26/42] adding statly link --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 4b4cc2fe..2b43c6af 100644 --- a/index.html +++ b/index.html @@ -359,7 +359,7 @@

    Reviews

    From a3eb3ad1ce11c2f3c2c098761929d1674f187dd6 Mon Sep 17 00:00:00 2001 From: Cameron Davidson-Pilon Date: Tue, 20 Jan 2015 11:57:43 -0500 Subject: [PATCH 27/42] Update index.html Update links on the website too --- index.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index 2b43c6af..af63d9ec 100644 --- a/index.html +++ b/index.html @@ -90,25 +90,25 @@