2017-09-20 4 views
1

Je voudrais regrouper des noeuds basés sur un ensemble de données constitué de lectures différentes pour chaque noeud à différents moments.Mise en cluster de noeuds basés sur différentes lectures à différents moments en utilisant K-Means

ici est un exemple de mes données:

1.0000 21.0860 46.1968 2.3000 2.3568 
1.0000 21.0762 46.0326 0.9200 2.3568 
1.0000 21.0664 45.9669 0.9200 2.3568 
2.0000 89.5488 29.2581 11.9600 1.9537 
2.0000 19.5670 39.6878 121.4400 2.6753 
2.0000 19.5376 39.7557 121.4400 2.6753 
2.0000 19.4788 39.6878 121.4400 2.6633 

où 1 dans la première colonne indique les données pour le noeud 1 et 2 indique les données relatives au noeud 2.

Comment puis-je forcer K-Means pour regrouper les données alors que tous les points de données du nœud 1 tombent dans le même cluster et ainsi de suite.

NOTE Le but est de regrouper les noeuds et non les données.

Voici mon code dans Matlab où je ne considère pas les étiquettes de nœud et simplement CLUSTERED les données qui sont en réalité pas souhaitée:

filename = 'data.txt'; 
 
delimiterIn = ' '; 
 
headerlinesIn = 1; 
 
A = importdata(filename,delimiterIn); 
 
data = A.data; 
 
DATA_REAL = A.data(1:n,3:end); 
 

 
temperature = DATA_REAL(:,1); 
 
humidity = DATA_REAL(:,2); 
 
light = DATA_REAL(:,3); 
 
voltage = DATA_REAL(:,4); 
 

 
%% 2 Dimension 
 

 
% K-means Algorithm for 2D %% 
 

 
[KM_R2,C_R2,sumd_R2,D_R2] = MY_KMEANS(DATA_REAL(:,1:2),K); 
 

 
figure 
 
plot(temperature,humidity,'r.') 
 
hold on 
 
grid on 
 

 
Nodes_in_Cluster = zeros(1,K); 
 

 
for j = 1:K 
 
    Nodes_in_Cluster(j) = length(find(KM_R2==j)); 
 
end 
 

 
for i = 1:length(DATA_REAL) 
 
    text(temperature(i),humidity(i),num2str(KM_R2(i)),'BackgroundColor',cc(KM_R2(i),:)); 
 
end 
 
title(['Number of clusters in K-means:',num2str(K)]) 
 
xlabel('temperature') 
 
ylabel('humidity')

Tout conseil en Matlab ou Python est apprécié .

Si vous pensez que K-Means n'est pas approprié pour ce type de clustering, quelle est votre suggestion?

Merci,

+1

Lequel est-ce, Python ou MATLAB? S'il vous plaît montrer votre code. Pourquoi avez-vous besoin de regrouper vos données si vous avez déjà des étiquettes sur vos données? En outre, les captures d'écran sont particulièrement inutiles. Il est vraiment difficile de copier et coller des données à partir d'une capture d'écran. – beaker

+0

J'ai modifié la question en supprimant la capture d'écran. Bien que j'ai des étiquettes pour les données, je veux regrouper les nœuds car il y a près de 100 nœuds et je veux avoir presque 5 clusters. – Nadi

+0

De quelle pondération avez-vous besoin parmi les nœuds? Est-ce qu'un nœud avec 20 points de données l'emporte sur un nœud avec seulement trois? Sinon, votre première tâche consiste à pré-traiter les données, en remplaçant chaque nœud par son centroïde. Ensuite, regroupez simplement les centroïdes. En outre, modifiez le numéro de nœud en une chaîne et supprimez cette colonne de la formule de distance. – Prune

Répondre

1

Je suggère que vous marchez à travers un tutoriel sur le paquet SciKit Python. Cela a beaucoup d'outils de ML, y compris les fonctions K-Means et centroïdes. NumPy vous aidera à mettre en place une belle matrice à partir de vos données et à les manipuler à votre guise.

En général, vous voulez

  1. Trouver le barycentre pour chaque nœud, l'effondrement de vos données à environ 100 lignes.
  2. Utilisez la fonction de clustering SciKit k-means, en ne tenant pas compte de la première colonne (numéro de nœud); vous ne voulez pas que l'ID de nœud fasse partie du calcul de distance.
1

Il existe une variante appelée incertaine k-means que vous pouvez essayer.

En théorie, vous supposez que toutes les lectures différentes de chaque nœud sont également probables (vous pouvez également utiliser des poids). Ensuite, vous dessinez une lecture aléatoire pour chaque nœud pour mesurer les distances, et répétez cela très souvent (en théorie, les méthodes calculent directement quel son se produit si vous le faites infiniment souvent, je crois). De cette façon, vous pouvez regrouper les nœuds comme dans les k-means réguliers.