Try looking at the chromatic colour rather than the RGB values. You can get extremely far with just this, most skin colours fall into one of two peaks [0], no machine learning needed.
Once you've got this, edge detection & a few other bits should give you pretty reliable skin blocks. I've used it a few times before. Here's a presentation I did some years ago that I apparently still have on my desktop: http://files.figshare.com/1409002/1.pdf [1]
[0] http://www-cs-students.stanford.edu/~robles/ee368/skincolor....
[1] Calvert, Ian (2014): Finger pointing detection. figshare. http://dx.doi.org/10.6084/m9.figshare.953171
EDIT - I'm sure there are many good approaches for this, and many fancy ones. This is very simple and was researched/written purely for fun in a couple of weeks.
EDIT 2 - The final slide shows the more interesting part, where you use edge detectors to guide your estimation of what is inside or outside a shape. That plus an adaptive threshold (designed to stop if the number of pixels included jumped rapidly) got some good results, but I've not got the code any more.