library(swirl)
swirl()
library(fields)
We’ll find the closest two points and put them together in | one cluster, then find the next closest pair in the updated picture, | and so forth. We’ll repeat this process until we reach a reasonable | stopping place.
There are several ways to measure | distance or similarity. Euclidean distance and correlation similarity | are continuous measures, while Manhattan distance is a binary | measure.
Euclidean distance is what you learned about in high school algebra. | Given two points on a plane, (x1,y1) and (x2,y2), the Euclidean | distance is the square root of the sums of the squares of the | distances between the two x-coordinates (x1-x2) and the two | y-coordinates (y1-y2). You probably recognize this as an application | of the Pythagorean theorem which yields the length of the hypotenuse | of a right triangle.
Euclidean distance is distance “as the crow flies”. Many | applications, however, can’t realistically use crow-flying distance. | Cars, for instance, have to follow roads. In this case, we can use Manhattan or city block distance
You want to travel from the point at the lower left to the one on the | top right. The shortest distance is the Euclidean (the green line), | but you’re limited to the grid, so you have to follow a path similar | to those shown in red, blue, or yellow. These all have the same | length (12) which is the number of small gray segments covered by | their paths.
More formally, Manhattan distance is the sum of the absolute values
of the distances between each coordinate, so the distance between the
points (x1,y1) and (x2,y2) is |x1-x2|+|y1-y2|. As with Euclidean
distance, this too generalizes to more than 2 dimensions.
dist(dataFrame)
Run the R command dist with the argument dataFrame to compute the | distances between all pairs of these points. By default dist uses | Euclidean distance. Entry (i,j) | indicates the distance between points i and j. Clearly you need only | a lower triangular matrix since the distance between points i and j | equals that between j and i.
simple function which | you can call which creates a dendrogram for you
hc<-hclust(distxy)
plot(hc)
plot(as.dendrogram(hc))
abline(h=1.5, col="blue")
We see that by cutting at .4 we have 5 clusters, indicating that this | distance is small enough to break up our original grouping of points.
abline(h=.4, col="red")
at .05, we are getting 12
abline(h=.05, col="green")
So the number of clusters in your data depends on where you draw the | line!
There are several ways to measure the distances between clusters of points. We’ll just mention two. The first | is called complete linkage and it says that if you’re trying to | measure a distance between two clusters, take the greatest distance | between the pairs of points in those two clusters. Obviously such | pairs contain one point from each cluster
To measure distance
dist(dFsm)
The second way to measure a distance between two clusters that we’ll | just mention is called average linkage. First you compute an | “average” point in each cluster (think of it as the cluster’s center | of gravity). You do this by computing the mean (average) x and y | coordinates of the points in the cluster. | Then you compute the distances between each cluster average to | compute the intercluster distance.
The last method of visualizing data we’ll mention in this lesson | concerns heat maps. Wikipedia (http://en.wikipedia.org/wiki/Heat_map) | tells us a heat map is “a graphical representation of data where the | individual values contained in a matrix are represented as colors. | … Heat maps originated in 2D displays of the values in a data | matrix. Larger values were represented by small dark gray or black | squares (pixels) and smaller values by lighter squares.”
heatmap()
heatmap(dataMatrix, col = cm.colors(25) )
data("mtcars")
heatmap(mt)
Once you decide basics, such as defining a distance | metric and linkage method, hierarchical clustering is deterministic.
LS0tCnRpdGxlOiAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmciCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyfQpsaWJyYXJ5KHN3aXJsKQpzd2lybCgpCmxpYnJhcnkoZmllbGRzKQpgYGAKCiBXZSdsbCBmaW5kIHRoZSBjbG9zZXN0IHR3byBwb2ludHMgYW5kIHB1dCB0aGVtIHRvZ2V0aGVyIGluCnwgb25lIGNsdXN0ZXIsIHRoZW4gZmluZCB0aGUgbmV4dCBjbG9zZXN0IHBhaXIgaW4gdGhlIHVwZGF0ZWQgcGljdHVyZSwKfCBhbmQgc28gZm9ydGguIFdlJ2xsIHJlcGVhdCB0aGlzIHByb2Nlc3MgdW50aWwgd2UgcmVhY2ggYSByZWFzb25hYmxlCnwgc3RvcHBpbmcgcGxhY2UuCgpUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIG1lYXN1cmUKfCBkaXN0YW5jZSBvciBzaW1pbGFyaXR5LiBFdWNsaWRlYW4gZGlzdGFuY2UgYW5kIGNvcnJlbGF0aW9uIHNpbWlsYXJpdHkKfCBhcmUgY29udGludW91cyBtZWFzdXJlcywgd2hpbGUgTWFuaGF0dGFuIGRpc3RhbmNlIGlzIGEgYmluYXJ5CnwgbWVhc3VyZS4gCgpFdWNsaWRlYW4gZGlzdGFuY2UgaXMgd2hhdCB5b3UgbGVhcm5lZCBhYm91dCBpbiBoaWdoIHNjaG9vbCBhbGdlYnJhLgp8IEdpdmVuIHR3byBwb2ludHMgb24gYSBwbGFuZSwgKHgxLHkxKSBhbmQgKHgyLHkyKSwgdGhlIEV1Y2xpZGVhbgp8IGRpc3RhbmNlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc3VtcyBvZiB0aGUgc3F1YXJlcyBvZiB0aGUKfCBkaXN0YW5jZXMgYmV0d2VlbiB0aGUgdHdvIHgtY29vcmRpbmF0ZXMgKHgxLXgyKSBhbmQgdGhlIHR3bwp8IHktY29vcmRpbmF0ZXMgKHkxLXkyKS4gWW91IHByb2JhYmx5IHJlY29nbml6ZSB0aGlzIGFzIGFuIGFwcGxpY2F0aW9uCnwgb2YgdGhlIFB5dGhhZ29yZWFuIHRoZW9yZW0gd2hpY2ggeWllbGRzIHRoZSBsZW5ndGggb2YgdGhlIGh5cG90ZW51c2UKfCBvZiBhIHJpZ2h0IHRyaWFuZ2xlLgoKRXVjbGlkZWFuIGRpc3RhbmNlIGlzIGRpc3RhbmNlICJhcyB0aGUgY3JvdyBmbGllcyIuIE1hbnkKfCBhcHBsaWNhdGlvbnMsIGhvd2V2ZXIsIGNhbid0IHJlYWxpc3RpY2FsbHkgdXNlIGNyb3ctZmx5aW5nIGRpc3RhbmNlLgp8IENhcnMsIGZvciBpbnN0YW5jZSwgaGF2ZSB0byBmb2xsb3cgcm9hZHMuIEluIHRoaXMgY2FzZSwgd2UgY2FuIHVzZSBNYW5oYXR0YW4gb3IgY2l0eSBibG9jayBkaXN0YW5jZQoKWW91IHdhbnQgdG8gdHJhdmVsIGZyb20gdGhlIHBvaW50IGF0IHRoZSBsb3dlciBsZWZ0IHRvIHRoZSBvbmUgb24gdGhlCnwgdG9wIHJpZ2h0LiBUaGUgc2hvcnRlc3QgZGlzdGFuY2UgaXMgdGhlIEV1Y2xpZGVhbiAodGhlIGdyZWVuIGxpbmUpLAp8IGJ1dCB5b3UncmUgbGltaXRlZCB0byB0aGUgZ3JpZCwgc28geW91IGhhdmUgdG8gZm9sbG93IGEgcGF0aCBzaW1pbGFyCnwgdG8gdGhvc2Ugc2hvd24gaW4gcmVkLCBibHVlLCBvciB5ZWxsb3cuIFRoZXNlIGFsbCBoYXZlIHRoZSBzYW1lCnwgbGVuZ3RoICgxMikgd2hpY2ggaXMgdGhlIG51bWJlciBvZiBzbWFsbCBncmF5IHNlZ21lbnRzIGNvdmVyZWQgYnkKfCB0aGVpciBwYXRocy4KCnwgTW9yZSBmb3JtYWxseSwgTWFuaGF0dGFuIGRpc3RhbmNlIGlzIHRoZSBzdW0gb2YgdGhlIGFic29sdXRlIHZhbHVlcwp8IG9mIHRoZSBkaXN0YW5jZXMgYmV0d2VlbiBlYWNoIGNvb3JkaW5hdGUsIHNvIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZQp8IHBvaW50cyAoeDEseTEpIGFuZCAoeDIseTIpIGlzIHx4MS14MnwrfHkxLXkyfC4gQXMgd2l0aCBFdWNsaWRlYW4KfCBkaXN0YW5jZSwgdGhpcyB0b28gZ2VuZXJhbGl6ZXMgdG8gbW9yZSB0aGFuIDIgZGltZW5zaW9ucy4KCmBgYHtyfQpkaXN0KGRhdGFGcmFtZSkKYGBgCgpSdW4gdGhlIFIgY29tbWFuZCBkaXN0IHdpdGggdGhlIGFyZ3VtZW50IGRhdGFGcmFtZSB0byBjb21wdXRlIHRoZQp8IGRpc3RhbmNlcyBiZXR3ZWVuIGFsbCBwYWlycyBvZiB0aGVzZSBwb2ludHMuIEJ5IGRlZmF1bHQgZGlzdCB1c2VzCnwgRXVjbGlkZWFuIGRpc3RhbmNlLiBFbnRyeSAoaSxqKQp8IGluZGljYXRlcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwb2ludHMgaSBhbmQgai4gQ2xlYXJseSB5b3UgbmVlZCBvbmx5CnwgYSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBzaW5jZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwb2ludHMgaSBhbmQgagp8IGVxdWFscyB0aGF0IGJldHdlZW4gaiBhbmQgaS4KCgoKc2ltcGxlIGZ1bmN0aW9uIHdoaWNoCnwgeW91IGNhbiBjYWxsIHdoaWNoIGNyZWF0ZXMgYSBkZW5kcm9ncmFtIGZvciB5b3UKCgpgYGB7cn0KIGhjPC1oY2x1c3QoZGlzdHh5KQpwbG90KGhjKQpwbG90KGFzLmRlbmRyb2dyYW0oaGMpKQphYmxpbmUoaD0xLjUsIGNvbD0iYmx1ZSIpCgpgYGAKV2Ugc2VlIHRoYXQgYnkgY3V0dGluZyBhdCAuNCB3ZSBoYXZlIDUgY2x1c3RlcnMsIGluZGljYXRpbmcgdGhhdCB0aGlzCnwgZGlzdGFuY2UgaXMgc21hbGwgZW5vdWdoIHRvIGJyZWFrIHVwIG91ciBvcmlnaW5hbCBncm91cGluZyBvZiBwb2ludHMuCmBgYHtyfQphYmxpbmUoaD0uNCwgY29sPSJyZWQiKQpgYGAKCmF0IC4wNSwgd2UgYXJlIGdldHRpbmcgMTIKYGBge3J9CiBhYmxpbmUoaD0uMDUsIGNvbD0iZ3JlZW4iKQpgYGAKClNvIHRoZSBudW1iZXIgb2YgY2x1c3RlcnMgaW4geW91ciBkYXRhIGRlcGVuZHMgb24gd2hlcmUgeW91IGRyYXcgdGhlCnwgbGluZSEgCgpUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIG1lYXN1cmUgdGhlIGRpc3RhbmNlcyBiZXR3ZWVuIGNsdXN0ZXJzIG9mIHBvaW50cy4gV2UnbGwganVzdCBtZW50aW9uIHR3by4gVGhlIGZpcnN0CnwgaXMgY2FsbGVkIGNvbXBsZXRlIGxpbmthZ2UgYW5kIGl0IHNheXMgdGhhdCBpZiB5b3UncmUgdHJ5aW5nIHRvCnwgbWVhc3VyZSBhIGRpc3RhbmNlIGJldHdlZW4gdHdvIGNsdXN0ZXJzLCB0YWtlIHRoZSBncmVhdGVzdCBkaXN0YW5jZQp8IGJldHdlZW4gdGhlIHBhaXJzIG9mIHBvaW50cyBpbiB0aG9zZSB0d28gY2x1c3RlcnMuIE9idmlvdXNseSBzdWNoCnwgcGFpcnMgY29udGFpbiBvbmUgcG9pbnQgZnJvbSBlYWNoIGNsdXN0ZXIKClRvIG1lYXN1cmUgZGlzdGFuY2UKYGBge3J9CmRpc3QoZEZzbSkKYGBgCgoKVGhlIHNlY29uZCB3YXkgdG8gbWVhc3VyZSBhIGRpc3RhbmNlIGJldHdlZW4gdHdvIGNsdXN0ZXJzIHRoYXQgd2UnbGwKfCBqdXN0IG1lbnRpb24gaXMgY2FsbGVkIGF2ZXJhZ2UgbGlua2FnZS4gRmlyc3QgeW91IGNvbXB1dGUgYW4KfCAiYXZlcmFnZSIgcG9pbnQgaW4gZWFjaCBjbHVzdGVyICh0aGluayBvZiBpdCBhcyB0aGUgY2x1c3RlcidzIGNlbnRlcgp8IG9mIGdyYXZpdHkpLiBZb3UgZG8gdGhpcyBieSBjb21wdXRpbmcgdGhlIG1lYW4gKGF2ZXJhZ2UpIHggYW5kIHkKfCBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIGluIHRoZSBjbHVzdGVyLgp8IFRoZW4geW91IGNvbXB1dGUgdGhlIGRpc3RhbmNlcyBiZXR3ZWVuIGVhY2ggY2x1c3RlciBhdmVyYWdlIHRvCnwgY29tcHV0ZSB0aGUgaW50ZXJjbHVzdGVyIGRpc3RhbmNlLgoKYGBge3J9CgpgYGAKClRoZSBsYXN0IG1ldGhvZCBvZiB2aXN1YWxpemluZyBkYXRhIHdlJ2xsIG1lbnRpb24gaW4gdGhpcyBsZXNzb24KfCBjb25jZXJucyBoZWF0IG1hcHMuIFdpa2lwZWRpYSAoaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWF0X21hcCkKfCB0ZWxscyB1cyBhIGhlYXQgbWFwIGlzICJhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiBkYXRhIHdoZXJlIHRoZQp8IGluZGl2aWR1YWwgdmFsdWVzIGNvbnRhaW5lZCBpbiBhIG1hdHJpeCBhcmUgcmVwcmVzZW50ZWQgYXMgY29sb3JzLgp8IC4uLiBIZWF0IG1hcHMgb3JpZ2luYXRlZCBpbiAyRCBkaXNwbGF5cyBvZiB0aGUgdmFsdWVzIGluIGEgZGF0YQp8IG1hdHJpeC4gTGFyZ2VyIHZhbHVlcyB3ZXJlIHJlcHJlc2VudGVkIGJ5IHNtYWxsIGRhcmsgZ3JheSBvciBibGFjawp8IHNxdWFyZXMgKHBpeGVscykgYW5kIHNtYWxsZXIgdmFsdWVzIGJ5IGxpZ2h0ZXIgc3F1YXJlcy4iCgpgYGB7cn0KaGVhdG1hcCgpCmhlYXRtYXAoZGF0YU1hdHJpeCwgY29sID0gY20uY29sb3JzKDI1KSApCmRhdGEoIm10Y2FycyIpCmhlYXRtYXAobXQpCmBgYAoKT25jZSB5b3UgZGVjaWRlIGJhc2ljcywgc3VjaCBhcyBkZWZpbmluZyBhIGRpc3RhbmNlCnwgbWV0cmljIGFuZCBsaW5rYWdlIG1ldGhvZCwgaGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgaXMgZGV0ZXJtaW5pc3RpYy4K