@ file : Suppress ( ĊĠĠĠ Ġ" Member Visibility Can Be Private ", Ġ" Un necessary Variable ", Ġ" Replace Java Static Method With Kotlin Analog ", ĊĠĠĠ Ġ" unused ", Ġ" UNUSED _ VARIABLE ", Ġ" Replace Manual Range With Indices Calls ", Ġ" UNUSED _ VALUE ", Ġ" Replace With Operator Assignment ", ĊĠĠĠ Ġ" UNUSED _ PARAMETER ", Ġ" UNUSED _ CHANGED _ VALUE ", Ġ" Can Be Val ", Ġ" Simpl ify Boolean With Constants ", ĊĠĠĠ Ġ" Convert Two Comp arisons To Range Check ", Ġ" Replace Size Check With Is NotEmpty ", Ġ" Lift Return Or Assignment " Ċ ) Ċ Ċ package Ġalgorithms Ċ Ċ import Ġkotlin . math . exp Ċ import Ġkotlin . math . pow ĊĊ Ċ /** Ċ Ġ* Ġiterate Ġthrough Ġthe Ġcenter Ġlist , Ġcomputing Ġthe Ġdistance Ġfrom Ġall Ġcenters Ġto Ġall Ġpoints . Ċ Ġ* ĠĠ ĠFind Ġthe Ġpoint Ġthat Ġrepresents Ġthe Ġmaximum Ġdistance Ġto Ġall Ġcenters . Ċ Ġ*/ Ċ fun ĠgetMax D ( centers : ĠMutable List < List < Double >>, Ġpoints : ĠList < List < Double >> ): ĠList < Double > Ġ{ ĊĠĠĠ Ġvar Ġthe Max D Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġthe Max Point : ĠList < Double > Ġ= Ġpoints [ 0 ] ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpoints . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthe Distance Ġ= Ġwhat Is The Min Distance To Cent ers ( points [ i ], Ġcenters ) ĊĠĠĠĠĠĠĠ Ġif Ġ( the Distance Ġ> Ġthe Max D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Max D Ġ= Ġthe Distance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Max Point Ġ= Ġpoints [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthe Max Point Ċ } Ċ Ċ /** Ċ Ġ* Ġreturn Ġthe Ġmin Ġdistance Ġto Ġa Ġcenter . Ġ ĠThe Ġouter loop Ġwill Ġthen Ġselect Ġthe Ġmaximum Ġof Ġthese Ġvalues . Ċ Ġ*/ Ċ fun Ġwhat Is The Min Distance To Cent ers ( point : ĠList < Double >, Ġcenters : ĠList < List < Double >> ): ĠDouble Ġ{ ĊĊĠĠĠ Ġvar Ġthe Min D Ġ= ĠDouble . MAX _ VALUE ĊĊĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġcenters . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthe Distance Ġ= Ġapache Distance ( point , Ġcenters [ j ]) ĊĠĠĠĠĠĠĠ Ġif Ġ( the Distance Ġ< Ġthe Min D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Min D Ġ= Ġthe Distance ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthe Min D Ċ } Ċ Ċ /** Ċ Ġ* Ġpartition Ġthe Ġpoints Ġinto Ġcoordinate Ġlists Ċ Ġ* Ġ Ġbased Ġon Ġthe Ġnearest Ġcenter Ċ Ġ* Ċ Ġ* ĠKeep Ġa Ġmap Ġof Ġthe Ġcenter Ġindex Ġto Ġa Ġlist Ġof Ġpoint Ġindices . Ċ Ġ* ĠĠĠ ĠThis Ġforms Ġthe Ġ" cluster ". Ċ Ġ*/ Ċ fun Ġassign Points To Clusters ( ĊĠĠĠ Ġnum Cent ers K : ĠInt , ĊĠĠĠ Ġnum Dimensions M : ĠInt , ĊĠĠĠ Ġcenters : ĠList < List < Double >>, ĊĠĠĠ Ġpoints : ĠList < List < Double >> Ċ ): ĠMap < Int , ĠList < Int >> Ġ{ ĊĊĠĠĠ Ġval Ġmap Center Index To Points : ĠMutable Map < Int , ĠMutable List < Int >> Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpoints . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠindexOf Closest Center Ġ= Ġfind Closest Index ( num Cent ers K , Ġnum Dimensions M , Ġpoints [ i ], Ġcenters ) ĊĠĠĠĠĠĠĠ Ġmap Center Index To Points . addTo ( indexOf Closest Center , Ġi ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġmap Center Index To Points Ċ } Ċ Ċ /** Ċ Ġ* Ġgo Ġthrough Ġthe Ġcenters Ġand Ġreturn Ġthe Ġindex Ġof Ġthe Ġcenter Ġthat Ġis Ġclosest Ġto Ġthe Ġpoint Ċ Ġ*/ Ċ fun Ġfind Closest Index ( ĊĠĠĠ Ġnum Cent ers K : ĠInt , ĊĠĠĠ Ġnum Dimensions M : ĠInt , ĊĠĠĠ Ġpoint : ĠList < Double >, ĊĠĠĠ Ġcenters : ĠList < List < Double >> Ċ ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġthe Min D Ġ= ĠDouble . MAX _ VALUE ĊĠĠĠ Ġvar Ġthe Min Index Ġ= Ġ 0 ĊĊĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġcenters . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthe Distance Ġ= Ġapache Distance ( point , Ġcenters [ j ]) ĊĠĠĠĠĠĠĠ Ġif Ġ( the Distance Ġ< Ġthe Min D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Min D Ġ= Ġthe Distance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Min Index Ġ= Ġj ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthe Min Index Ċ } ĊĊ Ċ /** Ċ Ġ* ĠMult id imension ĠCenter ĠOf ĠGr avity Ċ Ġ* Ġadd Ġall Ġthe Ġcoordinates Ġof Ġthe Ġpoints Ġand Ċ Ġ* Ġreturn Ġthe Ġaverage Ġvalue Ġof Ġeach Ġcoordinate Ċ Ġ*/ Ċ fun Ġcluster Center Of Gravity ( ĊĠĠĠ Ġpoints : ĠList < List < Double >> Ċ ): ĠList < Double > Ġ{ ĊĊĠĠĠ Ġval Ġnum dims Ġ= Ġpoints [ 0 ]. size ĊĠĠĠ Ġval Ġsums : ĠMutable List < Double > Ġ= ĠDouble Array ( num dims ). to Mutable List () ĊĊĠĠĠ Ġfor Ġ( p Ġin Ġpoints ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum dims ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsums [ i ] Ġ+= Ġp [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum dims ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsums [ i ] Ġ= Ġsums [ i ] Ġ/ Ġpoints . size ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsums Ċ } ĊĊ Ċ /** Ċ Ġ* ĠHidden ĠMatrix Ġ- Ġ" New ton ian " Ċ Ġ* ĠHidden Matrix i , j Ġ= Ġ( 1 Ġ/ Ġd ( Data j , xi ) 2 ) Ġ/ Ġ( âĪ ĳ all Ġcenters Ġxi 1 / d ( Data j , xi ) 2 ) Ċ Ġ* Ġ@ link : Ġhttps :// ros al ind . info / problems / ba 8 d / Ċ Ġ* Ċ Ġ* ĠReturned : Ġa Ġmap Ġ( key Ġis Ġthe Ġindex Ġnumber Ġof Ġthe Ġcenter ) Ċ Ġ* Ġto Ġa Ġweight ing Ġof Ġthe Ġcenter Ġon Ġthe Ġpoint . Ċ Ġ* Ċ Ġ* ĠĠĠ ĠFor Ġa Ġgiven Ġcenter : Ġ( List < List < Int >>) Ċ Ġ* ĠĠĠĠĠĠ ĠThe Ġfirst Ġlist Ġis Ġthe Ġweight ing Ġfor Ġthe Ġfirst Ġpoint Ġ( n Ġ- dimensions ) Ċ Ġ* ĠĠĠĠĠĠ Ġand Ġthe Ġsecond Ġlist Ġis Ġthe Ġweight ing Ġfor Ġthe Ġsecond Ġpoint , Ġand Ġso Ġforth . Ċ Ġ*/ Ċ Ċ fun Ġhidden Matrix New ton ian ( ĊĠĠĠ Ġcenters : ĠList < List < Double >>, ĊĠĠĠ Ġpoints : ĠList < List < Double >> Ċ ): ĠMap < Int , ĠList < Double >> Ġ{ ĊĊĠĠĠ Ġval Ġret Map : ĠMutable Map < Int , ĠList < Double >> Ġ= Ġmutable Map Of () ĊĠĠĠ Ġval Ġret List : ĠMutable List < Mutable List < Double >> Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfor Ġ( center Num Ġin Ġ 0 Ġuntil Ġcenters . size ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpoint List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġfor Ġ( point Num Ġin Ġ 0 Ġuntil Ġpoints . size ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis Point Num erator Ġ= Ġ 1 . 0 Ġ/ Ġ( apache Distance ( points [ point Num ], Ġcenters [ center Num ]). pow ( 2 . 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnormalize Ġto Ġthe Ġsum Ġof Ġall Ġdistances Ġsquared Ġ( inverted ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġall Cent ers Sum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( all Cent ers Num Ġin Ġ 0 Ġuntil Ġcenters . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Cent ers Sum Ġ+= Ġ 1 . 0 Ġ/ Ġ( apache Distance ( points [ point Num ], Ġcenters [ all Cent ers Num ]). pow ( 2 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweight ing Ġ= Ġthis Point Num erator Ġ/ Ġall Cent ers Sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint List . add ( weight ing ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġret Map [ center Num ] Ġ= Ġpoint List ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Map Ċ } Ċ Ċ /** Ċ Ġ* ĠHidden ĠMatrix Ġ- Ġ" Par ition ĠFunction Ġfrom Ġstatistical Ġphysics " Ċ Ġ* Ċ Ġ* ĠHidden Matrix i , j Ġ= Ġ Ġ( exp () Ġis Ġe Ġto Ġthe Ġpower Ġof Ġfunction ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp Ġ( âĪ Ĵ Î² Ġ- Ġdistance ( Data j , xi )) Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-------------------------------- ------ Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠâĪ ĳ Ġall Ġcenters Ġxt Ġof Ġ Ġexp Ġ(- Î² Ġ- Ġdistance ( Data j , xt )) Ċ Ġ* Ċ Ġ* Ġ@ link : Ġhttps :// ros al ind . info / problems / ba 8 d / Ċ Ġ* Ċ Ġ* ĠReturned : Ġa Ġmap Ġ( key Ġis Ġthe Ġindex Ġnumber Ġof Ġthe Ġcenter ) Ċ Ġ* Ġto Ġa Ġweight ing Ġof Ġthe Ġcenter Ġon Ġthe Ġpoint . Ċ Ġ* Ċ Ġ* ĠĠĠ ĠFor Ġa Ġgiven Ġcenter : Ġ( List < List < Int >>) Ċ Ġ* ĠĠĠĠĠĠ ĠThe Ġfirst Ġlist Ġis Ġthe Ġweight ing Ġfor Ġthe Ġfirst Ġpoint Ġ( n Ġ- dimensions ) Ċ Ġ* ĠĠĠĠĠĠ Ġand Ġthe Ġsecond Ġlist Ġis Ġthe Ġweight ing Ġfor Ġthe Ġsecond Ġpoint , Ġand Ġso Ġforth . Ċ Ġ*/ Ċ Ċ fun Ġhidden Matrix Partition Function ( ĊĠĠĠ Ġst iff mess B : ĠDouble , ĊĠĠĠ Ġcenters : ĠList < List < Double >>, ĊĠĠĠ Ġpoints : ĠList < List < Double >> Ċ ): ĠMap < Int , ĠList < Double >> Ġ{ ĊĊĠĠĠ Ġval Ġret Map : ĠMutable Map < Int , ĠList < Double >> Ġ= Ġmutable Map Of () ĊĠĠĠ Ġval Ġret List : ĠMutable List < Mutable List < Double >> Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfor Ġ( center Num Ġin Ġ 0 Ġuntil Ġcenters . size ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpoint List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġfor Ġ( point Num Ġin Ġ 0 Ġuntil Ġpoints . size ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdebug Exponent Ġ= Ġ- st iff mess B Ġ* Ġapache Distance ( points [ point Num ], Ġcenters [ center Num ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis Point Num erator Ġ= Ġexp (- st iff mess B Ġ* Ġapache Distance ( points [ point Num ], Ġcenters [ center Num ])) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnormalize Ġto Ġthe Ġsum Ġof Ġall Ġdistances Ġsquared Ġ( inverted ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġall Cent ers Sum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( all Cent ers Num Ġin Ġ 0 Ġuntil Ġcenters . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Cent ers Sum Ġ+= ĠMath . exp (- st iff mess B Ġ* Ġapache Distance ( points [ point Num ], Ġcenters [ all Cent ers Num ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweight ing Ġ= Ġthis Point Num erator Ġ/ Ġall Cent ers Sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint List . add ( weight ing ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġret Map [ center Num ] Ġ= Ġpoint List ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Map Ċ } ĊĊ