Perform agglomerative hierarchical clustering using centroid linkage and the Mahalanobis distance, then passes cluster centroids and covariance matrix to kmeans cluster procedure for refinement.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | x(nd,nv) |
input data matrix (samples, variables) |
||
integer(kind=i4), | intent(in) | :: | nd |
number of data points |
||
integer(kind=i4), | intent(in) | :: | nv |
number of variables |
||
integer(kind=i4), | intent(in) | :: | nc |
number of clusters (target) |
||
real(kind=wp), | intent(out) | :: | gm(nv) |
global means for each variable |
||
real(kind=wp), | intent(out) | :: | cm(nv,nc) |
cluster centroids |
||
integer(kind=i4), | intent(out) | :: | cl(nd) |
cluster assignments for each data point |
||
integer(kind=i4), | intent(out) | :: | cc(nc) |
cluster sizes |
||
real(kind=wp), | intent(out) | :: | cov(nv,nv) |
covariance matrix |
||
real(kind=wp), | intent(out) | :: | sigma(nv) |
standard deviation per variable |
pure subroutine s_nlp_hkmeans_core(x, nd, nv, nc, gm, cm, cl, cc, cov, sigma) ! ==== Description !! Perform agglomerative hierarchical clustering using centroid linkage !! and the Mahalanobis distance, then passes cluster centroids and !! covariance matrix to kmeans cluster procedure for refinement. ! ==== Declarations real(wp) , intent(in) :: x(nd, nv) !! input data matrix (samples, variables) integer(i4), intent(in) :: nd !! number of data points integer(i4), intent(in) :: nv !! number of variables integer(i4), intent(in) :: nc !! number of clusters (target) real(wp) , intent(out) :: gm(nv) !! global means for each variable real(wp) , intent(out) :: cm(nv,nc) !! cluster centroids integer(i4), intent(out) :: cl(nd) !! cluster assignments for each data point integer(i4), intent(out) :: cc(nc) !! cluster sizes real(wp) , intent(out) :: cov(nv,nv) !! covariance matrix real(wp) , intent(out) :: sigma(nv) !! standard deviation per variable real(wp) :: cm_h(nv,nc) !! cluster centroids passed from hclust to kmeans real(wp) :: cov_h(nv,nv) !! covariance matrix passed from hclust to kmeans ! ==== Instructions ! hierarchical clustering call s_nlp_hclust_core(x, nd, nv, nc, gm, cm_h, cl, cc, cov_h, sigma) ! kmeans refinement call s_nlp_kmeans_core(x, nd, nv, nc, cm_h, gm, cm, cl, cc, & & cov, sigma, cov_in=cov_h) end subroutine s_nlp_hkmeans_core