function calcKmeans($file, $numClusters = 6, $use_kpp = true) { $_img = imagecreatefromstring(file_get_contents($file)); $img = imagecreatetruecolor(MAXSIZE, MAXSIZE * (imagesy($_img) / imagesx($_img) )); imagecopyresampled($img, $_img, 0, 0, 0, 0, MAXSIZE, MAXSIZE * (imagesy($_img) / imagesx($_img) ), imagesx($_img), imagesy($_img) ); $start = microtime(); $clusters = kmeans($img, $numClusters, $use_kpp); $stop = microtime(); uasort($clusters, function($a, $b) { $ac = $a['cnt']; $ab = $b['cnt']; if ($ac < $ab) return 1; else if ($ac > $ab) return -1; else return 0; }); $total = 0; foreach ($clusters as $c) { $total += $c['cnt']; } return [$total, $clusters, ($stop - $start) * 1000]; }
$datanya = $following_dao->getId(); //mendapatkan data id following //var_dump($datanya); // $column1 = "common_followers_count"; // $column2 = "common_friends_count"; $column1 = "similarity_followers"; $column2 = "similarity_friends"; $data = loadData($column1, $column2); //mendapatkan data similarity dari tabel following //var_dump($data); //$data = array(array(0,0),array(0,2), array(2,0), array(2,2), array(5,0), array(5,2), array(7,0), array(7,2)); //$datanya = array("a","b","c","d","e","f","g","h"); $k = $_POST['k']; //mendapatkan jumlah cluster yang telah diinput //$k=2; $results = kmeans($data, $k); //melakukan clustering menggunakan k-means dan menghasilkan centroid dan cluster //$result berupa array, terdiri dari 2 array: array pertama data centroid dan array kedua data cluster //$jitter = addJitter($data); // var_dump($data); // echo "<br />"; // echo "<br />"; //var_dump($results); // echo "<br />"; // var_dump($jitter); //graph($data, $results, $jitter); //echo count($data); //echo count ($results); $x = array(); $y = array(); //mendapatkan nilai array untuk similarity_followers sbg x dan similarity_following sbg y
function test_kmeans_arrays() { $input = array(array('age' => 1), array('age' => 3), array('age' => 2), array('age' => 5), array('age' => 6), array('age' => 2), array('age' => 3), array('age' => 1), array('age' => 30), array('age' => 36), array('age' => 45), array('age' => 3), array('age' => 15), array('age' => 17)); $k = 3; $clusters = kmeans($input, $k, 'age'); $expected = array(0 => array(0 => array('age' => 1, 'cluster_age' => 0, 'cluster_size_age' => 9), 1 => array('age' => 3, 'cluster_age' => 0, 'cluster_size_age' => 9), 2 => array('age' => 2, 'cluster_age' => 0, 'cluster_size_age' => 9), 3 => array('age' => 5, 'cluster_age' => 0, 'cluster_size_age' => 9), 4 => array('age' => 6, 'cluster_age' => 0, 'cluster_size_age' => 9), 5 => array('age' => 2, 'cluster_age' => 0, 'cluster_size_age' => 9), 6 => array('age' => 3, 'cluster_age' => 0, 'cluster_size_age' => 9), 7 => array('age' => 1, 'cluster_age' => 0, 'cluster_size_age' => 9), 11 => array('age' => 3, 'cluster_age' => 0, 'cluster_size_age' => 9)), 2 => array(8 => array('age' => 30, 'cluster_age' => 2, 'cluster_size_age' => 3), 9 => array('age' => 36, 'cluster_age' => 2, 'cluster_size_age' => 3), 10 => array('age' => 45, 'cluster_age' => 2, 'cluster_size_age' => 3)), 1 => array(12 => array('age' => 15, 'cluster_age' => 1, 'cluster_size_age' => 2), 13 => array('age' => 17, 'cluster_age' => 1, 'cluster_size_age' => 2))); $this->assertEquals($expected, $clusters); }
{ return abs($v1 - $v2); } /** * Creates the initial positions for the given * number of clusters and data. * @param array $data * @param int $k * * @return array */ function assign_initial_positions($data, $k) { $min = min($data); $max = max($data); $int = ceil(abs($max - $min) / $k); while ($k-- > 0) { $cPositions[$k] = $min + $int * $k; } return $cPositions; } /** * This code was created by Jose Fonseca (josefonseca@blip.pt) * * Please feel free to use it in either commercial or non-comercial applications, * and if you enjoy using it feel free to let us know or to comment on our * technical blog at http://code.blip.pt */ echo "<pre>"; print_r(kmeans(array(1, 3, 2, 5, 6, 2, 3, 1, 30, 36, 45, 3, 15, 17), 3)); echo "</pre>";