Download presentation
Presentation is loading. Please wait.
1
生科二 19709036 謝朝茂 生科二 19709033 朱利亞 Final project 1
2
想法 產生亂數資料 就亂數資料分群 ( 分 n 群 ) 隨機找 n 個點為中心點 算每個點到個中心點的距離 距離最短的歸那一群 分群後求各群平均值為新的中心點 不斷重複這樣的步驟直到中心點不在變動
3
method
4
開檔產生亂數點 open(RA, “>C:/Users/Leeyachu/Desktop/go_to_hail/result/randomnumber.txt”) || die “error”; # 開檔寫入亂數點 print “ 欲產生資料數 ?:\n”; $NM= ; chomp($NM); for($i=0;$i<$NM;$i++) { $p[$i][0]= rand(1000); # 產生亂數 x 值 $p[$i][1]= rand(1000); # 產生亂數 y 值 print RA "$p[$i][0] $p[$i][1]\n"; } close RA; }
5
隨機產生中心點 輸入欲分幾群 ($GROUP) “C:/Users/Leeyachu/Desktop/go_to_hail/result/randomnumber.txt”) || die “error:”; while( ){ @list = split(/\s+/, $_); $p[$NM][0]=$list[0]; # 讀入亂數點 x 值 $p[$NM][1]=$list[1]; # 讀入亂數點 y 值 $ra = rand(100)/55; # 隨機產生數字 if($ra>1.5 and $ran<$GROUP){ $point[$ran][0]=$p[$NM][0]; # 亂數中心點 x 值 $point[$ran][1]=$p[$NM][1]; # 亂數中心點 y 值 $ran++; } $NM++; }
6
分群 算距離 sub group{ for($ii=0;$ii<$GROUP;$ii++) { $D[$ii]=(($p[$_[0]][0]-$point[$ii][0])**2 + ($p[$_[0]][1]- $point[$ii][1])**2)**0.5; } 註 : 設 A(x 1,y 1 ) , B(x 2,y 2 ) 為平面上相異兩 點,則 A , B 兩點間的距離 =
7
分群 (Subroutine) 點與中心點的距離的最小值為依據,分成 n 群。 for($GP=0; $GP<$GROUP; $GP++) { for($GP1=0; $GP1<$GROUP; $GP1++) { if($D[$GP]<$D[$GP1]){ $GPN++; } } if($GPN==$GROUP-1){ $G[$_[0]]=$GP; # 資料點隸屬的群數 $GTX[$GP]=$GTX[$GP]+$p[$_[0]][0]; # 各群的 X 值總和 ( 用來算平均值 ) $GTY[$GP]=$GTY[$GP]+$p[$_[0]][1]; # 各群的 Y 值總和 ( 用來算平均值 ) $GN[$GP]++; } $GPN=0; } return $G[$_[0]]; # 資料點隸屬的群數 }
8
分群 ( 印出分群資料 ) $loop_number=0; while($loop C:/Users/Leeyachu/Desktop/go_to_hail/result/$loop_number.txt”) || die “error:”; open(FILENAME, “>>C:/Users/Leeyachu/Desktop/go_to_hail/result/filename.txt”) || die “error:”; print FILENAME “$loop_number ”; # 紀錄輸出檔名 $loop=0; for($TEST=0;$TEST<$NM;$TEST++){ $a= group($TEST); $a_array[$TEST]=$a; print DATA “$p[$TEST][0] $p[$TEST][1] $a\n”; } # 印出亂數點和所屬群數
9
分群 ( 印出分群資料 ) for($new_p=0;$new_p<$GROUP;$new_p++){ if($GN[$new_p]==0){$GN[$new_p]=1;} $point[$new_p][0]=$GTX[$new_p]/$GN[$new_p]; $point[$new_p][1]=$GTY[$new_p]/$GN[$new_p]; print DATA “$point[$new_p][0] $point[$new_p][1] $GROUP\n”; } # 印出新的中心點 for($TEST1=0;$TEST1<$NM;$TEST1++) { $new_group= group($TEST1); if($new_group == $a_array[$TEST1]){ $loop++; } # 設定運算何時停止 } close DATA; }
10
畫圖
11
畫圖 (import 資料 ) open(FILENAME, "C:/Users/Leeyachu/Desktop/go_to_hail/result/filename.txt") || die "error:"; my $filename = ; my @name = split(/ /, $filename); my $file = 0; for($file=0;$file ){ my @list = split(/\s+/, $_); push(@datax, $list[0]); push(@datay, $list[1]); push(@groups, $list[2]); } Out put 分群圖檔
12
results
13
觀察中心點的移動 中心點為黃色點 (Group 5) 中心點在每一次計算之後會移動位置 中心點不再移動時分群就停止 結果得到最佳的分群
14
討論 不改變分群,改變中心點的起始位置 ( 見 final project ( 改中心點 ) ) 改變分群 ( 見 final project ( 改分群 ) ) 觀察上述兩步對分群步驟的影響
15
結論 (Part 1) 改變起始中心點的位置,會影響分群要進行多 少步。 第一次分群只需要 3 步 第二次分群需要 6 步
16
結論 (Part 2) 改變分群數,會影響分群要進行多少步。 分四群,需要進行五步 分六群,需要進行四步
17
Reference www2.tchcvs.tc.edu.tw/.../math_teach_power%20poi nt.ppt http://perl.about.com/od/packagesmodules/qt/pe rlgdsimple.htm http://perl.about.com/od/packagesmodules/qt/pe rlgdsimple.htm http://en.wikipedia.org/wiki/K-means_clustering
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.