I never thought, I would be knowing the definition of a graded modules in this way—via Persistence Modules. People study structures known as persistence modules, which forms the basis of persistence theory. The definition reads—
So, the usual notion of modules which I know definitely doesn't seem near to this. Maybe direct limits, chain complexes, etc., which seems similar, might include modules, but that pair (V, π) doesn't look like a module at the first glance. But, for a surprise, look at the following lemma.
We can appeal to structure theorem for graded modules over graded principal ideal domains to get a unique representation for a given persistence module. But how is this connected to the data analysis?
Given data, we get a continuous persistence modules V which consists of the homologies. Since, we impose finite type conditions, we have a unique representation of the persistence module in terms of a multiset of intervals called barcode, B(V). This barcode encapsulates the complete information about our given data, hence the name barcode. So this assignment V → B(V) is an injection. Thus, the information about the shape of data is completely given by B(V). Now, if there is just a slight perturbation in the data, we expect that there also should be just a slight perturbation in the corresponding barcodes. So, the “distance” between persistence modules V and W should be same as the “distance” between B(V) and B(W), which leads to the concept of bottleneck distance (whose one of the applications is given below).
Suppose we have a data in the shape of an English letter say R. Our eyes comprehend that the shape is like the alphabet, but the computer doesn't. To make the computer "understand", we need to compare the shape of data with the actual letters. Here, we appeal to the bottleneck distance. Suppose we upload our handwritten letter R and handwritten O into the computer. We expect that the bottleneck distance between our uploaded letter R and the data in the shape of R should be less compared to that of our O and the data in the shape of R. This is the basic idea. A pretty much primary usage of bottleneck distance. We see the results as follows.
To get a data loosely in the shape of R, we add some noise i.e., blur-ness to the letter R and plot the points in the shape of the blurred R. We get the point cloud in the shape of this blurred R (Fig. 1) and calculate its persistence diagrams using ripser package over python.
Fig.1 - Letter R with noise
Fig.2 - Generated point cloud and corresponding persistence diagrams
Now, we upload handwritten letters R and O to the computer. (cf. Fig 3 and 4.)
With this uploaded letters, we get the data points in terms of them and compute their persistence diagrams. That is given in Fig.5 and 6.
Fig.3 - Handwritten R
Fig.4 - Handwritten O
Fig.5 - Generated points of written R and corresponding persistence diagram
Fig.6 - Generated points of written O and corresponding persistence diagram
We now compute the matchings and bottleneck distance between the generated data in shape of R and handwritten R as shown in FIg.7.
The bottleneck distance turns out to be ~6.
From Fig.8, we observe that we have matchings between the generated data in shape of R and handwritten O where the bottleneck distance turns out to be ~19.41 which is almost three times larger than that of with R.
Thus, the generated R is closer to the hand-written R than that of hand-written O, as expected!
Fig.7 - Matchings of generated R and hand-drawn R
Fig.8 - Matchings of generated R and hand-drawn O
One can find complete report of the project here.