pour calculer la silhouette qui la forme a-b/(max(a,b))

j'ai fait ce code j'ia une liste de cluster appelé cluster a c'est la distance moyenne et b c'est le plus proche voisin
maic ca n'as pas marché , elle marche pour une excution et pour une autre non qlq 'un peut m'aider
merci d'avance



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*****silouette**************************************************************************/
				 Double a= 0.0;
				 Double b=0.0;
				Double mindist2=200.0;
 
				ArrayList<ArrayList<Double>> S ;
				ArrayList<ArrayList<Double>> A ;
				ArrayList<ArrayList<Double>> B ;
 
				S = new ArrayList<ArrayList<Double>>(k);
				A = new ArrayList<ArrayList<Double>>(k);
				B = new ArrayList<ArrayList<Double>>(k);
 
				for(int j=0;j<k;j++)
				{		
			    S.add(new ArrayList<Double>());
				B.add(new ArrayList<Double>());//cluster.get(j).size()));
				A.add(new ArrayList<Double>());//cluster.get(j).size()));
			         }
 
				int clusterproche=0;
					 for(int j=0;j<k;j++)
					 {
						 for(int cl=0;cl<cluster.get(j).size();cl++)
 
						 {
 
						for(int cl2=0;cl2<cluster.get(j).size();cl2++)	 
 
						{
 
							a+=distanceEuclidienne(cluster.get(j).get(cl),cluster.get(j).get(cl2));
						}
 
						a=(a/(cluster.get(j).size()-1));
 
						A.get(j).add(a);
 
						 }
						 for(int s=0;s<k;s++)
						 { for(int m=0;m<A.get(s).size();m++)
						 {// jTextArea1.append("cluster n "+s);
						 // jTextArea1.append(""+A.get(s).get(m)+"|");
							 }}
 
					 }
						 for(int j=0;j<k;j++)
					     {
						 for(int c=0;c<k;c++)
 
 
 
						 {if(c!=j)
 
						 {
							 if (distanceEuclidienne(centreCluster.get(j), centreCluster.get(c))<mindist2){
									mindist2=distanceEuclidienne(centreCluster.get(j), centreCluster.get(c));
									clusterproche = c;
 
						 }
							 }
						 } 
						// jTextArea1.append("clusterproche"+clusterproche+"pour cluster"+j);
 
 
 
 
 
 
 
 
						 for(int cl=0;cl<cluster.get(j).size();cl++)
						 {	
 
					     for(int cl2=0;cl2<cluster.get(clusterproche).size();cl2++)
						 {
							 b+=distanceEuclidienne(cluster.get(j).get(cl),cluster.get(clusterproche).get(cl2));
 
 
						 }
						 b=(b/(cluster.get(clusterproche).size()));
						 B.get(j).add(b);
						 }
 
					      }
 
					/**      for(int s=0;s<k;s++)
                                                 { for(int m=0;m<B.get(s).size();m++)
                                                 { jTextArea1.append("cluster n "+s);
                                                  jTextArea1.append(""+B.get(s).get(m)+"|");
                                                         }}
                                                */ 
 
						 for(int j=0;j<k;j++)
						 {
						 for(int cl=0;cl<cluster.get(j).size();cl++)
						 {
						 a=A.get(j).get(cl);
						 b=B.get(j).get(cl);
						 if(a>b)
						 {
							double x=((b-a)/a);
							 S.get(j).add(x);
 
 
						 }
						 else if(a<b)
						 { double x=((b-a)/b);
						 S.get(j).add(x);
						 }
						 else  S.get(j).add(0.0);
 
						 }
 
 
					 }
 
 
						 DecimalFormat df = new DecimalFormat("0.00"); 
 
						 for(int s=0;s<k;s++)
						 { silouette_textArea.append("cluster n  "+(s+1)+": ");
 
						 silouette_textArea.append("\n");
						 { for(int m=0;m<B.get(s).size();m++)
 
							 silouette_textArea.append(""+df.format(S.get(s).get(m))+"|");
							 }silouette_textArea.append("\n");
						 }