Belajar Matlab – Seed Random Generator
Sinopsis
Jika kamu menggunakan Matlab untuk melakukan komputasi tidak terlepas kita membutuhkan bilangan random, tapi ini menjadi masalah tersendiri jika terdapat hasil yang berbeda-beda setiap kali melakukan proses komputasi. Biasanya ini terjadi ketika kamu menggunakan algoritma machine learning yang melibatkan bilangan random sebagai initial valuenya. Bagaimana kita harus membuat menjadi tetap? Saya gunakan contoh kmeans clustering berikut
clc;clear all;close all; load fisheriris X = meas(:,3:4); figure; plot(X(:,1),X(:,2),'k*','MarkerSize',5); title 'Fisher''s Iris Data'; xlabel 'Petal Lengths (cm)'; ylabel 'Petal Widths (cm)'; %kita akan menggunakan kmeans untuk melakukan %clustering [idx,C] = kmeans(X,3); hold on for i =1:3 text(C(i,1),C(i,2),num2str(i),'FontSize',30,'Color','B') end
Coba kalian perhatikan urutan angka 1,2, dan 3 berikut yang akan selalu berubah-ubah lokasinya sesuai dengan centroid dari K-Means.
Pasti akan menghasilkan urutan yang berbeda-beda, oleh karena itu kita harus menetapkan terlebih dahulu seed random generator yaitu dengan function rand(‘seed’,0) yang artinya bilangan random akan menggunakan seed/benih 0 sebagai nilai awalnya, kamu bebas menggunakan 0 – 9999.
Perlu kamu ketahui, dalam versi lama, Matlab menggunakan rand() untuk memicu bilangan random, ada sekitar 2^32-1 nilai pemicu awal bilangan random.
rand('state',seed_number) is an old way of seeding the MATLAB v5 random number generator
Kalian bisa saja mengatur seed_number agar nilainya senantiasa sama ketika anda panggil berkali-kali. Penulis biasa menggunakan cara ini untuk me set agar seragam bilangan random yang dihasilkan. Coba kamu perbaiki codenya menjadi berikut
clc;clear all;close all; load fisheriris X = meas(:,3:4); figure; plot(X(:,1),X(:,2),'k*','MarkerSize',5); title 'Fisher''s Iris Data'; xlabel 'Petal Lengths (cm)'; ylabel 'Petal Widths (cm)'; %kita akan menggunakan kmeans untuk melakukan %clustering rand('seed',0) %seed nya diisi 0 [idx,C] = kmeans(X,3); hold on for i =1:3 text(C(i,1),C(i,2),num2str(i),'FontSize',30,'Color','B') end
Maka hasil urutannya akan senantiasa sama karena K-Means menggunakan bilangan random dalam menentukan nilai centroid awal, maka dengan langkah diatas akan ditetapkan terlebih dahulu seed randomnya sehingga nilainya tidak akan berubah-ubah. Kalia bisa baca mengenai range generator random