- Mampu mencoba training data dengan Decision tree
3. Dasar Teori [kembali]
Setiap
orang tentu menginginkan sebuah pengambilan keputusan yang tepat dan efisien
tak terkecuali sebuah perusahaan. Untuk itu banyak sekali perusahaan yang
membutuhkan suatu media seperti Business Intellegence guna membantu dalam
pengambilan keputusan yang tepat.
Namun,
hal tersebut tidak akan berarti tanpa adanya konsep decision tree (pohon
keputusan). Decision tree adalah salah satu metode klasifikasi yang paling
populer, karena mudah untuk diinterpretasi oleh manusia. Decision tree adalah
model prediksi menggunakan struktur pohon atau struktur berhirarki.
Decision
tree menyediakan cara untuk menyajikan algoritma dengan pernyataan kontrol
bersyarat. Mereka termasuk cabang yang mewakili langkah-langkah pengambilan
keputusan yang dapat mengarah pada hasil yang menguntungkan.
Struktur
flowchart mencakup node internal yang mewakili tes atau atribut pada setiap
tahap. Setiap cabang mewakili hasil untuk atribut, sedangkan jalur dari daun ke
akar mewakili aturan untuk klasifikasi.
Konsep
dari pohon keputusan adalah mengubah data menjadi decision tree dan
aturan-aturan keputusan. Manfaat utama dari penggunaan decision tree adalah
kemampuannya untuk mem-break down proses pengambilan keputusan yang kompleks
menjadi lebih simple, sehingga pengambil keputusan akan lebih
menginterpretasikan solusi dari permasalahan.
Decision
Tree meningkatkan model prediktif dengan akurasi, kemudahan dalam interpretasi,
dan stabilitas. Alat ini juga efektif dalam menyesuaikan hubungan non-linier
karena mampu memecahkan tantangan penyesuaian data, seperti regresi dan
klasifikasi.
Disebut
deecision tree atau pohon keputusan karena pilihannya bercabang, membentuk
struktur yang terlihat seperti pohon.
Anda
dapat membuat pohon keputusan vertikal atau horizontal tergantung pada
preferensi Anda. Membaca pohon keputusan horizontal dari kiri ke kanan dan
pohon keputusan vertikal dari atas ke bawah.
Pohon
keputusan bekerja paling baik ketika Anda mengikuti aturan diagram alur dasar:
·
Persegi panjang atau
bujur sangkar: Tunjukkan awal pohon tempat Anda menulis pertanyaan.
·
Garis: Mewakili
cabang-cabang pohon. Ini semua adalah kemungkinan tindakan.
·
Lingkaran: Menandakan
hasil yang tidak pasti bahwa Anda akan membutuhkan cabang tambahan untuk
diklarifikasi.
·
Segitiga: Berikan jawaban
yang jelas dan final. Mereka juga disebut “daun.”
Dengan
membat decision tree memungkinkan Anda untuk memvisualisasikan hasil dari
setiap pilihan dalam cara yang terorganisir.
Anda
dapat menggunakan pohon keputusan ketika Anda memiliki tujuan tertentu, seperti
menentukan apakah Anda harus menerima tawaran pekerjaan.
Alat
ini juga bermanfaat jika Anda perlu mengevaluasi sejumlah besar data atau
statistik. Misalnya, jika Anda seorang agen penjualan dan ingin menentukan
berapa banyak pendapatan yang dapat dihasilkan oleh calon pelanggan versus
biaya untuk mengejar dan mempertahankan hubungan, Anda dapat menggunakan pohon
keputusan untuk menganalisis laba atas investasi.
Untuk gambar diatas merupakan contoh dari classification tree, sedangkan gambar dibawah merupakan contoh dari regression tree.
Example
Program
Metode
Follow wall
a.
Pengenalan
Sistem
navigasi wall following adalah suatu aksi robot untuk mengikuti dinding dan
berada tidak jauh dari dinding, wall following bekerja berdasarkan prinsip
mengikuti suatu objek, dalam hal ini objek tersebut adalah dinding. Wall
following dapat di implementasikan pada beberapa kasus dalam kehidupan kita
sehari – hari dengan menggunakan beberapa algoritma di dalamnya.
Berikut
adalah navigasi dari sensornya:
b.
Dataset
Follow
Left Wall
Sensor 9 – Sensor 8 (x) |
Comment |
Sensor
8 – Sensor 9 (y) |
Comment |
0<x<2 |
Kanan
2 |
0<y<2 |
Kiri
2 |
2<x<5 |
Kanan
4 |
2<y<5 |
Kiri
4 |
5<x<10 |
Kanan
7 |
5<y<10 |
Kiri
7 |
10<x<20 |
Kanan
10 |
10<y<20 |
Kiri
10 |
bool stepStatus = false;bool dirTimer = false;void followWall() {Wire1.beginTransmission(0x70);if (stepStatus == false) {//timer = 0;if (distances[8] <= 210 && distances[9] <= 210) {if (distances[7] > 700 && distances[9] < 260 && stepStatus == false) {stepStatus = true;Serial.println("siap2 belok");}else{followleft();}}}else if (stepStatus == true) {if (distances[8] >= 580 && distances[9] >= 580 && distances[10] >= 620) { // 580Serial.println("belok kiri");Wire1.write(CCW90);stepStatus = false;dirTimer = false;}else {//Wire1.write(Forward);if (dirTimer != false) {followright();}else{Wire1.write(stepForward);}}}Wire1.endTransmission();}void followleft() {uint16_t dif = abs(y);uint8_t x = distances[9] - distances[8];uint8_t y = distances[8] - distances[9];if (dif2 < 10) {Wire1.write(Forward);Serial.println("forward");}else if ((x <= 2) && (x >= 0)) {Wire1.write(CW2);Serial.println("kanan 2d");}else if ((y <= 2) && (y >= 0)) {Wire1.write(CCW2);Serial.println("kiri 2d");}else if ((x <= 5) && (x >= 2)) {Wire1.write(CW4);Serial.println("kanan 4d");}else if ((y <= 5) && (y >= 2)) {Wire1.write(CCW4);Serial.println("kiri 4d");}else if ((x <= 10) && (x >= 5)) {Wire1.write(CW7);Serial.println("kanan 7d");}else if ((y <= 10) && (y >= 5)) {Wire1.write(CCW7);Serial.println("kiri 7d");}else if ((x <= 20) && (x >= 10)) {Wire1.write(CW10);Serial.println("kanan 10d");}else if ((y <= 20) && (y >= 10)) {Wire1.write(CCW10);Serial.println("kiri 10d");}}}void followright() {uint16_t dif2 = abs(distances[2] - distances[3]);if (dif1 < 20) {Wire1.write(Forward);Serial.println("forward");}else if ((distances[3] - distances[2] <= 2) && (distances[3] - distances[2] >= 0)) {Wire1.write(CW4);Serial.println("kanan 2d");}else if ((distances[2] - distances[3] <= 2) && (distances[2] - distances[3] >= 0)) {Wire1.write(CCW4);Serial.println("kiri 2d");}else if ((distances[3] - distances[2] <= 5) && (distances[3] - distances[2] >= 3)) {Wire1.write(CW4);Serial.println("kanan 4d");}else if ((distances[2] - distances[3] <= 5) && (distances[2] - distances[3] >= 3)) {Wire1.write(CCW4);Serial.println("kiri 4d");}else if ((distances[3] - distances[2] <= 10) && (distances[3] - distances[2] >= 5)) {Wire1.write(CW7);Serial.println("kanan 7d");}else if ((distances[2] - distances[3] <= 10) && (distances[2] - distances[3] >= 5)) {Wire1.write(CCW7);Serial.println("kiri 7d");}else if ((distances[3] - distances[2] <= 20) && (distances[3] - distances[2] >= 10)) {Wire1.write(CW10);Serial.println("kanan 10d");}else if ((distances[2] - distances[3] <= 20) && (distances[2] - distances[3] >= 10)) {Wire1.write(CCW10);Serial.println("kiri 10d");}}
int i;
bool parsing = false;String data[10], sData;int a, b;void setup() {Serial.begin(9600);}void loop() {while (Serial.available()) {char inChar = Serial.read();sData += inChar;if (inChar == '$') {parsing = true;}if (parsing) {int q = 0;for (int i = 0; i < sData.length(); i++) {if (sData[i] == '#') {q++;data[q] = "";}else {data[q] += sData[i];}}//String istring = String(data[1]);a = data[1].toInt();b = data[2].toInt();Serial.println("DATA MASUK : " + sData);Serial.print("Sensor 8 :");Serial.print(a);Serial.println(" mm");Serial.print("Sensor 9 :");Serial.print(b);Serial.println(" mm");Serial.println();move(a,b);parsing = false;sData = "";}}}void move(int sensor8, int sensor9){if(sensor9 - sensor8 >= 0 && sensor9 - sensor8 <= 20){Serial.println("Belok Kanan 2 derajat");}else if(sensor9 - sensor8 > 20 && sensor9 - sensor8 <= 50){Serial.println("Belok Kanan 4 derajat");}else if(sensor9 - sensor8 > 50 && sensor9 - sensor8 <= 100){Serial.println("Belok Kanan 7 derajat");}else if(sensor9 - sensor8 > 100 && sensor9 - sensor8 <= 200){Serial.println("Belok Kanan 10 derajat");}else if(sensor8 - sensor9 >= 0 && sensor8 - sensor9 <= 20){Serial.println("Belok Kiri 2 derajat");}else if(sensor8 - sensor9 > 20 && sensor8 - sensor9 <= 50){Serial.println("Belok Kiri 4 derajat");}else if(sensor8 - sensor9 > 50 && sensor8 - sensor9 <= 100){Serial.println("Belok Kiri 7 derajat");}else if(sensor8 - sensor9 > 100 && sensor8 - sensor9 <= 200){Serial.println("Belok Kiri 10 derajat");}Serial.println();}
No comments:
Post a Comment