Ubah beberapa line k-means seperti jumlah centroid dan perubahan pemetaan klaster
This commit is contained in:
parent
d9daf8f054
commit
797d823cad
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
use App\Models\Curas;
|
use App\Models\Curas;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\Klaster;
|
||||||
|
|
||||||
class curasKmeansController extends Controller
|
class curasKmeansController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -11,7 +12,7 @@ public function hitungKMeans()
|
||||||
{
|
{
|
||||||
$data = Curas::select('id', 'kecamatan_id', 'klaster_id', 'jumlah_curas')->orderBy('jumlah_curas', 'asc')->get();
|
$data = Curas::select('id', 'kecamatan_id', 'klaster_id', 'jumlah_curas')->orderBy('jumlah_curas', 'asc')->get();
|
||||||
|
|
||||||
$k = 3;
|
$k = Klaster::count('id');
|
||||||
$maxIterasi = 100;
|
$maxIterasi = 100;
|
||||||
$centroids = $data->random($k)->values()->map(function ($item) {
|
$centroids = $data->random($k)->values()->map(function ($item) {
|
||||||
return [
|
return [
|
||||||
|
@ -51,6 +52,8 @@ public function hitungKMeans()
|
||||||
|
|
||||||
$prevAssignment = $currentAssignment;
|
$prevAssignment = $currentAssignment;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Update centroid berdasarkan rata-rata
|
// Update centroid berdasarkan rata-rata
|
||||||
foreach ($clustered as $key => $group) {
|
foreach ($clustered as $key => $group) {
|
||||||
$avg = collect($group)->avg('jumlah_curas');
|
$avg = collect($group)->avg('jumlah_curas');
|
||||||
|
@ -61,17 +64,20 @@ public function hitungKMeans()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Final mapping centroid ke klaster_id (aman/sedang/rawan)
|
// Final mapping centroid ke klaster_id (aman/sedang/rawan)
|
||||||
$finalCentroids = $centroids->map(function ($item, $index) {
|
$finalCentroids = $centroids->map(function ($item, $index) {
|
||||||
return ['index' => $index + 1, 'jumlah_curas' => $item['jumlah_curas']];
|
return ['index' => $index + 1, 'jumlah_curas' => $item['jumlah_curas']];
|
||||||
})->sortBy('jumlah_curas')->values();
|
})->sortBy('jumlah_curas')->values();
|
||||||
|
|
||||||
$centroidToKlaster = [
|
$centroidToKlaster = [];
|
||||||
$finalCentroids[0]['index'] => 1, // aman
|
|
||||||
$finalCentroids[1]['index'] => 2, // sedang
|
foreach ($finalCentroids as $i => $centroid) {
|
||||||
$finalCentroids[2]['index'] => 3, // rawan
|
// Klaster ID mulai dari 1 (asumsi klaster di DB bernomor 1, 2, 3, ...)
|
||||||
];
|
$centroidToKlaster[$centroid['index']] = $i + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Update ke database
|
// Update ke database
|
||||||
foreach ($data as $item) {
|
foreach ($data as $item) {
|
||||||
|
|
Loading…
Reference in New Issue