230 likes | 429 Views
程式語言. Subtractive Clustering. Repeat while any point ( x i ) is left to be assigned to a cluster Use Eq. (1) to get the potential of x i Find the point with the highest potential and choose it as the kth cluster center
E N D
Subtractive Clustering • Repeat while any point (xi) is left to be assigned to a cluster • Use Eq. (1) to get the potential of xi • Find the point with the highest potential and choose it as the kth cluster center • Form the kth cluster by assigning N points closest to the centroid (Euclidean distance) • Remove the chosen N points (1) 2
Create Random Data • $mean_x[1] = 1;$sdev_x[1] = 0.1;$mean_x[2] = -1;$sdev_x[2] = 0.15;$mean_x[3] = 1;$sdev_x[3] = 0.1;$mean_x[4] = -1;$sdev_x[4] = 0.15;$mean_y[1] = 1;$sdev_y[1] = 0.1;$mean_y[2] = 1;$sdev_y[2] = 0.15;$mean_y[3] = -1;$sdev_y[3] = 0.1;$mean_y[4] = -1;$sdev_y[4] = 0.15;
Create Random Data • @x=@y=();open OUTFILE, ">xy.txt" or die "Cannot open gene_list.txt!\n ($!)";for ($i=1;$i<=4;$i++){for ($j=1;$j<=80;$j++) {$x_tmp = gaussian_rand() * $sdev_x[$i] + $mean_x[$i];$y_tmp = gaussian_rand() * $sdev_y[$i] + $mean_y[$i]; printf(OUTFILE "%.2f \t %.2f \n", $x_tmp, $y_tmp); }}
Create Random Data • for ($j=1;$j<=20;$j++){$x_tmp = rand(2);$y_tmp = rand(2); printf(OUTFILE "%.2f \t %.2f \n", $x_tmp, $y_tmp);}
Subtractive Clustering • Repeat while any point (xi) is left to be assigned to a cluster • Use Eq. (1) to get the potential of xi • Find the point with the highest potential and choose it as the kth cluster center • Form the kth cluster by assigning N points closest to the centroid (Euclidean distance) • Remove the chosen N points (1) 7
Center • open (FILE1,“xy.txt”) || die “open error!” ; #FILE1¬Oradom dateopen FILE2, “>aixes.txt”or die “Cannot open gene_list.txt!\n ($!)”;@aa = <FILE1>;chomp (@aa);#用@x_one和y_one載random date的x,y • for ($z=0; $z<=$#aa; $z++){ $bb = $aa[$z]; $bb =~ /(\S+)\s+(\S+)/; @x_one[$z] =$1; @y_one[$z] =$2;}
Center #計算出每點與各點的potient, 用@sum裝 • while ($n <4){ @sum = 0, $bb = 0 ;for ($i=0; $i<=$#x_one ;$i++) {for ($j=1; $j<=$#x_one; $j++) { $bb = exp ( -(($x_one[$i]-$x_one[$j])**2 + ($y_one[$i] - $y_one[$j])**2 )); @sum[$i] += $bb; } }
Subtractive Clustering • Repeat while any point (xi) is left to be assigned to a cluster • Use Eq. (1) to get the potential of xi • Find the point with the highest potential and choose it as the kth cluster center • Form the kth cluster by assigning N points closest to the centroid (Euclidean distance) • Remove the chosen N points (1) 10
Subtractive Clustering • Repeat while any point (xi) is left to be assigned to a cluster • Use Eq. (1) to get the potential of xi • Find the point with the highest potential and choose it as the kth cluster center • Form the kth cluster by assigning N points closest to the centroid (Euclidean distance) • Remove the chosen N points (1) 11
Center 比較各點的potient, 找出最高值為cluster center $mix = $sum[0], $num = 0;for($k=1; $k<=$#x_one ; $k++){if ( $sum[$k] > $mix ) { $mix = $sum[$k]; $num = $k ; }} print $x_one[$num]." , ".$y_one[$num]."\n"; printf(FILE2 "%s : %.2f , %.2f %s \n","cluster center", $x_one[$num], $y_one[$num], $m);
Subtractive Clustering • Repeat while any point (xi) is left to be assigned to a cluster • Use Eq. (1) to get the potential of xi • Find the point with the highest potential and choose it as the kth cluster center • Form the kth cluster by assigning N points closest to the centroid (Euclidean distance) • Remove the chosen N points (1) 14
Subtractive Clustering • Repeat while any point (xi) is left to be assigned to a cluster • Use Eq. (1) to get the potential of xi • Find the point with the highest potential and choose it as the kth cluster center • Form the kth cluster by assigning N points closest to the centroid (Euclidean distance) • Remove the chosen N points (1) 15
Center • 計算出各點與center間的距離-@dis @dis =();for ($c=0; $c<$#x_one;$c++) { if ($c != $num) {$dis[$c] = ( ($x_one[$num] - $x_one[$c])**2 + ($y_one[$num] - $y_one[$c])**2 )**0.5 ; } }
center • 比較各點之間的唔離大小-找出較小的距離-@sort @sort = (); @sort = sort {$a <=> $b} @dis ;
center • 把cluster center附近的點 @del = ();for ($d=0; $d<=90;$d++) {for ($c=0; $c<=$#dis;$c++) {if ($sort[$d] == $dis[$c]) { print OUTFILE “$x_one[$c] \t $y_one[$c] \t $m \n”); @del[$d] = $c; } } }
Subtractive Clustering • Repeat while any point (xi) is left to be assigned to a cluster • Use Eq. (1) to get the potential of xi • Find the point with the highest potential and choose it as the kth cluster center • Form the kth cluster by assigning N points closest to the centroid (Euclidean distance) • Remove the chosen N points (1) 19
Subtractive Clustering • Repeat while any point (xi) is left to be assigned to a cluster • Use Eq. (1) to get the potential of xi • Find the point with the highest potential and choose it as the kth cluster center • Form the kth cluster by assigning N points closest to the centroid (Euclidean distance) • Remove the chosen N points (1) 20
Center • foreach (@del) { $x_one[$_] = shift; $y_one[$_] = shift; }for ($f=0, $g=0 ;$f<=$#x_one;$f++){if ($x_one[$f] != "" and $y_one[$f] != "") { $x_one[$g] = $x_one[$f] ; $y_one[$g] = $y_one[$f] ; $g++; }}
Center • for($e=0; $e<90; $e++){pop @x_one;pop @y_one;} $n++; $m++;}