CamDavidsonPilon / Probabilistic-Programming-and-Bayesian-Methods-for-Hackers

aka "Bayesian Methods for Hackers": An introduction to Bayesian methods + probabilistic programming with a computation/understanding-first, mathematics-second point of view. All in pure Python ;)
http://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/
MIT License
26.71k stars 7.87k forks source link

Port book to PyMC 4.0 #537

Open twiecki opened 2 years ago

twiecki commented 2 years ago

With PyMC 4.0 almost ready, we should work on porting the examples here. Most models should continue to run just fine.

CamDavidsonPilon commented 2 years ago

4.0! Congrats!

I'd like to invite any motivated volunteers watching to help port examples over (ideally entire chapters at a time). @twiecki is it correct that there's not yet a beta release for pymc v4?

twiecki commented 2 years ago

@CamDavidsonPilon Thanks!

is it correct that there's not yet a beta release for pymc v4?

Correct, but we'll release the beta today or tomorrow.

twiecki commented 2 years ago

Beta is out if someone wants to take this on!

pabloazurduy commented 2 years ago

Hi! (I bought the book a few months ago) I'm struggling with translating the code from Chapter 2 to the PYMC4 standard. Almost all Chapter2 is useless, the "migration guide" it's a joke. In the PYMC docs claiming that "Yes, you can just keep your existing PyMC modeling code without having to change anything (in most cases) and get all the improvements for free" seems like or either this book is too outdated vs the last version of PYMC3 (even the online version "ported to PYMC3") or the statement is false. Some of the issues that I found:

    print("parameter.value =", parameter.value)

.value does not exist anymore

the models are no longer declared as in the example:

     import pymc as pm

     parameter = pm.Exponential("poisson_param", 1)
     data_generator = pm.Poisson("data_generator", parameter)
     data_plus_one = data_generator + 1
tau.random()

.random() method does not exist anymore

etc etc, TBH I'm trying to re-write the code on this chapter, but it seems not only that the API has changed completely like I think is better to re-write the chapter using this "new library" or the missing methods are available somewhere but the documentation it's just not giving any hint. Am I missing something? is this chapter that outdated?

Thanks !

CamDavidsonPilon commented 2 years ago

Hi @pabloazurduy,

  1. Comments like "the "migration guide" it's a joke." are not productive, and infact offensive to the authors of that content. Do you agree?
  2. A lot has changed in PyMC3 since this book was written, so yes, things are out-of-date. This is a common problem in software. Part of a developers job is determining the best path forward, given this problem.
  3. Chapters may need to be rewritten completely, or removed altogether.

I appreciate your efforts in porting content to use PyMC4 (it's a great learning exercise I'm sure). There's lots of freedom in how to port it, too, and I'm open to suggestions and PRs on how it's done.

pabloazurduy commented 2 years ago

hey @CamDavidsonPilon, Thanks for the fast replay! 😊

  1. The API changed a LOT from what I can tell, maybe it has major changes between versions of PYMC3 (that will explain that "migration guide"). I was not aware of that, but that will make sense. Didn't want to sound disrespectful, just being sarcastic there.
  2. that's probably the reason behind (1), although I think the "changes" on the interface of the library have been massive, a sample of that is that almost all snippets on this book don't work anymore, and because I have the printer version on my hands I can tell that is not infrequent with PYMC. As you mention that's common in software, however, I must argue that this level of changes (3 completely different interfaces in 2 versions seems kind of an exception rather than a rule). Anyway, this is under PYMC dev guidelines, not sure if there's anything that we can do about it (except /rant about it). my frustration comes from the lack of guides on these changes or documentation in the library itself, probably one of the reasons behind writing a book about it, I can't even know if some methods are completely gone or replaced by other methods.

3+end. I will be more than happy to help, I was trying too! and then I realized that either, you know how to use PYMC3 and then learn how to port it to PYMC4, or you know PYMC4 and write a chapter about it, I think I don't belong to either of those groups 😂😂 (That's why I bought the book on the first place). I found the migration guide, but not very helpful, maybe there is a PYMC3 v1.0 to migration guide somewhere ?. Anyway, thanks for the context, and sorry to sound rude (not my intention ! )

twiecki commented 2 years ago

Yeah, the modeling API is mostly intact but otherwise things definitely changed, and this great book definitely teachers more than just the modeling API. A more comprehensive migration guide is definitely required. For now, you can read https://github.com/pymc-devs/pymc/blob/main/RELEASE-NOTES.md#pymc-400 to get some pointers.