@@ -19,8 +19,7 @@ export function calinskiHarabaszScore(
1919 // Global centroid
2020 const globalMean = new Float64Array ( d ) ;
2121 for ( const x of X )
22- for ( let j = 0 ; j < d ; j ++ )
23- globalMean [ j ] = ( globalMean [ j ] ?? 0 ) + ( x [ j ] ?? 0 ) / n ;
22+ for ( let j = 0 ; j < d ; j ++ ) globalMean [ j ] = ( globalMean [ j ] ?? 0 ) + ( x [ j ] ?? 0 ) / n ;
2423
2524 // Between-cluster dispersion
2625 let bcd = 0 ;
@@ -29,8 +28,7 @@ export function calinskiHarabaszScore(
2928 const nc = mask . filter ( Boolean ) . length ;
3029 const cm = new Float64Array ( d ) ;
3130 for ( let i = 0 ; i < n ; i ++ )
32- if ( mask [ i ] )
33- for ( let j = 0 ; j < d ; j ++ ) cm [ j ] = ( cm [ j ] ?? 0 ) + ( X [ i ] ?. [ j ] ?? 0 ) / nc ;
31+ if ( mask [ i ] ) for ( let j = 0 ; j < d ; j ++ ) cm [ j ] = ( cm [ j ] ?? 0 ) + ( X [ i ] ?. [ j ] ?? 0 ) / nc ;
3432 for ( let j = 0 ; j < d ; j ++ ) bcd += nc * ( cm [ j ] ! - globalMean [ j ] ! ) ** 2 ;
3533 }
3634
@@ -42,8 +40,7 @@ export function calinskiHarabaszScore(
4240 if ( nc === 0 ) continue ;
4341 const cm = new Float64Array ( d ) ;
4442 for ( let i = 0 ; i < n ; i ++ )
45- if ( mask [ i ] )
46- for ( let j = 0 ; j < d ; j ++ ) cm [ j ] = ( cm [ j ] ?? 0 ) + ( X [ i ] ?. [ j ] ?? 0 ) / nc ;
43+ if ( mask [ i ] ) for ( let j = 0 ; j < d ; j ++ ) cm [ j ] = ( cm [ j ] ?? 0 ) + ( X [ i ] ?. [ j ] ?? 0 ) / nc ;
4744 for ( let i = 0 ; i < n ; i ++ ) {
4845 if ( ! mask [ i ] ) continue ;
4946 for ( let j = 0 ; j < d ; j ++ ) wcd += ( ( X [ i ] ?. [ j ] ?? 0 ) - cm [ j ] ! ) ** 2 ;
@@ -75,8 +72,7 @@ export function daviesBouldinScore(
7572 const nc = mask . filter ( Boolean ) . length ;
7673 const cm = new Float64Array ( d ) ;
7774 for ( let i = 0 ; i < n ; i ++ )
78- if ( mask [ i ] )
79- for ( let j = 0 ; j < d ; j ++ ) cm [ j ] = ( cm [ j ] ?? 0 ) + ( X [ i ] ?. [ j ] ?? 0 ) / nc ;
75+ if ( mask [ i ] ) for ( let j = 0 ; j < d ; j ++ ) cm [ j ] = ( cm [ j ] ?? 0 ) + ( X [ i ] ?. [ j ] ?? 0 ) / nc ;
8076 centroids . push ( cm ) ;
8177 let scatter = 0 ;
8278 for ( let i = 0 ; i < n ; i ++ ) {
@@ -168,12 +164,11 @@ export function xieBeniIndex(
168164 for ( let c = 0 ; c < k ; c ++ ) {
169165 const mu = ( membershipMatrix [ i ] ?. [ c ] ?? 0 ) ** m ;
170166 membershipSums [ c ] = ( membershipSums [ c ] ?? 0 ) + mu ;
171- for ( let j = 0 ; j < d ; j ++ )
172- centroids [ c ] ! [ j ] = ( centroids [ c ] ! [ j ] ?? 0 ) + mu * ( X [ i ] ?. [ j ] ?? 0 ) ;
167+ for ( let j = 0 ; j < d ; j ++ ) centroids [ c ] ! [ j ] = ( centroids [ c ] ! [ j ] ?? 0 ) + mu * ( X [ i ] ?. [ j ] ?? 0 ) ;
173168 }
174169 }
175170 for ( let c = 0 ; c < k ; c ++ ) {
176- for ( let j = 0 ; j < d ; j ++ ) centroids [ c ] ! [ j ] = ( centroids [ c ] ! [ j ] ?? 0 ) / ( ( membershipSums [ c ] ?? 1 ) || 1 ) ;
171+ for ( let j = 0 ; j < d ; j ++ ) centroids [ c ] ! [ j ] = ( centroids [ c ] ! [ j ] ?? 0 ) / ( membershipSums [ c ] ?? 1 || 1 ) ;
177172 }
178173
179174 // Compactness
0 commit comments