Presentation is loading. Please wait.

Presentation is loading. Please wait.

生科二 19709036 謝朝茂 生科二 19709033 朱利亞 Final project 1.

Similar presentations


Presentation on theme: "生科二 19709036 謝朝茂 生科二 19709033 朱利亞 Final project 1."— Presentation transcript:

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


Download ppt "生科二 19709036 謝朝茂 生科二 19709033 朱利亞 Final project 1."

Similar presentations


Ads by Google