#NEURAL NETWORK

##Contoh 4.8 menggunakan mlbench (nnet)

###Impor package dan data

#install.packages("mlbench")
#install.packages("caret")
#install.packages("nnet")

library(mlbench)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(nnet)
data(BostonHousing)

Interpretasi: Pada bagian ini, kita mengimpor package mlbench, caret, dan nnet. Package mlbench digunakan untuk menyediakan dataset BostonHousing, yang berisi informasi tentang harga rumah di Boston. Package caret digunakan untuk mempermudah proses pelatihan model, sedangkan nnet digunakan untuk membangun model neural network.

###Statistik dan partisi data

#cek range dari medv digunakan untuk scaling data
summary(BostonHousing$medv)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    5.00   17.02   21.20   22.53   25.00   50.00
#partisi data untuk training dan testing
inTrain <- createDataPartition(y = BostonHousing$medv, p = 0.75, list = FALSE)

train.set <- BostonHousing[inTrain, ]
test.set <- BostonHousing[-inTrain, ]

Interpretasi: Pada bagian ini, kita memeriksa rentang nilai dari variabel medv (median value of owner-occupied homes in $1000s) untuk melakukan scaling data. Kemudian, kita membagi dataset menjadi dua bagian: training set (75% dari data) dan testing set (25% dari data) menggunakan fungsi createDataPartition dari package caret. Ini memastikan bahwa model yang dibangun akan diuji pada data yang belum pernah dilihat sebelumnya.

###Model data

netmodel <- nnet(medv/50 ~ ., data = train.set, size = 5, maxit = 500)
## # weights:  76
## initial  value 17.143191 
## iter  10 value 10.412550
## iter  20 value 9.749809
## iter  30 value 7.121804
## iter  40 value 4.832722
## iter  50 value 3.543512
## iter  60 value 2.869340
## iter  70 value 2.633147
## iter  80 value 2.578845
## iter  90 value 2.550989
## iter 100 value 2.518394
## iter 110 value 2.509834
## iter 120 value 2.504051
## iter 130 value 2.485566
## iter 140 value 2.478893
## iter 150 value 2.469102
## iter 160 value 2.460686
## iter 170 value 2.451363
## iter 180 value 2.442232
## iter 190 value 2.417518
## iter 200 value 2.408812
## iter 210 value 2.407401
## iter 220 value 2.405584
## iter 230 value 2.404566
## iter 240 value 2.404361
## iter 250 value 2.403976
## iter 260 value 2.403376
## iter 270 value 2.402686
## iter 280 value 2.399683
## final  value 2.399541 
## converged

Interpretasi: Pada bagian ini, kita membangun model neural network menggunakan fungsi nnet. Model ini memprediksi nilai medv (harga rumah) dengan menggunakan semua variabel independen lainnya dalam dataset. Parameter size = 5 menunjukkan bahwa kita menggunakan 5 neuron di hidden layer, dan maxit = 500 menunjukkan jumlah iterasi maksimum untuk pelatihan model. Didapatkan final value 1.606 dari 500 iterasi.

###Uji model

medv.predict <- predict(netmodel, test.set[,-14]) * 50

Interpretasi: Pada bagian ini, kita menggunakan model yang telah dibangun untuk memprediksi nilai medv pada data testing. Fungsi predict digunakan untuk menghasilkan prediksi berdasarkan model neural network yang telah dilatih. Hasil prediksi kemudian dikalikan dengan 50 untuk mengembalikan skala nilai medv ke dalam satuan aslinya.

###Hitung MSE

mean((medv.predict - test.set$medv)^2)
## [1] 14.75656
plot(test.set$medv, medv.predict, main="Neural Network Prediction", xlab="Actual medv", ylab="Predicted medv")
abline(lm(medv.predict ~ test.set$medv), col="red")

Interpretasi: Dari output di atas terlihat bahwa nilai MSE (Mean Squared Error) adalah 19.97, yang menunjukkan seberapa baik model neural network dalam memprediksi harga rumah. Akurasi prediksi juga terlihat pada plot di atas yang menunjukkan hasil prediksi cukup baik.

##Contoh 4.9 Menggunakan fungsi neuralnet

### import package dan data

library(mlbench)
library(caret)
library(neuralnet)

data("BostonHousing")
data<-BostonHousing

###Lakukan scaled dan partisi

#karena var chas adalah biner, cukup menggunakan as.numeric
data$chas <- as.numeric(data$chas)

#lakukan scaling pada data
maxs<- apply(data, 2, max)
mins<- apply(data, 2, min)

scaled<- as.data.frame(scale(data, center = mins, scale = maxs - mins))

#partisi data untuk training dan testing
index <- createDataPartition(y = BostonHousing$medv, p = 0.75, list = FALSE)
train <- scaled[index, ]
test <- scaled[-index, ]

###Model neural network

n <- names(train)
f <- as.formula(paste("medv ~", paste(n[!n %in% "medv"], collapse = "+")))
nn <- neuralnet(f, data = train, hidden = c(5,3), linear.output = TRUE)

#hitung prediksi pada data test
pr.nn<- compute(nn, test[,1:13])

#unscaling data
pr.nn<-pr.nn$net.result*(max(data$medv)-min(data$medv)) + min(data$medv)
test.r<- (test$medv)*(max(data$medv)-min(data$medv)) + min(data$medv)

#hitung MSE
sum((test.r - pr.nn)^2)/nrow(test)
## [1] 18.40263

###plot data prediksi vs data aktual

plot(test.r, pr.nn, main = "Neural Network Prediction", xlab = "Actual medv", ylab = "Predicted medv")
abline(lm(pr.nn ~ test.r), col = "red")

Interpretasi: dari output tersebut, terlihat bahwa neuralnet menghasilkan nilai MSE (Mean Squared Error) sebesar 9.76, jauh lebih kecil dari MSE yang dihasilkan nnet. Akurasi prediksi pada data testing juga terlihat dari plot di atas.

#FREQUENT PATTERN MINING

##1. Install dan aktifkan package “arules”

library(arules)
## Loading required package: Matrix
## 
## Attaching package: 'arules'
## The following objects are masked from 'package:base':
## 
##     abbreviate, write
library(arulesViz) 

Interpretasi: Pada bagian ini, kita mengimpor package arules yang digunakan untuk melakukan frequent pattern mining, serta arulesViz untuk visualisasi aturan asosiasi. Package ini menyediakan fungsi-fungsi yang diperlukan untuk menganalisis data transaksi dan menemukan pola asosiasi di dalamnya.

##2. Import data

transaksi <- read.transactions( 
  file = "C:/Users/ihsan/OneDrive - Politeknik Statistika STIS/Desktop/KULIAH STIS/Tingkat 3 SD/Semester 6/Data Mining/Tugas Datmin UAS/data_transaksi.txt", 
  format = "single", 
  sep = "\t", 
  cols = c(1, 2), 
  skip = 1 
)

Interpretasi: Pada bagian ini, kita mengimpor data transaksi dari file teks yang berisi informasi tentang item yang dibeli dalam setiap transaksi. Fungsi read.transactions digunakan untuk membaca data tersebut dengan format “single”, di mana setiap baris mewakili satu transaksi. Parameter sep menentukan pemisah antar kolom, dan cols menunjukkan kolom mana yang akan digunakan sebagai ID transaksi dan item. Parameter skip digunakan untuk melewati baris pertama yang biasanya berisi header.

##3. Tampilkan Hasil

print(transaksi) 
## transactions in sparse format with
##  10 transactions (rows) and
##  4 items (columns)

Interpretasi: Pada bagian ini, kita mencetak objek transaksi yang berisi data transaksi yang telah diimpor. Terdiri dari 10 transaksi dan 4 item.

###3a. data

inspect(transaksi)
##      items                       transactionID
## [1]  {Greentea, Roti, Yoghurt}   01           
## [2]  {Greentea, Sambal}          02           
## [3]  {Roti, Yoghurt}             03           
## [4]  {Greentea, Yoghurt}         04           
## [5]  {Greentea, Sambal, Yoghurt} 05           
## [6]  {Greentea, Roti}            06           
## [7]  {Greentea, Roti, Yoghurt}   07           
## [8]  {Greentea}                  08           
## [9]  {Greentea, Sambal}          09           
## [10] {Roti, Sambal, Yoghurt}     10

Interpretasi: Setiap item dalam transaksi ditampilkan dengan format yang menunjukkan ID transaksi dan item yang dibeli. Misalnya, transaksi pertama berisi item “Greentea”, “Roti”, “Yoghurt”. Ini memberikan gambaran tentang kombinasi item yang sering dibeli bersama dalam setiap transaksi.

###3b. data

transaksi@itemInfo

Interpretasi: Informasi item terdiri dari 4 item, greentea, roti, sambal, dan yoghurt.

###3c. Daftar itemset transaksi

transaksi@itemsetInfo

##4. Membuat matriks transaksi

transaksi@data
## 4 x 10 sparse Matrix of class "ngCMatrix"
##                         
## [1,] | | . | | | | | | .
## [2,] | . | . . | | . . |
## [3,] . | . . | . . . | |
## [4,] | . | | | . | . . |

Interpretasi: berikut matriks transaksi yang menunjukkan hubungan antara ID transaksi dan item yang dibeli. Setiap baris mewakili satu transaksi, dan setiap kolom mewakili satu item. Nilai 1 menunjukkan bahwa item tersebut ada dalam transaksi, sedangkan nilai 0 menunjukkan bahwa item tersebut tidak ada.Contoh item 1 (yoghurt) memiliki nilai 1 di item 1 dan 2, lalu di 3 tidak ada sesuai dengan daftar list di atas.

##5. Frekuensi item

###5a. Persentase

itemFrequency(transaksi, type = "relative")
## Greentea     Roti   Sambal  Yoghurt 
##      0.8      0.5      0.4      0.6

Interpretasi: Pada bagian ini, kita menghitung frekuensi relatif dari setiap item dalam transaksi. Fungsi itemFrequency digunakan untuk mendapatkan persentase kemunculan setiap item dibandingkan dengan total transaksi. Hasilnya Greentea menunjukkan item yang paling populer atau sering dibeli oleh pelanggan.

###5b. Jumlah sebenarnya (Absolute)

itemFrequency(transaksi, type = "absolute")
## Greentea     Roti   Sambal  Yoghurt 
##        8        5        4        6

Interpretasi: Pada bagian ini, kita menghitung frekuensi absolut dari setiap item dalam transaksi. Fungsi itemFrequency digunakan untuk mendapatkan jumlah kemunculan setiap item dalam transaksi. Hasilnya menunjukkan greentea dibeli sebanyak 8 kali dari jumlah sebenarnya.

###5c. Grafik

itemFrequencyPlot(transaksi, topN = 10, type = "relative", main = "Frekuensi Item Transaksi")

##6. Rules dengan apriori

apriori(transaksi)
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.01s].
## writing ... [3 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
## set of 3 rules
mba = apriori(transaksi)
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [3 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
inspect(mba)
##     lhs               rhs        support confidence coverage lift     count
## [1] {}             => {Greentea} 0.8     0.8        1.0      1.000000 8    
## [2] {Roti}         => {Yoghurt}  0.4     0.8        0.5      1.333333 4    
## [3] {Roti, Sambal} => {Yoghurt}  0.1     1.0        0.1      1.666667 1

Interpretasi: Pada bagian ini, kita menggunakan algoritma Apriori untuk menemukan aturan asosiasi dalam data transaksi. Fungsi apriori digunakan untuk menghasilkan aturan asosiasi berdasarkan data transaksi yang telah diimpor. Hasilnya adalah sekumpulan aturan yang menunjukkan hubungan antara item-item dalam transaksi. Setiap aturan terdiri dari dua bagian: LHS (Left Hand Side) dan RHS (Right Hand Side), yang menunjukkan item-item yang sering dibeli bersama.

##7. Filtering Part 1

###7a. Filter RHS

inspect(subset(mba,rhs%in%"Yoghurt")) 
##     lhs               rhs       support confidence coverage lift     count
## [1] {Roti}         => {Yoghurt} 0.4     0.8        0.5      1.333333 4    
## [2] {Roti, Sambal} => {Yoghurt} 0.1     1.0        0.1      1.666667 1

Interpretasi: Pada bagian ini, kita melakukan penyaringan aturan asosiasi untuk menemukan aturan yang memiliki item tertentu di RHS (Right Hand Side). Fungsi subset digunakan untuk memilih aturan yang memiliki item “Yoghurt” di RHS. Hasilnya adalah aturan-aturan yang menunjukkan bahwa jika item-item tertentu dibeli, maka kemungkinan besar pelanggan juga akan membeli “Yoghurt”.

###7b. Filter LHS

inspect(subset(mba,lhs%in%"Sambal")) 
##     lhs               rhs       support confidence coverage lift     count
## [1] {Roti, Sambal} => {Yoghurt} 0.1     1          0.1      1.666667 1

Interpretasi: Pada bagian ini, kita melakukan penyaringan aturan asosiasi untuk menemukan aturan yang memiliki item tertentu di LHS (Left Hand Side). Fungsi subset digunakan untuk memilih aturan yang memiliki item “Sambal” di LHS. Hasilnya adalah aturan-aturan yang menunjukkan bahwa jika pelanggan membeli “Sambal”, maka kemungkinan besar mereka juga akan membeli item-item lain yang ada di RHS.

###7c. Filter LHS dan RHS

inspect(subset(mba,lhs%in%"Roti"& rhs%in%"Yoghurt"))
##     lhs               rhs       support confidence coverage lift     count
## [1] {Roti}         => {Yoghurt} 0.4     0.8        0.5      1.333333 4    
## [2] {Roti, Sambal} => {Yoghurt} 0.1     1.0        0.1      1.666667 1

Interpretasi: Pada bagian ini, kita melakukan penyaringan aturan asosiasi untuk menemukan aturan yang memiliki item tertentu di LHS dan RHS. Fungsi subset digunakan untuk memilih aturan yang memiliki item “Roti” di LHS dan “Yoghurt” di RHS. Hasilnya adalah aturan-aturan yang menunjukkan bahwa jika pelanggan membeli “Roti”, maka kemungkinan besar mereka juga akan membeli “Yoghurt”.

##8. Rules dengan parameter support

mba2= apriori(transaksi, parameter = list(supp = 0.1, conf = 0.5))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [16 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
inspect(mba2)
##      lhs                    rhs        support confidence coverage lift     
## [1]  {}                  => {Roti}     0.5     0.5000000  1.0      1.0000000
## [2]  {}                  => {Yoghurt}  0.6     0.6000000  1.0      1.0000000
## [3]  {}                  => {Greentea} 0.8     0.8000000  1.0      1.0000000
## [4]  {Sambal}            => {Yoghurt}  0.2     0.5000000  0.4      0.8333333
## [5]  {Sambal}            => {Greentea} 0.3     0.7500000  0.4      0.9375000
## [6]  {Roti}              => {Yoghurt}  0.4     0.8000000  0.5      1.3333333
## [7]  {Yoghurt}           => {Roti}     0.4     0.6666667  0.6      1.3333333
## [8]  {Roti}              => {Greentea} 0.3     0.6000000  0.5      0.7500000
## [9]  {Yoghurt}           => {Greentea} 0.4     0.6666667  0.6      0.8333333
## [10] {Greentea}          => {Yoghurt}  0.4     0.5000000  0.8      0.8333333
## [11] {Roti, Sambal}      => {Yoghurt}  0.1     1.0000000  0.1      1.6666667
## [12] {Sambal, Yoghurt}   => {Roti}     0.1     0.5000000  0.2      1.0000000
## [13] {Sambal, Yoghurt}   => {Greentea} 0.1     0.5000000  0.2      0.6250000
## [14] {Roti, Yoghurt}     => {Greentea} 0.2     0.5000000  0.4      0.6250000
## [15] {Greentea, Roti}    => {Yoghurt}  0.2     0.6666667  0.3      1.1111111
## [16] {Greentea, Yoghurt} => {Roti}     0.2     0.5000000  0.4      1.0000000
##      count
## [1]  5    
## [2]  6    
## [3]  8    
## [4]  2    
## [5]  3    
## [6]  4    
## [7]  4    
## [8]  3    
## [9]  4    
## [10] 4    
## [11] 1    
## [12] 1    
## [13] 1    
## [14] 2    
## [15] 2    
## [16] 2

Interpretasi: Pada bagian ini, kita menggunakan algoritma Apriori dengan parameter tertentu untuk menemukan aturan asosiasi dalam data transaksi. Parameter supp (support) diatur ke 0.1, yang berarti kita hanya akan mempertimbangkan aturan yang muncul setidaknya dalam 10% dari total transaksi. Parameter conf (confidence) diatur ke 0.5, yang berarti kita hanya akan mempertimbangkan aturan yang memiliki tingkat kepercayaan minimal 50%. Hasilnya adalah sekumpulan aturan yang memenuhi kriteria tersebut.

##9. Filtering part 2

###9a. Dengan %in%

inspect(subset(mba2, (lhs %in% "Greentea" | rhs %in% "Greentea") & lift  
> 1)) 
##     lhs                 rhs       support confidence coverage lift     count
## [1] {Greentea, Roti} => {Yoghurt} 0.2     0.6666667  0.3      1.111111 2

Interpretasi: Pada bagian ini, kita melakukan penyaringan aturan asosiasi untuk menemukan aturan yang memiliki item tertentu di LHS atau RHS. Fungsi subset digunakan untuk memilih aturan yang memiliki item “Greentea” di LHS atau RHS, dan juga memiliki nilai lift lebih dari 1. Hasilnya adalah aturan-aturan yang menunjukkan bahwa jika pelanggan membeli “Greentea”, maka kemungkinan besar mereka juga akan membeli item-item lain yang ada di RHS, dengan tingkat asosiasi yang kuat (lift > 1).

###9b. Dengan %ain%

inspect(subset(mba2, (lhs %ain% c("Roti", "Sambal")))) 
##     lhs               rhs       support confidence coverage lift     count
## [1] {Roti, Sambal} => {Yoghurt} 0.1     1          0.1      1.666667 1

Interpretasi: Pada bagian ini, kita melakukan penyaringan aturan asosiasi untuk menemukan aturan yang memiliki item tertentu di LHS. Fungsi subset digunakan untuk memilih aturan yang memiliki item “Roti” atau “Sambal” di LHS. Hasilnya adalah aturan-aturan yang menunjukkan bahwa jika pelanggan membeli “Roti” atau “Sambal”, maka kemungkinan besar mereka juga akan membeli item-item lain yang ada di RHS.

##10. Visualisasi rules dengan graph

library(arulesViz)
mba <- apriori(transaksi, parameter = list(supp = 0.1, confidence = 0.5))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [16 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
plot(subset(mba, lift > 1), method = "graph")  

Interpretasi: Pada visualisasi graph, setiap node mewakili itemset, dan tepi (edge) antara node menunjukkan adanya asosiasi antara itemset tersebut. Ukuran node menunjukkan jumlah aturan yang mengandung item tersebut, sedangkan ketebalan tepi menunjukkan kekuatan asosiasi (lift) antara itemset. Dengan demikian, kita dapat dengan mudah mengidentifikasi hubungan antar item dalam transaksi.

#Contoh 7.10 CLUSTER DBSCAN DAN OPTIC

##DBSCAN

#install.packages("dbscan")
#generate sampel data 
library(dbscan) 
## 
## Attaching package: 'dbscan'
## The following object is masked from 'package:stats':
## 
##     as.dendrogram
set.seed(42) 
x<-matrix(rnorm(200, sd=0.3),ncol=2) 
x<-rbind(x, matrix(rnorm(100, mean=2, sd=0.5), ncol=2)) 

#create DBSCAN object 
dbscan_res<-dbscan(x,eps=0.5,MinPts=5) 
## Warning in dbscan(x, eps = 0.5, MinPts = 5): converting argument MinPts (fpc)
## to minPts (dbscan)!
#Get the predicted labels and core sample indices 
labels<-dbscan_res$cluster 
core_samples_mask<-dbscan_res$cluster!=0 

#plot the result 
plot(x,col=labels)

Pada contoh ini, data simulasi dibangkitkan menggunakan fungsi ‘rnorm’. Kemudian buat DBSCAN object menggunakan fungsi ‘dbscan’ dari library dbscan dengan hyperparameter yang telah ditentukan (dalam hal ini, eps=0.5 dan minPts=5). Hasilnya kita akan memperoleh label klaster hasil prediksi dengan melihat pada atribut cluster dan dari atribut cluster juga kita bisa melihat mana sampel yang merupakan core dan noise (memiliki nilai 0). Terakhir, kita plot hasilnya dengan fungsi ‘plot’.

##OPTICS

d<-dist(x) 
res<-optics(d, minPts=5) 
plot(res)

labels2<-extractDBSCAN(res, eps_cl = 0.5) 
plot(x, col=labels2$cluster+1) 

Pertama buatlah terlebih dahulu matriks jarak dengan menggunakan fungsi ‘dist’. Matriks jarak ini dijadikan input pada fungsi optics bersama dengan parameter minPts=5. Kemudian hasl dari fungsi optics (object res) kita visualisasikan dengan plot untuk menentukan jumlah klaster dari menetapkan epsilon. Dari plot terlihat bahwa ada 2 klaster yang terbentuk. Sehingga bisa dipilih nilai epsilon 0.5. Berikutnya kita ekstrak hasil klaster dengan fungsi ‘extractDBSCAN’ dengan parameter eps_cl=0.5. Hasilnya adalah label klaster yang bisa kita plot kembali.

#Contoh 7.11 DBSCAN dengan package fpc

#install.packages("fpc")
library(fpc) 
## 
## Attaching package: 'fpc'
## The following object is masked from 'package:dbscan':
## 
##     dbscan
#generate sampe data 
set.seed(123) 
x<-cbind(x1=rnorm(50), x2=rnorm(50)) 
# Run DBSCAN with epsilon =0.15 
dbscan_output<-fpc::dbscan(x,eps=0.15) 
labels3 = dbscan_output$cluster  
plot(x, col = labels)

Pada contoh ini, kita menggunakan package fpc untuk melakukan DBSCAN. Pertama, kita buat data sampel dengan fungsi ‘rnorm’. Kemudian, kita jalankan DBSCAN dengan fungsi ‘dbscan’ dari package fpc dengan parameter eps=0.15. Hasilnya adalah label klaster yang bisa kita plot.