5 ms·
Like many people here have mentioned, mastering everything can take far too long, and is completely unnecessary in practice. It is much, much more important to
by mailshanx 12y ago
Like many people here have mentioned, mastering everything can take far too long, and is completely unnecessary in practice.
It is much, much more important to master the foundations, which consist of: 1) Probability and statistics 2) Linear algebra, and 3) Programming proficiency
To be more precise here is what you would need to know in each area:
1) Probability and stats:
Properties of the most common distributions (Normal, Poisson, Exponential), conditional probability, properties of expectation, Bayes rule and its applications, hypothesis testing, confidence intervals, bootstrap / jackknife, know how to compute the power of a test, be able to run Monte Carlo simulations to model real world phenomena.
2. Linear Algebra:
Know enough to understand and compute Eigenvalues / Eigenvectors, SVD and various matrix factorizations.
3. Programming proficiency:
Algorithms and design patterns. Its enough to know the typical undergraduate algorithms course content: trees, heaps, hash tables, various sorting algorithms, graph algorithms: shortest paths, spanning trees, max flows.
If you know this, you can easily pickup everything else on a need-to-know basis. Depending on the domain you are working in, that might entail either natural language processing, computer vision, machine learning or big-data tools like Hadoop / Spark etc. All of that is very easy to learn once you have the foundations.
- geebee 12y agoThese are good suggestions, and you're presenting a good guide for people who need to fill in some gaps prior to "grad school". But to me, this sounds like the standard (in the US) undergraduate curriculum for the general STEM majors - Math, Physics, Operations Research, CS, various branches of engineering. Typically, a student would have done what you're describing prior to grad school. A Masters degree is typically an opportunity to specialize a bit and have a little more space to pursue an interest. One suggestion I'd make is to go through the python scikit-learn library, do the examples, and research the math behind the algorithms to make sure you understand what's happening in the background (maybe even implement a bit on your own). I would agree that if you have the background you described, you'll be able to do this (though it'll take some study). http://scikit-learn.org/stable/ http://scikit-learn.org/stable/ One other thing… I'm a little less enthusiastic about learning purely on a "need-to-know" basis, because sometimes it takes knowledge of an algorithm to recognize the opportunity to apply it. I don't think you can keep all of this loaded in "exam-ready" memory (and I really wish interviewers would understand this), but I think it's important to study and read widely. You can learn (or review) the details in the moment, but you do need broad awareness to approach data with a certain frame of mind.
- upquark 12y agoThe list of topics at the end isn't necessarily "very easy to learn", but I do agree that fundamentals are essential. Depending on the mathematical background of the individual, they may need calculus and general mathematical maturity / ability to solve non-trivial math problems before venturing into the data science field. Also databases. Absolutely need this in the fundamentals, arguably more so than graph algos etc. Edit: English
- NhanH 12y agoIn that veins, I'd love to see a list that focused more (or even exclusively) on the fundamentals. Do you have any such recommendation?
- mailshanx 12y agoExpanding on my previous comment (https://news.ycombinator.com/item?id=8444705 https://news.ycombinator.com/item?id=8444705), here are some excellent, tried-and-tested resources to help you learn the fundamentals. 1. Probability and stats: For probability, work through John Tsitsiklis's MIT OCW course 6.041. There is also an archived version of the course available on EDX. Norman Matloff's book (http://heather.cs.ucdavis.edu/~matloff/132/PLN/ProbStatBook.pdf http://heather.cs.ucdavis.edu/~matloff/132/PLN/ProbStatBook....) approaches stats from a CS practitioner's point of view (lots of sample simulation code in R), and has intuitive explanations of many different statistical concepts. For Hypothesis testing, checkout the courses Mathematical Biostatistics - 1 and 2 on Coursera. 2. Linear Algebra: Gilbert Strang's OCW lectures / course notes is hands down the best resource. But depending on your mathematical background, the lectures can be a bit long-winded. 3. Programming proficiency: For algorithms, Robert Sedgewick's algorithms course on Coursera has excellent videos. His textbook is very well written too. I really like his style of writing actual working code for each algorithm he describes (in contrast to say, CLRS): i find his code samples rather elegant and worthy of study. For learning object orientation and design patterns, the best way is to write large programs and read the book "Head First Design Patterns" as you do so. The aim is to develop an ability to think with a statistical / algorithmic lens. Many real world phenomena are stochastic in nature. Modelling them by simulation and measuring and drawing confidence intervals around your measurements must become second nature. When confronted with an image / text processing problem, representing you data as vectors and manipulating them must be natural. While writing large programs, being aware of design considerations such as preferring composition must come naturally to you. Of course, you should be able to always recognize when a computation is O(n^2) vs O(n log(n)) vs O(2^n). Once you are done with that, all you need to do is work through Andrew Ng's Machine Learning course and compete in a few Kaggle competitions / build some ML related side projects. Congratulations, you are now a data scientist good enough to work at most places in the tech industry!;)
- ska 12y agoOne thing I think you are missing here is 4) Elements of numerical analysis Under standing how matrix inversion works on paper is very different than a computer implementation. If you don't understand how floating point really works, you are bound to make fundamental errors in this kind of work, etc.
- jeffreyrogers 12y agoAre most people doing data analysis actually going to be implementing their own numerical algorithms though? I'd imagine most people just use whatever library is available in R, Python, or whatever other language they're using.
- RBerenguel 12y agoIt's important having at least a basic knowledge to avoid common, really stupid pitfalls that libraries can't handle out of the box but humans can (i.e. non-interpolable functions, small number division...)
- Chronic29 12y agoI can Google the answer to those problems, 100 times, and it will still be faster than spending time learning any of those.
- agibsonccc 12y agoOh yes. Numerical underflow is such a common problem when you're training machine learning algorithms. If you don't understand floating point numbers not only will you get inaccurate results, you won't be able to troubleshoot why. Understanding the difference between time and space trade offs for floats and doubles (this is why even something as high level as numpy allows you to specify floats/doubles as a datatype) will not only allow you to trouble shoot things, but it will make your life a lot easier when debugging.
- clarecorthell 12y agoOf people who use these tools, only a very small percentage of them also build said tools. Which makes sense. In industry, companies want to build meaningful products and data sets that provide value which can be exchanged for money. That means delivering some majority of the value in the shortest amount of time possible. For that reason, engineering teams have little room for R&D, including the kind you're hinting at. Scikit, for example, has largely academic contributors (http://scikit-learn.org/stable/about.html http://scikit-learn.org/stable/about.html). Not surprising. Talents of pedantry, proof-writing, and pushing the boundaries of theory probably lies in academia as opposed to industry. Industry rewards shipping code (useful oversimplification) and academia rewards novel theory (yet another oversimplification). Solving problems requires understanding what solutions exist (and whether they can be used, must be built upon, could be used in ensemble, etc). Choosing among those solutions requires understanding (to some varying degree) why and how the solution solves the problem. Choosing the correct out-of-the-box solution is not trivial. One very real danger here is unwittingly lying with statistics. Which is arguably worse than wittingly doing so.