Tools to get started in machine learning
k2company.com
k2company.com
I think R and Python can be used in conjunction very effectively. Analyze your data in R, prototype your algorithms in either, build products in Python.
I'm always surprised how much people hate the syntax of R. I primarily work in Python, but I use R once or twice a week... and the syntax seems very clean to me. Can someone give mee an example of what you dislike with R's syntax?
I'm even more surprised to hear complaints about the documentation in R. The help files in R are much more complete and well organized than docstrings in the python libraries we use. Even the web usually lacks anything as useful as what I get from the vignettes function in my R interpreter.
A list in R is a list in Python. A data frame in R is a date frame in the pandas library. A matrix in R is a matrix in numpy. A vector in R is a 1-dimensional ndarray in numpy.
But Python adds dictionaries, tuples, iterators, sets, and a bunch of other data types that aren't used in R.
R's lists and vectors are relatively similar... but you could say the same thing about numpy's matrix and ndarray. You could probably say the same thing about python's sets, tuples and lists.
To be honest, I'd have said the strength of python is that it has many more data types than R... rather than fewer data types.
I'm not a mathematician, and I've been programming Python for 15 years, but I'd always pick R for its stated problem domain given a choice.
I highly recommend "The Art Of R Programming" for learning R as a programming language. The statistical side of things are then easier to layer on top of that.
What are the benefits/pitfalls?
It's great for matrix/vector maths, though. If that's all you do -- go for it. Everything over and above that is a royal pain in MATLAB and, conversely, in Octave.
I learned Octave first, then R, then Python.
Octave to me feels like Python + NumPy. I'd say Octave has more in common with R than with Python.
Given the choice between Octave and R, I'd choose R for the more robust user community and incredibly diverse and thorough selections of libraries.
And if you are lucky enough to have free-ish access to MATLAB, here's a free, BSD, open-source, github repo'd machine learning toolbox to help you get started:
http://www.newfolderconsulting.com/prt/
Full disclosure: I'm involved.
It has most of the libraries, out of the box.
Plus it's the only one on that list that will scale beyond the "My Data Set" size.
I am a "real data scientist" and need some advanced data analysis technics and machine learning. Can someone recommend an introduction for me?
Don't have a great deal of time right now so drop me an email if you'd like more info (see profile) and I'll get on it tomorrow.
It also has very nice matrix and vector manipulations features built in to the language and is very easy to bind to C code.
Matlab,Ocatave,R,S are great but if you need to be closer to the metal, Lush offers a very good compromise.
Personally, I am experienced with Matlab but not so much with Python, so I am not able to judge. I definitely hate the fact that Matlab is proprietary and partly closed source. Also, I think Python syntax is much more pretty while Matlab is not even designed to be a real language. But alas, it comes with very powerful functionality out of the box.
Note, that the OP mentioned in the introduction that he had no access to Matlab over his employer or university and hence dismissed it.
[1] https://www.coursera.org/ml (one of the first videos)
http://www.scipy.org/NumPy_for_Matlab_Users
IMHO, it's best to prototype in Octave and then build in python. I find that the Matlab/Octave syntax is too focused on linear algebra, so it's better for small prototypes (and for people coming from non-SW fields). For big projects, I prefer the 0-based arrays, more than one function per file, and all the rest of the python goodies. I estimate that 70% of my time is usually spend preparing the data (e.g. parsing xml, or some other files, etc), for which I find python more suitable.
In fact, I usually work with them side by side, testing ideas in Octave, then implementing these pieces into a large python project.
Edit: this has also been discussed here before, e.g.
If you're only coding the core of an algorithm (rather than a full-featured library with lots of plumbing), and your logic fits naturally into Matlab's native array operators, then using Matlab is a joy.
Never trust academics when it comes to programming. :)
Seriously, Matlab might be a tiny bit better for scientific programming than Python. But: if you start building an eco system around your machine learning code (distributed evaluation of models, email reporting of results, web reporting of results, online tracking of training progress, data base related things, web services for other people, proper documentation, ...) you are happy if you chose python.
Also, there is theano for python which has auto diff, transparent GPU/CPU use and symbolic optimization. It makes your life easy if you are using complicated models.