1 / 17

Final project 1

Final project 1. 生科二 19709036 謝朝茂 生科二 19709033 朱利亞. 想法. 產生亂數資料 就亂數資料分群 ( 分 n 群 ) 隨機找 n 個點為中心點 算每個點到個中心點的距離 距離最短的歸那一群 分群後求各群平均值為新的中心點 不斷重複這樣的步驟直到中心點不在變動. method. 開檔產生亂數點.

tyrone
Download Presentation

Final project 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 想法 • 產生亂數資料 • 就亂數資料分群(分n群) • 隨機找n個點為中心點 • 算每個點到個中心點的距離 • 距離最短的歸那一群 • 分群後求各群平均值為新的中心點 • 不斷重複這樣的步驟直到中心點不在變動

  3. method

  4. 開檔產生亂數點 • open(RA, “>C:/Users/Leeyachu/Desktop/go_to_hail/result/randomnumber.txt”) || die “error”;#開檔寫入亂數點print “ 欲產生資料數?:\n”;$NM=<STDIN>;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(<RAN>){@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(x1,y1),B(x2,y2)為平面上相異兩點,則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 < $NM){$loop_number++;#out put出的資料筆數open(DATA, “>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 = <FILENAME>;my @name = split(/ /, $filename);my $file = 0;for($file=0;$file <= $#name;$file++){open IN, "$name[$file].txt";my (@datax, @datay, @groups);while (<IN>){ 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%20point.ppt • http://perl.about.com/od/packagesmodules/qt/perlgdsimple.htm • http://en.wikipedia.org/wiki/K-means_clustering

More Related