# What is the most appropriate ML technology or math tool for classifying/recognizing 2D scatter plot shapes? [closed]

I would like to be able to automatically classify an input scatter plot into a limited, predefined set of 2-D scatter plots (see attached image), such as a Circle, a Cross, a Straight Line and a Curvy Line - such that, given any new scatter plot as input, the system can correctly categorize it by finding the closest category match. Ideally, the classification process should also be scale-, translation- and rotation-invariant.

Can anyone suggest an appropriate technology for the training and classification of such 2-D patterns?

Will it involve some sort of non-linear correlation coefficient computation?

Your data would profit from the nearest-neighbor clustering algorithm. (This differs slightly from the nearest-neighbor pattern classification algorithm, which is based on forming a Voronoi tessellation of the input space.) In nearest-neighbor clustering, each point is linked to a neighboring point if the distance (typically a Euclidean distance) is less than some threshold $d_0$. In this way, chains (and tight clusters) are jointed but separate groups are not. Of course, the number and identity of the clusters depends upon this criterion threshold $d_0$. If $d_0$ is large, then the entire data set falls into a single cluster; if $d_0$ is very small, then each individual point is a singleton cluster. The choice of $d_0$, then, is application dependent.

Once can use statistical measures of the distribution in distance to find natural "gaps" in such distances to find a "natural" value for $d_0$ that captures inherent clusters in the data.

Once you have your clusters, you can either merely label them as separate, or instead (and you imply) classify their shape. In the latter case, you'll need a simple grammar or statistical description of your categories. For instance, whether the points are linked in a chain, or a cross, or whatever.

Here is a small $d_0$:

Here is a larger $d_0$:

Now, to do pattern matching between some new data and one of these templates or exemplars, you have to decide ahead of time the transformations or invariances you allow, such as scale, rotation, and presumably some amount of distortion. I would normalize all your datasets to fit into a unit square. Then "blur" each point (with a Gaussian kernel) and do a simple correlation between your test data and each of the templates, allowing for the imposed transformations (e.g., rotation).

• Thnx for the info. Will investigate it further. – Oke Uwechue Apr 21 '18 at 2:26