Data Canopy Cover yang digunakan dapat didownload pada Folder “…” Berikut merupakan package yang digunakan dalam pre-processing data menggunakan RStudio:
# install.packages(c("packages_name"))
# library(dbscan, readxl, dplyr, e1071, Boruta, dismo, caret, raster, openxlsx)
library(openxlsx)
setwd('C:/Users/Felix/Dropbox/FORESTS2020/00AllData/')
load_data <- read.xlsx("Data Canopy Cover.xlsx")
head(load_data)
## FID Shape Class kategori frci Band_1 Band_2 Band_3 Band_4
## 1 544 Point 1 Sangat Rendah 0 0.119028 0.096263 0.088627 0.067901
## 2 684 Point 1 Sangat Rendah 0 0.113155 0.089109 0.072956 0.050277
## 3 686 Point 1 Sangat Rendah 0 0.124964 0.104814 0.095479 0.100075
## 4 723 Point 1 Sangat Rendah 0 0.120681 0.099382 0.089137 0.079335
## 5 739 Point 1 Sangat Rendah 0 0.113995 0.090231 0.077047 0.051841
## 6 742 Point 1 Sangat Rendah 0 0.114693 0.091302 0.083048 0.052883
## Band_5 Band_6 Band_7 Band_9
## 1 0.356388 0.246095 0.124561 0.001402
## 2 0.299869 0.164176 0.080432 0.001548
## 3 0.237620 0.215206 0.135871 0.001697
## 4 0.288038 0.236145 0.133857 0.001737
## 5 0.352246 0.195241 0.088700 0.001420
## 6 0.381807 0.207427 0.092613 0.001679
summary(load_data)
## FID Shape Class kategori
## Min. : 0.0 Length:1047 Min. : 1.00 Length:1047
## 1st Qu.: 261.5 Class :character 1st Qu.: 4.00 Class :character
## Median : 523.0 Mode :character Median : 7.00 Mode :character
## Mean : 523.0 Mean : 6.18
## 3rd Qu.: 784.5 3rd Qu.: 9.00
## Max. :1046.0 Max. :10.00
## frci Band_1 Band_2 Band_3
## Min. :0.0000 Min. :0.1051 Min. :0.08066 Min. :0.06139
## 1st Qu.:0.3355 1st Qu.:0.1112 1st Qu.:0.08642 1st Qu.:0.06958
## Median :0.6408 Median :0.1143 Median :0.08960 Median :0.07287
## Mean :0.5680 Mean :0.1139 Mean :0.08948 Mean :0.07382
## 3rd Qu.:0.8128 3rd Qu.:0.1162 3rd Qu.:0.09168 3rd Qu.:0.07679
## Max. :1.0000 Max. :0.1360 Max. :0.11716 Max. :0.09990
## Band_4 Band_5 Band_6 Band_7
## Min. :0.03673 Min. :0.1778 Min. :0.08948 Min. :0.03179
## 1st Qu.:0.04273 1st Qu.:0.2993 1st Qu.:0.13215 1st Qu.:0.05226
## Median :0.04547 Median :0.3253 Median :0.15375 Median :0.06280
## Mean :0.04873 Mean :0.3236 Mean :0.15736 Mean :0.06931
## 3rd Qu.:0.05039 3rd Qu.:0.3508 3rd Qu.:0.17137 3rd Qu.:0.07383
## Max. :0.10473 Max. :0.4551 Max. :0.29533 Max. :0.21130
## Band_9
## Min. :0.000918
## 1st Qu.:0.001532
## Median :0.001736
## Mean :0.001762
## 3rd Qu.:0.001960
## Max. :0.002959
Setelah data file berhasil diload selanjutnya data dipilih sesuai dengan kebutuhan. Dalam kasus ini atribut data yang akan digunakan adalah (“Class, frci dan Band_2 sampai Band_7”). Kemudian data yang telah dipilih berdasarkan atribut dilakukan balancing berdasarkan jumlah Class yang memiliki nilai frekuensi terkecil. Tahapan seleksi dan balancing data sebagai berikut:
# Tahapan seleksi dan Balancing Data
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data <- load_data[, c("Class", "frci", "Band_2", "Band_3",
"Band_4", "Band_5", "Band_6", "Band_7")]
number <- data %>%
group_by(Class) %>%
summarize(n())
sample <- data %>%
group_by(Class) %>%
sample_n(min(number$`n()`))
head(sample)
## # A tibble: 6 x 8
## # Groups: Class [1]
## Class frci Band_2 Band_3 Band_4 Band_5 Band_6 Band_7
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 0.0349 0.0946 0.0850 0.0626 0.353 0.230 0.116
## 2 1 0.0405 0.0901 0.0781 0.0547 0.324 0.186 0.0905
## 3 1 0.0544 0.0937 0.0850 0.0580 0.375 0.234 0.110
## 4 1 0.0783 0.105 0.0964 0.0964 0.249 0.227 0.139
## 5 1 0.0769 0.0930 0.0782 0.0583 0.280 0.165 0.0861
## 6 1 0.0248 0.101 0.0849 0.0875 0.179 0.233 0.211
sample <- sample[-1] ## Hapus column Class
head(sample)
## # A tibble: 6 x 7
## frci Band_2 Band_3 Band_4 Band_5 Band_6 Band_7
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.0349 0.0946 0.0850 0.0626 0.353 0.230 0.116
## 2 0.0405 0.0901 0.0781 0.0547 0.324 0.186 0.0905
## 3 0.0544 0.0937 0.0850 0.0580 0.375 0.234 0.110
## 4 0.0783 0.105 0.0964 0.0964 0.249 0.227 0.139
## 5 0.0769 0.0930 0.0782 0.0583 0.280 0.165 0.0861
## 6 0.0248 0.101 0.0849 0.0875 0.179 0.233 0.211
Data yang telah diproses dalam Langkah 2, selanjutnya dilakukan pembulatan 3 angka dibelakang koma dan proses membuang outlier atau data pencilan menggunakan algoritma DBSCAN. Proses dapat dilihat seperti dibawah ini:
library(dbscan)
lst <- as.data.frame(lapply(sample, function(x) round(x, 3)))
head(lst)
## frci Band_2 Band_3 Band_4 Band_5 Band_6 Band_7
## 1 0.035 0.095 0.085 0.063 0.353 0.230 0.116
## 2 0.041 0.090 0.078 0.055 0.324 0.186 0.091
## 3 0.054 0.094 0.085 0.058 0.375 0.234 0.110
## 4 0.078 0.105 0.096 0.096 0.249 0.227 0.139
## 5 0.077 0.093 0.078 0.058 0.280 0.165 0.086
## 6 0.025 0.101 0.085 0.087 0.179 0.233 0.211
dataSample <- lst
head(dataSample)
## frci Band_2 Band_3 Band_4 Band_5 Band_6 Band_7
## 1 0.035 0.095 0.085 0.063 0.353 0.230 0.116
## 2 0.041 0.090 0.078 0.055 0.324 0.186 0.091
## 3 0.054 0.094 0.085 0.058 0.375 0.234 0.110
## 4 0.078 0.105 0.096 0.096 0.249 0.227 0.139
## 5 0.077 0.093 0.078 0.058 0.280 0.165 0.086
## 6 0.025 0.101 0.085 0.087 0.179 0.233 0.211
# Nilai Epsilon yang digunakan 0.045
kNNdistplot(dataSample, k = 5)
change_data <- 0.045
abline(h = change_data, col = "red", lty = 2)
res <- dbscan(dataSample, eps = change_data, minPts = 5)
# Ploting sebaran data FRCI terhadap nilai Band Reflektan
pairs(dataSample, col = res$cluster + 1L)
Dalam proses ini kita telah memperoleh new data frame (“cleanall”) yang kita angap bebas dari outlier atau data pencilan, sehingga data frame inilah yang akan digunakan untuk proses membuat model menggunakan SVR.
dataSample$cluster <- res$cluster
cleanall <- dataSample %>% filter(cluster > 0)
# Ploting data sebelum dan sesudah dihapus outlier
par(mfrow=c(1,2))
plot(dataSample$Band_4, dataSample$frci, xlab = 'Band 4 Reflektan',
ylab = 'Nilai FRCI', main = 'Sebelum')
plot(cleanall$Band_4, cleanall$frci, xlab = 'Band 4 Reflektan',
ylab = 'Nilai FRCI', main = 'Sesudah')