class cluster k-mean php
dalam penjelajahan dunia maya saya ada menemukan kode php untuk menyelesaikan kasus cluster k-mean , sintak nya seperti di bawah ini , semoga bermanfaat :
";
print_r($b);
function kmeans($data, $k)
{
$cPositions = assign_initial_positions($data, $k);
$clusters = array();
while(true)
{
$changes = kmeans_clustering($data, $cPositions, $clusters);
if(!$changes)
{
return kmeans_get_cluster_values($clusters, $data);
}
$cPositions = kmeans_recalculate_cpositions($cPositions, $data, $clusters);
}
}
function kmeans_clustering($data, $cPositions, &$clusters)
{
$nChanges = 0;
foreach($data as $dataKey => $value)
{
$minDistance = null;
$cluster = null;
foreach($cPositions as $k => $position)
{
$distance = distance($value, $position);
if(is_null($minDistance) || $minDistance > $distance)
{
$minDistance = $distance;
$cluster = $k;
}
}
if(!isset($clusters[$dataKey]) || $clusters[$dataKey] != $cluster)
{
$nChanges++;
}
$clusters[$dataKey] = $cluster;
}
return $nChanges;
}
function kmeans_recalculate_cpositions($cPositions, $data, $clusters)
{
$kValues = kmeans_get_cluster_values($clusters, $data);
foreach($cPositions as $k => $position)
{
$cPositions[$k] = empty($kValues[$k]) ? 0 : kmeans_avg($kValues[$k]);
}
return $cPositions;
}
function kmeans_get_cluster_values($clusters, $data)
{
$values = array();
foreach($clusters as $dataKey => $cluster)
{
$values[$cluster][] = $data[$dataKey];
}
return $values;
}
function kmeans_avg($values)
{
$n = count($values);
$sum = array_sum($values);
return ($n == 0) ? 0 : $sum / $n;
}
function distance($v1, $v2)
{
return abs($v1-$v2);
}
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;
}
?>
Langganan:
Posting Komentar
(
Atom
)

Tidak ada komentar :
Posting Komentar