<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace">Hey guys sorry to hijack,<br></div><div class="gmail_default" style="font-family:monospace,monospace">just to give a testimony about clustering.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">I uses a lot of clustering / learning (I'm a phd student),<br></div><div class="gmail_default" style="font-family:monospace,monospace">at the beggining I used plpgsql to write functions,<br></div><div class="gmail_default" style="font-family:monospace,monospace">then I grew tired and resorted to plpython coupled with <a href="http://scikit-learn.org/stable/modules/clustering.html#clustering">scikit-learn</a>.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">A major missing function was the connected-components, <br></div><div class="gmail_default" style="font-family:monospace,monospace">which I ended up implementing in sql, plpgsql, and trough python (networkx).<br></div><div class="gmail_default" style="font-family:monospace,monospace"><br><br></div><div class="gmail_default" style="font-family:monospace,monospace">In all cases, the functions returns a table with at least (point_id,cluster_id),<br></div><div class="gmail_default" style="font-family:monospace,monospace">(in your discussion it would be the windows function style, much better imo)<br></div><div class="gmail_default" style="font-family:monospace,monospace">for the moment the input has to be array of feature (limitation of plpython).<br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">I know I have more advanced needs than most,<br></div><div class="gmail_default" style="font-family:monospace,monospace">and I would definitively find it very useful to have simple clustering algorithms <br></div><div class="gmail_default" style="font-family:monospace,monospace">directly embedded within PostGis.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">But please consider that all those advanced clustering functions <br></div><div class="gmail_default" style="font-family:monospace,monospace">already exists, works, scale well, are being maintained and so.<br></div><div class="gmail_default" style="font-family:monospace,monospace">So if you want to add real clustering capabilities<br></div><div class="gmail_default" style="font-family:monospace,monospace">(liek DBSCAN, a much more advanced method than k-means), <br></div><div class="gmail_default" style="font-family:monospace,monospace">would'nt it be better to create a postgis-clustering extension with wrapper <br></div><div class="gmail_default" style="font-family:monospace,monospace">around a dedicated clustering lib (a bit like sfcgal wrapps a dedicated 3D tool).<br></div><div class="gmail_default" style="font-family:monospace,monospace">There is of course <a href="http://scikit-learn.org/stable/modules/clustering.html#clustering">scikit-learn</a> in python, but also <a href="https://github.com/mlpack/mlpack">mlpack</a> in cpp,<br>both with permissive licensing, sane dependency, etc.<br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">Cheers,<br></div><div class="gmail_default" style="font-family:monospace,monospace">Rémi-C<br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_extra"><br><div class="gmail_quote">2015-12-19 23:31 GMT+01:00 Paul Norman <span dir="ltr"><<a href="mailto:penorman@mac.com" target="_blank">penorman@mac.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="">On 12/19/2015 12:36 PM, Daniel Baston wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Are there any caveats we're missing?  Performance penalties, memory consumption, anything else?<br>
</blockquote>
<br></span>
I would expect a window function to be better, not needing unnest(). I'd also expect in practice the algorithm needing to go over all of the rows is going to be the major cause of use of memory or CPU, which is the same with window functions and aggregates.<br>
<br>
But, I haven't benchmarked any of this.<div class=""><div class="h5"><br>
_______________________________________________<br>
postgis-devel mailing list<br>
<a href="mailto:postgis-devel@lists.osgeo.org" target="_blank">postgis-devel@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/postgis-devel" rel="noreferrer" target="_blank">http://lists.osgeo.org/mailman/listinfo/postgis-devel</a></div></div></blockquote></div><br></div></div>