Klasifikasi Penyakit Diabetes dengan Metode KKN Menggunakan R

Dhea Laksmita Arsya Primananda
7 min readJan 9, 2020

Assalamualaikum wr.wb.

Pada kesempatan kali ini saya akan membahas tentang klasifikasi penyakit Diabetes dengan metode KKN (k-Nearest Neighbor). Selamat membaca.

Tahukah Anda Penyakit Diabetes?

Penyakit diabetes adalah penyakit yang berlangsung lama atau kronis serta ditandai dengan kadar gula (glukosa) darah yang tinggi atau di atas nilai normal. Glukosa yang menumpuk di dalam darah akibat tidak diserap sel tubuh dengan baik dapat menimbulkan berbagai gangguan organ tubuh. Jika diabetes tidak dikontrol dengan baik, dapat timbul berbagai komplikasi yang membahayakan nyawa penderita. Glukosa merupakan sumber energi utama bagi sel tubuh manusia. Kadar gula dalam darah dikendalikan oleh hormon insulin yang diproduksi oleh pankreas, yaitu organ yang terletak di belakang lambung. Pada penderita diabetes, pankreas tidak mampu memproduksi insulin sesuai kebutuhan tubuh. Tanpa insulin, sel-sel tubuh tidak dapat menyerap dan mengolah glukosa menjadi energi. (www.alodokter.com)

Lalu, apa hubungannya Diabetes dengan Metode KNN?

Sebelumnya mari kita mengenal Metode KNN terlebih dahulu. Algoritme k-nearest neighbor (k-NN atau KNN) adalah sebuah metode untuk melakukan klasifikasi terhadap objek berdasarkan data pembelajaran yang jaraknya paling dekat dengan objek tersebut. Data pembelajaran diproyeksikan ke ruang berdimensi banyak, dimana masing-masing dimensi merepresentasikan fitur dari data. Ruang ini dibagi menjadi bagian-bagian berdasarkan klasifikasi data pembelajaran. Sebuah titik pada ruang ini ditandai kelas c jika kelas c merupakan klasifikasi yang paling banyak ditemui pada k buah tetangga terdekat titk tersebut. Dekat atau jauhnya tetangga biasanya dihitung berdasarkan jarak Euclidean.(www.wikipedia.com)

K-Nearest Neighbors Algorithm

  1. Menentukan k bilangan bulat positif berdasarkan ketersediaan data pembelajaran.
  2. Memilih tetangga terdekat dari data baru sebanyak k.
  3. Menentukan klasifikasi paling umum pada langkah (ii), dengan menggunakan frekuensi terbanyak.
  4. Keluaran klasifikasi dari data sampel baru.

Studi Kasus

Jadi, pada kesempatan kali ini penulis akan mencoba menerapkan metode KNN untuk klasifikasi pada penyakit diabetes. Di mana terdapat beberapa faktor yang menyebabkan seseorang terkena penyakit diabetes. Maka dari itu, penulis akan mencoba mengklasifikasikan seseorang, apakah orang tersebut terkena penyakit diabetes atau tidak berdasarkan faktor-faktor (variabel) yang ada. Data yang penulis gunakan yaitu data Diabetes yang penulis peroleh dari kaggle. Anda bisa mengunduhnya di sini. Berikut adalah variabel-variabel yang terdapat dalam data tersebut.

 [1] “Age” “BloodPressure” 
[3] “BMI” “DiabetesPedigreeFunction”
[5] “Glucose” “Insulin”
[7] “Outcome” “Pregnancies”
[9] “SkinThickness”

Dataset ini berasal dari National Institute of Diabetes and Digestive and Ginjal Diseases. Tujuan dari dataset adalah untuk memprediksi secara diagnostik apakah pasien memiliki diabetes, berdasarkan pengukuran diagnostik tertentu yang termasuk dalam dataset. Beberapa kendala ditempatkan pada pemilihan instance ini dari database yang lebih besar.

Variabel pada data diabetes ini terdiri dari variabel predikator medis (independen), diantarnya variabel Age (usia), Blood Pressure (tekanan darah), BMI (index pertumbuhan), Diabetes Pedigree Function (Fungsi Silsilah Diabetes), Glucose (kadar glukosa), Insulin (tingkat hormon alami yang diproduksi oleh pankreas), Pregnancies (jumlah kehamilan yang pernah dialami), SkinThickness (ketebalan kulit), dan variabel target (dependen), yaitu variabel Outcome (hasil).

Dari beberapa variabel di atas, penulis menggunakan semua variabel untuk menentukan klasifikasi seseorang tersebut terkena penyakit diabetes atau tidak. Dan pada variabel Outcome yang nantinya akan menjadi variabel penentu klasifikasi. Penulis menggunakan semua variabel tersebut karena penulis merasa kesemua variabel tersebut berpengaruh terhadap hasil diagnosis apakah seseorang tersebut diabetes atau tidak.

Metode

Metode yang penulis gunakan untuk menyelesaikan kasus ini yaitu metode KNN (k-Nerest Neighbor). Seperti yang penulis telah jelaskan tadi tentang apa itu metode KNN. Penulis menggunakan metode ini karena penulis ingin mengklasifikasikan objek berdasarkan data pembelajaran yang jaraknya paling dekat dengan objek tersebut (tetangga). Parameter utama dalam metode KNN ini adalah jumlah tetangga (k).

Populasi dan Sampel

Populasi yang penulis gunakan yaitu semua data yang terdapat pada dataset diabetes yaitu sebanyak 768 . Sedangkan untuk sampel yang penulis ambil yaitu sampel dari Muhammad. Di mana Muhammad ini memiliki data medis diantaranya :
Pregnancies (jumlah kehamilan yang pernah dialami) = 0
Glucose (kadar gula atau glukosa) = 85
BloodPressure (tekanan darah) = 77
SkinThickness (ketebalan kulit) = 23
Insulin (tingkat hormon alami yang diproduksi oleh pankreas) = 94
BMI (Indeks Masa Tumbuh) = 33.6
DiabetesPedigreeFunction (Fungsi Silsilah Diabetes) = 0.167
Age (Usia) = 30

Langkah-Langkah

Input Data

 data.diabetes=read.csv(“D:\\LECTURE\\BIML\\diabetes.csv”)
data.diabetes
View(data.diabetes)

Install dan Panggil Packages

 library(class)
library(data.table)
library(dbscan)
library(dplyr)

Melihat Variabel Data

colnames(data.diabetes)

Membuat tabel data dan melihat apakah ada data yang kosong (NA)

klasifikasi=data.table(data.diabetes)
klasifikasi1=na.omit(klasifikasi, cols=c(“Pregnancies”,”Glucose”,”BloodPressure”,”SkinThickness”,”Insulin”,“BMI”,”DiabetesPedigreeFunction”,”Age”,”Outcome”))
klasifikasi1

Untuk mengetahui apakah terdapat data yang NA atau tidak, maka digunakan fungsi na.omit untuk melihatnya. Tujuan dari perintah na.omit ini untuk menghapus data yang kosong atau NA. Maka penulis membentuk variabel baru dengan nama klasifikasi1 yang datanya telah bersih dari data NA.

Mengubah tipe data variabel ke faktor

klasifikasi1$Pregnancies=factor(klasifikasi1$Pregnancies)
klasifikasi1$Glucose=factor(klasifikasi1$Glucose)
klasifikasi1$BloodPressure=factor(klasifikasi1$BloodPressure)
klasifikasi1$SkinThickness=factor(klasifikasi1$SkinThickness)
klasifikasi1$Insulin=factor(klasifikasi1$Insulin)
klasifikasi1$BMI=factor(klasifikasi1$BMI)
klasifikasi1$DiabetesPedigreeFunction=factor(klasifikasi1$DiabetesPedigreeFunction)
klasifikasi1$Age=factor(klasifikasi1$Age)
klasifikasi1$Outcome=factor(klasifikasi1$Outcome)

Semua data diubah ke tipe data faktor untuk mempermudah klasifikasi yang masing-masing diberi nama variabel baru dengan jumlah variabel tersebut yaitu 9 variabel.

Membuat variabel yang dikerjakan untuk menentukan target(Outcome)

Faktor1=cbind(klasifikasi1$Pregnancies,
klasifikasi1$Glucose,
klasifikasi1$BloodPressure,
klasifikasi1$SkinThickness,
klasifikasi1$Insulin,
klasifikasi1$BMI,
klasifikasi1$DiabetesPedigreeFunction,
klasifikasi1$Age)
Faktor1
View(Faktor1)
summary(Faktor1)

Pada Faktor1 memuat semua variabel (independen) kecuali variabel Outcome (Variabel dependen) yang akan dijadikan target.

Mendefinisikan Target (Variabel Dependen) untuk Klasifikasi

#definisi target
target<-klasifikasi1$Outcome
class(target)

Variabel target di sini penulis menggunakan variabel Outcome (dependen). Dengan klasifikasi 0 dan 1. Di mana 0 berarti orang tersebut tidak diabetes, dan 1 berarti seseorang tersebut terkena diabetes.

Mendeskripsikan Target

Di sini penulis mendeskripsikan seorang target yaitu Muhammad, seperti yang telah penulis jelaskan pada kasus di awal. Di mana Muhammad ini memiliki data medis diantaranya :
Pregnancies (jumlah kehamilan yang pernah dialami) = 0
Glucose (kadar gula atau glukosa) = 85
BloodPressure (tekanan darah) = 77
SkinThickness (ketebalan kulit) = 23
Insulin (tingkat hormon alami yang diproduksi oleh pankreas) = 94
BMI (Indeks Masa Tumbuh) = 33.6
DiabetesPedigreeFunction (Fungsi Silsilah Diabetes) = 0.167
Age (Usia) = 30

 coba=cbind(0,85,77,23,94,33.6,0.167,30)
rownames(coba)<-c(“Muhammad”)
coba

Mencari Outcome (hasil) dari Diabetes

Penulis mengklasifikasikan data yang ada, sehingga dapat dikatahui klasifikasi tersebut akan masuk ke kelas mana dan kemungkinan asumsi nya yaitu berupa probabilitas.

 klasifikasi.Muhammad<-knn(Faktor1,coba,target,k=5,prob = T)
klasifikasi.Muhammad

Penulis menggunakan pendekatan k=5 untuk mencari di kelas manakah Muhammad. Nilai k harus dibuat ganjil supaya ada kombinasi yang berbeda.

Berdasarkan hasil di atas, maka dapat diketahui bahwa klasifikasi Muhammad dengan k=5, yaitu pada kelas 0 yang berarti Muhammad tidak diabetes, dengan nilai peluang (probabilitas) sebesar 0.8 untuk klasifikasi tidak diabetes.

Mengetahui persekitaran terdekat

Untuk menambah data dengan mencakup seluruh data digunakan fungsi rbind atau menambahkan baris diakhir data, yaitu baris dari data sampel yang akan diuji coba.

 semua<-rbind(Faktor1,coba)
semua
tetangga<-kNN(semua,k=5)
tetangga
str(tetangga)
i<-769
tetangga$id[i,]

Penentuan nilai k dipertimbangkan berdasarkan banyaknya data yang ada dan ukuran dimensi yang dibentuk oleh data. Semakin banyak data yang ada, angka k yang dipilih sebaiknya semakin rendah.

Maka dari itu diperlukannya pembuatan suatu klasifikasi dari keseluruhan data dengan fungsi KNN dimana jumlah k =5 yang diambil secara acak berjumlah 5 sampel dari data 769.

Membentuk target tambahan

 klasifikasi.tambahan<-factor(c(“0”))
Classificasi<-unlist(list(target,klasifikasi.tambahan))
Classificasi

Di mana hasil dari klasifikasi Muhammad tadi adalah 0. Maka dimasukkan dala faktor klasifikasi tambahan.

Mencari semua hasil (Outcome) dan Perhitungan Matematis

 klasifikasiMuhammad<-knn(semua,semua,Classificasi,k=5,prob = T)
klasifikasiMuhammad
100*sum(Classificasi==klasifikasijohan)/100
table(klasifikasiMuhammad,Classificasi)

Mengklasifikasi ulang keseluruhan data untuk mendapatkan matriks dengan klasifikasi yg kita inginkan, dimana k=5 dan probabilitas =true, maksud dari probabilitas =true untuk mengetahui probabilitas masing masing data yg diklasifikasikan. Kemudian untuk melihat kebenaran dari klasifikasi yang telah dibuat maka penulis menggunakan fungsi 100*sum , dan diperoleh hasil yang hampir mendekati jumlah data. Sehingga hasil output klasifikasi akhir berupa matriks berikut.

Hasil di atas merupakan perhitungan matematis dan hasil klasifikasi dalam bentuk matrix. Di mana perhitungan matematis tersebut untuk mengetahui kesesuaian klasifikasi. Penulis memperoleh hasil perhitungan untuk kebenaran atau keakuratan klasifikasinya adalah sebesar 617, dan hasil ini mungkin bisa dikatakan masih cukup jauh dari jumlah data yang ada yaitu 768.
Berdasarkan hasil tabel klasifikasi yang diperoleh, dapat diketahui bahwa untuk klasifikasi 0 dengan target 0 yaitu 442, klasifikasi 1 dan dengan target 0 adalah 94, klasifikasi 0 dan target 1 adalah 58, dan klasifikasi 1 dengan target 1 diperoleh 175.

Kesimpulan

Berdasarkan langkah kerja yang telah penulis lakukan yaitu mengetahui apakah seseorang tersebut diabetes atau tidak. Dari kasus yang penulis ambil, yaitu penulis data Muhammad, yakni:
Pregnancies (jumlah kehamilan yang pernah dialami) = 0
Glucose (kadar gula atau glukosa) = 85
BloodPressure (tekanan darah) = 77
SkinThickness (ketebalan kulit) = 23
Insulin (tingkat hormon alami yang diproduksi oleh pankreas) = 94
BMI (Indeks Masa Tumbuh) = 33.6
DiabetesPedigreeFunction (Fungsi Silsilah Diabetes) = 0.167
Age (Usia) = 30
maka diperoleh hasil klasifikasi Muhammad adalah berada di kelas 0 (hasil/Outcome) yang artinya Muhammad tidak diabetes berdasarkan data yang diketahui pada kasus. Dan probabilitas Muhammad untuk tidak diabetes diketahui yaitu sebesar 0.8. Pengklasifikasian ini menggunakan metode KNN di mana penulis menggunaka nilai k=5.

Sekian artikel pada kesempatan kali ini. Semoga bermanfaat.

Sumber

Advernesia

Alodokter

Informatikalogi.com

Wikipedia

https://medium.com/@BAYUGALIH/classification-of-diabetes-with-knn-method-using-r-b09cdb70bc6c

--

--