2017-06-17 2 views
-1

Je dois regrouper ma population en 8 clusters. J'utilise proc fastclus et la méthode k-means (pour minimiser la variance entre les clusters). Les observations représentent un score, il est donc important que même après le processus de clustering, elles restent ordonnées. J'ai remarqué que de cette façon:Cluster K-means avec proc fastclus (SAS) maintenant les observations ordonnées

proc sort data=input.population; 
by score; 
run; 

proc fastclus data = input.population 
       maxclusters = 8 list 
       out = score_clus 
       converge = 0.01 maxiter = 100 
       least = 2 noprint; 
var score; 
run; 

la procédure n'a pas maintenu l'ordre. Il y a un moyen (peut-être un paramètre du proc) que je peux utiliser pour mettre une autre liaison: minimiser la variance, mais maintenir le score ordonné à l'intérieur du cluster.

Répondre

1

Peut-être pourriez-vous prendre note de l'ordre des lignes avant d'exécuter le proc, puis trier dans chaque groupe par la suite? Si vous voulez l'utiliser comme une dimension de clustering, standardisez-la et alimentez-la comme l'une des entrées de la proc.

E.g. pourquoi ne pas créer une vue avec une variable supplémentaire comme celle-ci?

data input.v_population/view = input.v_population; 
set input.population; 
myorder + 1; 
run; 
0

Pour développer la réponse de l'utilisateur667489. Ajoutez un ID ou une variable SORT_ORDER aux données. Ensuite, sortez ça à la fin.

data cars/view=cars; 
set sashelp.cars; 
SORT_ORDER +1; 
run; 

proc fastclus data = cars 
       maxclusters = 8 list 
       out = score_clus 
       converge = 0.01 maxiter = 100 
       least = 2 noprint; 
var msrp; 
run; 

proc sort data=score_clus; 
by SORT_ORDER; 
run; 

Cela crée une vue avec la variable SORT_ORDER, puis exécute PROC FASCLUS sur les données de la vue, et trie ensuite les résultats que vous voulez.