RKMeans()
Calls the k-means algorithm and returns the cluster vector and cluster center matrix.
Synopsis
int RKMeans( const dyn_dyn_float vals, int clusters, dyn_int& clusterVec, dyn_dyn_float& clusterCen, bool scale, [ int nstart = 25], int userData = 0);
Parameter | Description |
---|---|
vals | Matrix of values. |
clusters | Number of clusters to be calculated. |
clusterVec | Return parameter of cluster ID vector. |
clusterCen | Return parameter of cluster center matrix. Each cluster is represented by a cluster center. The coordinates of a cluster center represent the characteristic values of each cluster. |
scale |
Scale factor. In order to compare values of different units and value ranges (for example, temperature, speed, current etc.) with each other, the values should be scaled (normalized). The RKMeans function scales the values when you set the "scale" parameter to TRUE. Since in most cases values of different units are used, it is recommended to set the value to TRUE. |
nstart | Number of start tries for the cluster calculation. To obtain stable results, you can specify a higher start number for the nStart. Thus, the algorithm is calculated as many times as specified via the parameter in order to return the best possible results. |
userData | User data of the function call. The user data variable can be set to an integer value and be used to detect errors when calling R functions. Set the variable to an integer value and when the function is called and an error occurs, the specified integer value is returned. |
Return Value
The function returns 0 if it was successfully executed.
Description
Calls the k-means algorithm and returns the cluster vector and cluster center matrix.
Example
The example calls the k-means algorithm and returns the cluster vector and cluster center matrix.
#uses "CtrlR"
main()
{
dyn_float df1 = makeDynFloat(31,31,33,32,34,33,32,35,29,34,38,40,37,38,36,36,36,39,38,40,35,32,34,32,34,29,29,28,31,28,30,34,33,28,31,32,33,33,33,35,36,36,40,38,40,37,40,38,40,38);
dyn_float df2 = makeDynFloat(401,381,382,392,406,372,361,405,392,399,350,342,346,354,304,345,320,317,356,323,386,406,405,396,400,401,365,400,391,398,362,368,363,373,389,370,406,386,402,367,379,380,406,389,374,379,399,406,377,407);
dyn_float df3 = makeDynFloat(89,85,90,90,99,88,83,102,81,97,95,98,92,96,78,89,83,89,97,93,97,93,99,91,97,83,76,80,87,80,78,90,86,75,86,85,96,91,95,92,98,98,116,106,107,100,114,111,108,111);
dyn_float df4 = makeDynFloat(63,97,73,73,75,75,80,93,96,77,86,81,85,83,74,68,73,63,86,60,85,93,90,79,79,68,81,66,65,95,96,71,72,81,73,63,84,75,67,77,73,85,100,95,74,71,97,98,67,63);
dyn_float df5 = makeDynFloat(4,10,10,-4,8,8,-3,3,8,9,6,7,0,3,10,8,3,9,10,8,9,-3,6,9,1,3,6,-4,0,-2,-2,7,6,3,-2,6,8,8,0,3,-3,2,3,10,6,1,4,4,2,8);
dyn_float df6 = makeDynFloat(35,32,34,34,38,34,33,36,31,30,37,39,39,34,33,39,30,33,37,35,44,40,41,41,43,44,44,40,42,45,37,30,30,33,33,35,36,39,36,34,34,30,32,30,30,32,31,34,35,38);
dyn_float df7 = makeDynFloat(35,32,34,34,38,34,33,36,31,30,37,39,39,34,33,39,30,33,37,35,44,40,41,41,43,44,44,40,42,45,37,30,30,33,33,35,36,39,36,34,34,30,32,30,30,32,31,34,35,38);
string err_desc;
int userData = 4;
dyn_dyn_float ddf1;
dynAppend(ddf1,df1);
dynAppend(ddf1,df2);
dynAppend(ddf1,df3);
dynAppend(ddf1,df4);
dynAppend(ddf1,df5);
dynAppend(ddf1,df6);
dynAppend(ddf1,df7);
DebugN("Content of the ddf:", ddf1);
/* !!!Function calls of RKMEans(Calls the k-means algorithm and returns the cluster vector and cluster center matrix.) and RCalcLabels (Determines the cluster label vector and the
associated center distance vector based on a value matrix and a cluster center matrix.*/
int nStart = 25;/* Number of start tries for the cluster calculation. */
dyn_int clusterVec; /* Return parameter of the cluster ID vector */
dyn_dyn_float clusterCen; /* Return parameter of the cluster center matrix */
dyn_float centerDist; /* Return parameter of the center distance vector associated to the cluster ID vector */
bool scale = TRUE; //scale factor
int x = RKMeans(ddf1, 5, clusterVec, clusterCen, scale, nStart, userData); /* Function call (5 = number of clusters) */
DebugN("ClusterCen",clusterCen);
int i;
i = RCalcLabels(ddf1, clusterCen, clusterVec, centerDist);
//Function call of RCalcLabels
DebugN("clusterVec:", clusterVec, "centerDist:",centerDist);
}