0% menganggap dokumen ini bermanfaat (0 suara)
183 tayangan

Tutorial R

Teks ini memberikan tutorial dasar tentang penggunaan bahasa pemrograman R untuk keperluan data mining. Beberapa topik yang dijelaskan antara lain cara instalasi R dan RStudio, penggunaan perintah dasar R seperti membuat vektor dan matriks, operasi matematika, membaca dan mengolah data, visualisasi data, pembuatan fungsi, dan penggunaan loop untuk mengolah data.

Diunggah oleh

Silogism
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
183 tayangan

Tutorial R

Teks ini memberikan tutorial dasar tentang penggunaan bahasa pemrograman R untuk keperluan data mining. Beberapa topik yang dijelaskan antara lain cara instalasi R dan RStudio, penggunaan perintah dasar R seperti membuat vektor dan matriks, operasi matematika, membaca dan mengolah data, visualisasi data, pembuatan fungsi, dan penggunaan loop untuk mengolah data.

Diunggah oleh

Silogism
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 48

TUTORIAL R UNTUK DATA MINING

Budi Santosa

TEKNIK INDUSTRI ITS


PENGANTAR R
R adalah open source. Awalnya dikembangkan sebagai tool statistik. Untuk
menginstall R package Anda bisa ke google dan search install R. Tetapi untuk
tampilan lebih baik disarankan menggunakan RStudio. RStudio ada versi free
dan ada versi bayar. Akan diarahkan ke CRAN link. Anda bisa download sesuai
kebutuhan windows, Linux atau macintosh
Setelah software R dan RStudio diinstall bisa dipanggil dengan mengklik pada
RStudio
Akan muncul 3 window: R Console, Environment dan Direktori.

Beberapa data bisa diambil dari


https://www.biz.uiowa.edu/faculty/jledolter/DataMining/datatext.html
Dalam R console ini kita bisa melakukan eksekusi berbagai perintah.
> a = 42
Jadi kita menugaskan variabel a dengan nilai 42
> A = a * 2 # bahasa R itu case sensitive
Tanda # dalam R berfungsi untuk memberi komen, semua perintah sesudah #
tidak akan dieksekusi.
> a

2
[1] 42
> A
[1] 84

Operasi dalam R
# Contoh membuat vektor beranggotakan 1 sampai 10
> x =c(1:10)
> x
[1] 1 2 3 4 5 6 7 8 9 10
> x[(x>9) | (x<4)] #menampilkan x diatas 9 dan dibawah 4
[1] 1 2 3 10
Mengurutkan bilangan
> x=c(1,3,7,25,5,9,12)
> x
[1] 1 3 7 25 5 9 12
> sort(x)
[1] 1 3 5 7 9 12 25
Membaca data dari file di lokasi tertentu
Misal dari (D:/Data Mining/FuelEfficiency.csv). Tentu saja diasumsikan Anda
sudah punya file bernama FuelEfficiency.csv di hardisk laptop Anda. Commented [PIBSM(1]:
> FE=read.csv(“D:/Data Mining/FuelEfficiency.csv”)
> dim(FE) #menampilkan ukuran matriks/data FE
[1] 38 8
Jadi data ini mempunya 38 baris dan 8 kolom.
Kita bisa menampilakn sebgaian data dengan perintah berikut
> head(FE)
MPG GPM WT DIS NC HP ACC ET
1 16.9 5.917 4.360 350 8 155 14.9 1
2 15.5 6.452 4.054 351 8 142 14.3 1
3 19.2 5.208 3.605 267 8 125 15.0 1

3
4 18.5 5.405 3.940 360 8 150 13.0 1
5 30.0 3.333 2.155 98 4 68 16.5 0
6 27.5 3.636 2.560 134 4 95 14.2 0

Kita bisa memplot gambar grafik hubungan variabel GPM (sumbu Y) dan MPG
(sumbu x).
> plot(GPM~MPG,data=FE) #memplot hubungan GPM dengan MPG
6
5
GPM

4
3

15 20 25 30 35

MPG

4
Bagaimana melakukan loop dalam R?
Loop dalam R bisa dilakukan dengan menggunakan fungsi for
Misalkan kita ingin memeriksa bilangan genap yang ada pada suatu vektor,
berikut ini salah satu caranya.

>x =c(2,5,3,9,8,11,6)
>count = 0
>for (val in x) {
if(val %% 2 == 0)
count = count+1
}
>count
[1] 3

Dalam contoh di atas ini kita ingin menemukan banyaknya bilangan


genap dalam vektor x. Loop diulang 7 kali karena vektor x punya 7
elemen.
Pada setiap iterasi, val mengambil nilai sesuai nilai yang bersesuaian
dengan elemen x. Perintah val %%2==0, artinya nilai yang jika dibagi
2 akan tidak ada sisa.
Kita menggunakan counter untuk menghitung bilangan genap pada x.
Jadi ada 3 bilangan genap yang kita temukan
Selanjutnya bila kita ingin menghitung berapa banyaknya bilangan
ganjil bisa menggunakan perintah berikut
>x = c(2,5,3,9,8,11,6)
>count = 0
> for (val in x) {
+ if(val %% 2 != 0) count = count+1
+ }
> count
[1] 4
Tanda ‘!=’ artinya tidak sama dengan.
Berikut contoh lain cara menggunakan for loop dalam R.

5
> x=cbind(c(1,3,5,2),c(3,2,4,2))
> x
[,1] [,2]
[1,] 1 3
[2,] 3 2
[3,] 5 4
[4,] 2 2

Misalkan kita ingin menghitung jarak dari obyek 1 ke obyek 2 dengan rumus
Euclidean, maka bisa kita kurangi lalu dikuadratkan.

> (x[1,]-x[2,])^2
[1] 4 1
> sum(x[1,]-x[2,])^2)
> sum((x[1,]-x[2,])^2)
[1] 5
> sqrt(sum((x[1,]-x[2,])^2))
[1] 2.236068

Bisa kita gunakan juga perintah singkat


> dist(x[1:2,],'euclidean')
1
2 2.236068

Menghitung semua jarak antar obyek dalam bentuk matriks dengan for loop.
Perhatikan kembali ke matriks x di atas.
> r=dim(x)[1] #mengetahui jumlah baris dari x
>d=matrix(0,r,r) #membuat matriks berukuran r x r dengan nilai tiap sel= 0.
>d
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
[4,] 0 0 0 0
>for (i in 1:4){
+ for (j in 1:4){
+ d[i,j]=sqrt(sum((x[i,]-x[j,])^2))
+ }
+ }
> d
[,1] [,2] [,3] [,4]
[1,] 0.000000 2.236068 4.123106 1.414214
[2,] 2.236068 0.000000 2.828427 1.000000
[3,] 4.123106 2.828427 0.000000 3.605551
[4,] 1.414214 1.000000 3.605551 0.000000
Atau bisa dengan perintah berikut
> dist(x,'euclidean')
1 2 3

6
2 2.236068
3 4.123106 2.828427
4 1.414214 1.000000 3.605551

Fungsi dalam R
Berikut contoh sederhana membuat fungsi dalam R. Fungsi ini akan disimpan
dalam bentuk file dan bisa dipanggil.
> kuadrat = function(x) {
+ return(x^2)
+ }
> kuadrat(4)
[1] 16
> x=3
> kuadrat(x)
[1] 9
> pow = function(x, y) {
+ # function to print x raised to the power y
+ result = x^y
+ print(paste(x,"raised to the power", y, "is", result))
+ }
> pow(2,5)
[1] "2 raised to the power 5 is 32"
Contoh fungsi yang lain
> cek = function(x) {
+ if (x > 0) {
+ hasil = "Positif"
+ }
+ else if (x < 0) {
+ hasil = "Negatif"
+ }
+ else {
+ hasil = "nol"

7
+ }
+ return(hasil)
+ }
> cek(5)
[1] "Positif"
> cek(-2)
[1] "Negatif"
Misalkan di editor R kita tulis script berikut dengan nama coba.R
# komen: ini contoh sebuah script.
y=c(12,15,28,17,18)
x=c(22,39,50,25,18)
yb=mean(y)
xb=mean(x)
plot(x,y)
Lalu kita lakukan di console, perintah berikut
> source("coba.R")
> xb
[1] 30.8
> yb
[1] 18

Contoh lain

8
Kita bisa juga menulis script dalam bentuk function. Misalkan kita kasih nama
roll
roll = function() {
die = 1:6
dice = sample(die, size = 2, replace = TRUE)
sum(dice)
}
Koding ini mengambil sampel berukuran 2 lalu dijumlahkan nilainya.
Simpan dengan nama roll.R
> source("roll.R")
> roll()
[1] 4
> roll()
[1] 6
> roll()
[1] 8
> roll()
[1] 8
> roll()
[1] 6
> roll()
[1] 10
> roll()
[1] 4
> roll()
[1] 10

Cara menulis matriks.

> a=cbind(c(1,2,3),c(4,5,6)) #Matriks kolom


> a
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> b=rbind(c(1,2,3),c(4,5,6)) #Matriks baris
> b
[,1] [,2] [,3]

9
[1,] 1 2 3
[2,] 4 5 6
> c=(1:5)
> c
[1] 1 2 3 4 5
> sum(c)
[1] 15

> x=c(1,2,3,4,5,6)
> x
[1] 1 2 3 4 5 6
> class(x)
[1] "numeric"
> dim(x)=c(2,3)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
Mengakses elemen matriks

Misalkan kita punya matriks x

> x=cbind(c(1,2,3),c(4,5,6),c(7,8,9))

> x

[,1] [,2] [,3]

[1,] 1 4 7

[2,] 2 5 8
[3,] 3 6 9
> x[c(1,2),c(2,3)] #baris 1 dan 2 kolom 2 dan 3
[,1] [,2]
[1,] 4 7
[2,] 5 8
> x[c(3,2),]
[,1] [,2] [,3]
[1,] 3 6 9

10
[2,] 2 5 8
> x[c(1:3),c(2:3)]
[,1] [,2]
[1,] 4 7
[2,] 5 8
[3,] 6 9
> 2*x
[,1] [,2] [,3]
[1,] 2 8 14
[2,] 4 10 16
[3,] 6 12 18
Transpose matriks
> t(x) #transpose matriks x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9

> dim(x) #dimensi matriks x


[1] 3 3
Mencari nilai minumum dan maksimum suatu matriks
> x=matrix(c(1, 3, 0, 4,6,10), nrow = 3, ncol = 2)
> x
[,1] [,2]
[1,] 1 4
[2,] 3 6
[3,] 0 10
> apply(x,1,min) # angka 1 berarti mencari minimum dari baris
[1] 1 3 0
> apply(x,2,min) #angka 2 berarti mencari minimum dari kolom
[1] 0 4
> apply(x,2,max)
[1] 3 10

11
> apply(x,2,sum) #jumlah kolom
[1] 4 20
> apply(x,2,mean) # mencari rata-rata kolom
[1] 1.333333 6.666667
> apply(x,2,sd) #standar deviasi
[1] 1.527525 3.055050
Menghitung rata-rata kolom dan baris bisa juga dilakukan
dengan fungsi colMeans dan rowMeans.
> x = matrix(c(1, 3, 0, 4,6,10), nrow = 3, ncol = 2)
> x
[,1] [,2]
[1,] 1 4
[2,] 3 6
[3,] 0 10
> rowMeans(x) #menghitung rata-rata baris
[1] 2.5 4.5 5.0
> colMeans(x) #menghitung rata-rata kolom
[1] 1.333333 6.666667
Menghitung jarak antar obyek
x=cbind(c(1,3,2,4),c(2,5,0,5))
> x
[,1] [,2]
[1,] 1 2
[2,] 3 5
[3,] 2 0
[4,] 4 5
> d1=matrix(0,4,4)
> for (i in 1:4){
+ for (j in 1:4){
+ d1[i,j]=sum(abs(x[i,]-x[j,]))
+ } for (i
+ }
> d1
[,1] [,2] [,3] [,4]
[1,] 0 5 3 6
[2,] 5 0 6 1
[3,] 3 6 0 7
[4,] 6 1 7 0
> d2=matrix(0,4,4)
> for (i in 1:4){
+ for (j in 1:4){
+ d2[i,j]=sqrt(sum((x[i,]-x[j,])^2))
+ }
+ }
> d2
[,1] [,2] [,3] [,4]

12
[1,] 0.000000 3.605551 2.236068 4.242641
[2,] 3.605551 0.000000 5.099020 1.000000
[3,] 2.236068 5.099020 0.000000 5.385165
[4,] 4.242641 1.000000 5.385165 0.000000
Quadratic programming

> Dmat = matrix(0,3,3)


> diag(Dmat) = 1
> dvec = c(0,5,0)
> Amat = matrix(c(-4,-3,0,2,1,0,0,-2,1),3,3)
> bvec = c(-8,2,0)
> solve.QP(C,d,A,b)
$solution
[1] 0.4761905 1.0476190 2.0952381

$value
[1] -2.380952

$unconstrained.solution
[1] 0 5 0

$iterations
[1] 3 0

$Lagrangian
[1] 0.0000000 0.2380952 2.0952381

$iact
[1] 3 2

Perkalian matrix
> dx=-matrix(c(1,1,-1,1,1,-1,-1,-1),nrow=4)
> dx
[,1] [,2]
[1,] 1 1
[2,] 1 -1
[3,] -1 -1
[4,] 1 -1
> dx%*%t(dx) #perkalian matrix dx dengan dx’ (transpose dx)
[,1] [,2] [,3] [,4]
[1,] 2 0 -2 0
[2,] 0 2 0 2
[3,] -2 0 2 0
[4,] 0 2 0 2
> k=(dx%*%t(dx)+1)^2
> k
[,1] [,2] [,3] [,4]
[1,] 9 1 1 1
[2,] 1 9 1 9
[3,] 1 1 9 1
[4,] 1 9 1 9

> y=matrix(c(1,-1,-1,1),nrow=4)
> y

13
[,1]
[1,] 1
[2,] -1
[3,] -1
[4,] 1

> for (i in 1:4){


+ for (j in 1:4){
+ h[i,j]=y[i]*y[j]%*%k[i,j]
+ }
+ }
> h
[,1] [,2] [,3] [,4]
[1,] 9 -1 -1 1
[2,] -1 9 1 -9
[3,] -1 1 9 -1
[4,] 1 -9 -1 9
Menggambar grafik
>require(graphics)
# a 2-dimensional example
>x =rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
#generate data dalam 2 kolom, dengan rata-rata 0 dan standar
deviasi 0.3 pada 50 baris pertama dan rata-rata 1 dan standar
deviasi 0.3 untuk 50 baris berikutnya.
>colnames(x) = c("x", "y")
Melakukan klastering
> cl = kmeans(x, 2)
> plot(x, col = cl$cluster)
> points(cl$centers, col = 1:2, pch = 8, cex = 2)
#pch jenis karakter untuk mewakili pusat klaster,dalam hal ini bintang. Sedang
cex menunjukkan ukuran karakter yang dimaksud dalam pch. Jika cex=3 maka
ukuran karakter akan makin besar.

14
plot(v,type,col,xlab,ylab)
• v vektor yang berisi nilai yang akan diplot.
• type bisa diisi "p" untuk titik, atau, "l" untuk menggambar garis atau "o"
untuk menggambar garis dan ttik.
• xlab is label untuk sumbu x.
• ylab is label untuk sumbu y.
• main untuk memberi nama grafik.
• col is used to give colors to both the points and lines
>x =c(1,4,3,6,7,5)
> x
[1] 1 4 3 6 7 5
> plot(x,type="o",col="blue",xlab="sumbu x",ylab="sumbu
y",main="coba")

15
Untuk menghentikan eksekusi program bisa menggunakan Ctrl+z
Membersihkan layar console tekan Ctrl+L
> BH = read.csv("D:/data mining/Boston_Housing.csv")
#membaca file bernama Boston_Housing di direktori D subdirecto
ry data mining dan disimpan sebagai BH
> head(BH)
> View(BH)
> BH[1:10,]
#menampilkan baris 1 sampai 10 semua kolom
> BH[1:3,c(1,3,5)]
# menampilkan baris 1 sampai 3 kolom 1,3 dan 5.
BH$CRIM[1:10]
#Menampilkan 10 baris pertama kolom 1 dari BH yang berlabel CRIM
[1] 0.00632 0.02731 0.02729 0.03237 0.06905 0.02985 0.08829 0.14455 0.21124
0.17004
> xx=BH$CRIM[1:10]

16
> mean(xx) # Menghitung rata-rata
[1] 0.080631
> BH$AGE[1:15] # menampilkan kolom berlabel AGE untuk 15 baris pertama
[1] 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100.0 85.9 94.3 82.9
39.0 61.8
[15] 84.5

Melakukan sampling
> x=1:12
> sample(x,5)
[1] 4 12 9 1 7

Melakukan sampling dari data BH. Kita ingin mengambil 5 sampel dari data BH.
> s=sample(row.names(BH),5)
> s
[1] "368" "277" "477" "307" "110"
Angka-angka ini menunjukkan baris yang terpilih dari data BH.
> BH[s,]
CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT
MEDV
368 13.52220 0 18.10 0 0.631 3.863 100.0 1.5106 24 666 20.2 131.42 13
.33 23.1
277 0.10469 40 6.41 1 0.447 7.267 49.0 4.7872 4 254 17.6 389.25 6
.05 33.2
477 4.87141 0 18.10 0 0.614 6.484 93.6 2.3053 24 666 20.2 396.21 18
.68 16.7
307 0.07503 33 2.18 0 0.472 7.420 71.9 3.0992 7 222 18.4 396.90 6
.47 33.4
110 0.26363 0 8.56 0 0.520 6.229 91.2 2.5451 5 384 20.9 391.23 15
.55 19.4
> s=sample(row.names(BH),5, prob=ifelse(BH$AGE>55,0.9,0.01))
> BH[s,]
CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT MEDV
63 0.11027 25 5.13 0 0.453 6.456 67.8 7.2255 8 284 19.7 396.90 6.73 22.2
493 0.11132 0 27.74 0 0.609 5.983 83.5 2.1099 4 711 20.1 396.90 13.35 20.1
415 45.74610 0 18.10 0 0.693 4.519 100.0 1.6582 24 666 20.2 88.27 36.98 7.0
445 12.80230 0 18.10 0 0.740 5.854 96.6 1.8956 24 666 20.2 240.52 23.79 10.8
429 7.36711 0 18.10 0 0.679 6.193 78.1 1.9356 24 666 20.2 96.73 21.52 11.0

> x= c(6:-4)
> sqrt(ifelse(x>=0,x,NA))
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NA NA

17
[10] NA NA

> summary(BH)

Memberikan ringkasan statistik untuk setiap kolom.


Memilah training data dan testing data
>tr =sample(row.names(BH),dim(BH)[1]*0.6) #Mengambil 0.6 kali
504 (jumlah baris data BH) secara random
> trx=BH[tr,]
> dim(trx)
[1] 303 14
> ts=setdiff(row.names(BH),tr)
Memilih data yang belum dipakai di dalam training data
> testx=BH[ts,]
> dim(testx)
[1] 203 14

Menggambar grafik dari data cars


>data(cars)
>head(cars)
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
> scatter.smooth(x=cars$speed, y=cars$dist, main="Jarak ~ Kecepatan")

18
BoxPlot – mengecek outliers
Umumnya sembarang titik yang terletak di luar 1.5 * interquartile-range (1.5 * IQR)
dianggap sebagai outlier, dimana, IQR dihitung sebagai jarak antara nilai 25th
percentile dan 75th percentile untuk variabel tersebut.

19
Menghitung korelasi
> cor(cars$speed, cars$dist)
[1] 0.8068949
Regresi linier
> modelreg = lm(dist ~ speed, data=cars)
> modelreg
Call:
lm(formula = dist ~ speed, data = cars)

Coefficients:
(Intercept) speed
-17.579 3.932

Dist=-17.579+3.932 speed
Call:
lm(formula = dist ~ speed, data = cars)

Residuals:
Min 1Q Median 3Q Max
-29.069 -9.525 -2.272 9.215 43.201

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791 6.7584 -2.601 0.0123 *
speed 3.9324 0.4155 9.464 1.49e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom


Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12

Memilih sampel training dan testing.


>tr=sample(row.names(cars),dim(cars)[1]*0.6)
> trx=cars[tr,]
> dim(trx)
[1] 30 2

> ts= setdiff(row.names(cars),tr)

20
Memilih sampel untuk tes selain training set
> tsx=-cars[ts,]
> modelreg =lm(dist ~ speed, data=trx)
Membuat model regersi dari training data
> modelreg

Call:
lm(formula = dist ~ speed, data = trx)

Coefficients:
(Intercept) speed
-22.586 4.252
Melakukan prediksi dengan set data testing

> pred=predict(modelreg,tsx)
> dim(tsx)
[1] 20 2
Bisa juga kita sajikan dengan perintah berikut
> hasil = data.frame(aktual=tsx$dist, prediksi=pred, resid ual=tsx$d
ist-pred)
> plot(tsx$dist, type="o", col="blue", pch="o" )
>
> points(pred, col="red", pch="*")
> lines(pred, col="red",lty=2)

21
> hasil
aktual prediksi residual
1 2 -5.578397 7.5783967
6 10 15.680695 -5.6806955
9 34 19.932514 14.0674861
10 17 24.184332 -7.1843323
14 24 28.436151 -4.4361508
19 46 32.687969 13.3120308
20 26 36.939788 -10.9397876
23 80 36.939788 43.0602124
25 26 41.191606 -15.1916061
28 40 45.443424 -5.4434245
31 50 49.695243 0.3047571
33 56 53.947061 2.0529387
34 76 53.947061 22.0529387
38 68 58.198880 9.8011202
40 48 62.450698 -14.4506982
41 52 62.450698 -10.4506982
43 64 62.450698 1.5493018
44 66 70.954335 -4.9543351
45 54 75.206153 -21.2061535
46 70 79.457972 -9.4579719

22
Bisa juga dilakukan dengan perintah
> hasil = cbind(aktual=tsx$dist, prediksi=pred, residual=tsx$dist-pred)
> korelasi =- cor(hasil)
> korelasi
aktual prediksi
aktual 1.0000000 0.7733205
prediksi 0.7733205 1.0000000
korelasi antara hasil prediksi dan aktualnya 0.77

> plot(tsx$dist, type="o", col="blue", pch="o" )


> points(pred, col="red", pch="*")
> lines(pred, col="red",lty=2)

Regresi Logistik
Download data Universal bank dari web
https://www.biz.uiowa.edu/faculty/jledolter/DataMining/dataexercises.htm
l
> bank=read.csv("D:/data mining/UniversalBank.csv")
> bank=bank[,-c(1,5)]
> bank$Education=factor(bank$Education,levels=c(1,2,3),labels
=c("s1","s2","profesional"))
> tr=sample(5000,5000*0.6)
> trx=bank[tr,]
> tsx=bank[-tr,]
> logreg=glm(PersonalLoan ~.,data=trx, family="binomial")
> options(scipen=999)
> summary(logreg)

Call:
glm(formula = PersonalLoan ~ ., family = "binomial", data = trx)

Deviance Residuals:
Min 1Q Median 3Q Max
-2.2465 -0.1766 -0.0603 -0.0186 3.9663

Coefficients:
Estimate Std. Error z value Pr(>|z|)

23
(Intercept) -13.8224976 2.4595636 -5.620 0.0000000191 ***
Age 0.0065770 0.0904191 0.073 0.942014
Experience -0.0008514 0.0899943 -0.009 0.992452
Income 0.0642534 0.0042196 15.227 < 0.0000000000000002 ***
Family 0.5665415 0.1040319 5.446 0.0000000516 ***
CCAvg 0.1423635 0.0590221 2.412 0.015864 *
Educations2 4.2938475 0.3705575 11.588 < 0.0000000000000002 ***
Educationprofesional 4.2709906 0.3734640 11.436 < 0.0000000000000002 ***
Mortgage 0.0007331 0.0008139 0.901 0.367774
SecuritiesAccount -0.8494808 0.3861650 -2.200 0.027822 *
CDAccount 3.9358902 0.4468827 8.807 < 0.0000000000000002 ***
Online -0.7674581 0.2239380 -3.427 0.000610 ***
CreditCard -1.0843350 0.2810094 -3.859 0.000114 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 1847.42 on 2999 degrees of freedom


Residual deviance: 653.17 on 2987 degrees of freedom
AIC: 679.17

Number of Fisher Scoring iterations: 8

> lgpred=predict(logreg,trs[,-8],type="response")
Kita lihat tampilan 5 baris pertama hasil prediksi dan data aktual.
>data.frame(aktual=trs$PersonalLoan[1:5],prediksi=lgpred[1:5]
)
aktual prediksi
1 0 0.0001410804
11 0 0.5491508903
13 0 0.2486321925
14 0 0.0086363773
17 1 0.8882458130

#trs[,-8] berarti menghilangkan variabel ke 8 (personal loan) dari set testing.


Peluang di atas 0.5 dianggap 1. Jadi dari hasil prediksi ini ada satu hasil yang kurang
tepat yakni data ke 11.

24
Transformasi Data
1. Centering
Dengan centering, kita mengurangi setiap data dengan rata-rata dari setiap
atribute yang ada. Misalkan, kita ingin memtransformasikan data dalam
suatu kolom dengan cara centering, maka bisa kita gunakan rumus berikut.

𝑋̂ = 𝑋 − 𝑋̅ (3.1)

Dimana 𝑋̂ adalah vektor hasil setelah centering, 𝑋 adalah vektor kolom


aslinya, dan 𝑋̅ adalah rata-rata dari kolom yang bersangkutan.

2. Standarisasi (normaliasi z-score)


Setelah centering, bisa juga dilanjutkan dengan proses berikutnya, yaitu
membagi setiap data yang sudah dicentering dengan standar deviasi dari
atribute yang bersangkutan.

𝑋 − 𝑋̅
𝑋̂ = (3.2)
𝜎𝑥

3. Scaling
Scaling adalah prosedur merubah data sehingga berada dalam skala
tertentu. Skala ini bisa antara [0, 1], [-1, 1], atau skala lain yang
dikehendaki. Scaling data ke range [0,1] biasanya disebut dengan
normalisasi min-max. Misalkan, kita punya data dengan skala tertentu,
maka kita bisa mengkonversi data tersebut ke dalam skala [0, 1]. Dalam
hal ini, batas bawah (BB) adalah 0, dan batas atas (BA) adalah 1. Jika nilai
maksimum tiap kolom adalah 𝑋𝑚𝑎𝑥 dan nilai minimumnya adalah 𝑋𝑚𝑖𝑛 ,
untuk mengubah data ke skala baru, maka untuk utuk setiap datanya
bisa dilakukan operasi sebagai berikut:

𝑋 − 𝑋𝑚𝑖𝑛
𝑋̂ = ∗ (𝐵𝐴 − 𝐵𝐵) + 𝐵𝐵 (3.3)
𝑋𝑚𝑎𝑥 − 𝑋𝑚𝑖𝑛

25
Sebagai contoh, jika kita ingin data kita berada dalam skala [-1, 1], maka
bisa kita memakai rumus berikut:

𝑋 − 𝑋𝑚𝑖𝑛
𝑋̂ = ∗ (1 − (−1)) + (−1) (3.4)
𝑋𝑚𝑎𝑥 − 𝑋𝑚𝑖𝑛

Melakukan centering
> x=cbind(c(1,3,5,4),c(3,2,4,6))
> x
[,1] [,2]
[1,] 1 3
[2,] 3 2
[3,] 5 4
[4,] 4 6
> m=colMeans(x)
> m
[1] 3.25 3.75
>x-t(replicate(4,m)) # kita ulang rata-rata sebanyak 4 kali
lalu ditranspose
[,1] [,2]
[1,] -2.25 -0.75
[2,] -0.25 -1.75
[3,] 1.75 0.25
[4,] 0.75 2.25
Mengurangi dengan minimumnya
>xmin=apply(x,2,min)
> xc=x-t(replicate(4,xmin))
> xc
[,1] [,2]
[1,] 0 1
[2,] 2 0
[3,] 4 2
[4,] 3 4
Berikut bagaimana melakukan preprocess dilakukan dalam R.
>mower=read.csv(“D:/data mining/RidingMowers.csv”)
>> head(mower)
Income Lot_Size Ownership
1 60.0 18.4 Owner
2 85.5 16.8 Owner
3 64.8 21.6 Owner
4 61.5 20.8 Owner
5 87.0 23.6 Owner
6 110.1 19.2 Owner

>x=mower[,1:2] # mengambil semua baris dari kolom 1 dan 2.


>xb=colMeans(x) #menghitung rata-rata tiap kolom
> xb
Income Lot_Size

26
68.4375 18.9500
>xc=x-t(replicate(24,xb) #mengurangi setiap titik data dengan rata-rata ko
lomnya. Atau sering disebut centering data, data dikurangi dengan rata-rata kolom
nya
> head(xc)
Income Lot_Size
1 -8.4375 -0.55
2 17.0625 -2.15
3 -3.6375 2.65
4 -6.9375 1.85
5 18.5625 4.65
6 41.6625 0.25
Melakukan normalisasi/standarisasi
>Install.packages(matrixStats) #perlu paket lain untuk diinstal
>library(matrixStats)
>xs=-matrix(x)

> s=colSds(xs) # menghitung standar deviasi dari matrix xs


> s
[1] 19.793144 2.428275
> xc/s #melakukan standarisasi

Income Lot_Size
[1,] -0.42628398 -2.52802188
[2,] 27.40628110 -0.88540202
[3,] -0.18377576 -2.36634973
[4,] 17.52272368 0.76185755
[5,] 0.93782475 -2.26530464
[6,] 37.53692745 0.10295372

27
Klastering
> data(iris)
> ir=iris[,1:4}
> hasil=kmeans(ir,centers=3)
> hasil
K-means clustering with 3 clusters of sizes 50, 62, 38
Cluster means:
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.006000 3.428000 1.462000 0.246000
2 5.901613 2.748387 4.393548 1.433871
3 6.850000 3.073684 5.742105 2.071053
Clustering vector:
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2
[56] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3 3 3
[111] 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3 3 3
2 3 3 2
Within cluster sum of squares by cluster:
[1] 15.15100 39.82097 23.87947
(between_SS / total_SS = 88.4 %)
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss
" "betweenss" "size"
[8] "iter" "ifault"
> hasil$centers
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.901613 2.748387 4.393548 1.433871
2 6.850000 3.073684 5.742105 2.071053
3 5.006000 3.428000 1.462000 0.246000
> hasil$withinss
[1] 39.82097 23.87947 15.15100
> hasil$tot.withinss
[1] 78.85144
hasil$betweenss
[1] 602.5192
> hasil$totss
[1] 681.3706

Menentukan jumlah klaster

Pertama tentukan nilai sum square within (SSW) yang cukup besar, lalu kita coba 2
sampai 15 jumlah klaster.
Kita plot dimana SSW mulai turun dan stabil. Tentu saja semakin banyak klaster se
makin kecil SSW, tapi jika penurunan sudah tidak signifikan bisa kita stop.

> wss = (nrow(iriss)-1)*sum(apply(iris,2,var))

> wss
[1] 596
> for (i in 2:15) wss[i] = sum(kmeans(iris,centers=i)$withins
s)
> plot(1:15, wss, type="b", xlab="Number of Clusters",ylab="W
ithin groups sum of squares")

28
Menampilkan hasil klaster
>iriss = data.frame(ir, fit$cluster)
>head(iriss)
Sepal.Length Sepal.Width Petal.Length Petal.Width fit.cluster
1 5.1 3.5 1.4 0.2 1
2 4.9 3.0 1.4 0.2 1
3 4.7 3.2 1.3 0.2 1
4 4.6 3.1 1.5 0.2 1
5 5.0 3.6 1.4 0.2 1
6 5.4 3.9 1.7 0.4 1

>fit = kmeans(ir, 3)
>library(cluster)
> clusplot(ir, fit$cluster, color=TRUE, shade=TRUE,
+ labels=2, lines=0)

29
Berikut ini adalah implementasi klastering dengan metode hirarkis dalam
bahasa R. Data yang akan kita klaster adalah matriks x sebagai berikut:
> x=cbind(c(10,20,30,30,5),c(5,20,10,15,10))
>d = dist(x, method = "euclidean") # distance matrix
d
1 2 3 4
2 18.027756
3 20.615528 14.142136
4 22.360680 11.180340 5.000000
5 7.071068 18.027756 25.000000 25.495098

> hasil= hclust(d, method="centroid")


> plot(hasil) # display dendogram

30
1 2
2,5 4,5
𝑋= 2 2
4 1,5
[ 4 2,5]

> x
[,1] [,2]
[1,] 1.0 2.0
[2,] 2.5 4.5
[3,] 2.0 2.0
[4,] 4.0 1.5
[5,] 4.0 2.5
> d = dist(x, method = "euclidean") # distance matrix
1 2 3 4
2 2.915476
3 1.000000 2.549510
4 3.041381 3.354102 2.061553
5 3.041381 2.500000 2.061553 1.000000

> hasil= hclust(d, method="centroid")


> plot(hasil)

31
> d = dist(iris, method = "euclidean") # distance matrix
> hasil= hclust(d, method="ward.D")
> plot(hasil) # display dendogram
> groups = cutree(hasil, k=3) # cut tree into 3 clusters
> # gambarkan dendogram dengan batas warna merah antara 3 kla
ster
> rect.hclust(hasil, k=3, border="red")
> hasil= hclust(d, method="complete") #linkage kita ganti den
gan complete linkage
> plot(hasil) # display dendogram
> groups = cutree(hasil, k=3) # cut tree into 3 clusters
> # draw dendogram with red borders around the 3 clusters
> rect.hclust(hasil, k=3, border="red")

32
Dengan menjalankan kode di atas, kita akan mendapatkan output sebagai
berikut.
x=cbind(c(1,2.5,2,4,4),c(2,4.5,2,1.5,2.5))

Adapun hasil klastering data X di pyton dan di Matlab mendapatkan hasil yang
sama, hanya berbeda indeks mulainya saja. Python indeksnya dimulai dari 0,
sedangkan Matlab dimulai dari 1.

Implementasi dengan R
Discriminat analysis bisa kita terapkan pada data Iris.
>data("iris")
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa

33
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
> tr=sample(150,150*0.8) #ambil sampel secara acak
> trx=iris[tr,] #training sample
> tsx=iris[-tr,] #testing sample
> library(MASS)
> model = lda(Species~., data = trx) # membangun model LDA
Call:
lda(Species ~ ., data = trx)

Prior probabilities of groups:


setosa versicolor virginica
0.29 0.37 0.34

Group means:
Sepal.Length Sepal.Width Petal.Length Petal.Width
setosa 5.000000 3.365517 1.486207 0.2551724
versicolor 5.978378 2.756757 4.286486 1.3351351
virginica 6.632353 3.005882 5.614706 2.0500000

Coefficients of linear discriminants:


LD1 LD2
Sepal.Length 0.994772 -0.2701843
Sepal.Width 1.299149 2.6664405
Petal.Length -2.244670 -0.3729624
Petal.Width -2.688090 1.7868782

Proportion of trace:
LD1 LD2
0.9884 0.0116

>tsy = predict(model, newdata = tsx) #melakukan prediksi


> tsy$class #hasil LDA
>beda=data.frame(iris[-tr,5],tsy$class) # membandingan hasil
prediksi dan label asli

> beda
iris..tr..5. tsy.class
1 setosa setosa
2 setosa setosa
3 setosa setosa
4 setosa setosa
5 setosa setosa
6 setosa setosa
7 setosa setosa
8 setosa setosa
9 setosa setosa
10 setosa setosa
11 setosa setosa
12 setosa setosa
13 setosa setosa

34
14 setosa setosa
15 setosa setosa
16 setosa setosa
17 setosa setosa
18 setosa setosa
19 setosa setosa
20 setosa setosa
21 setosa setosa
22 versicolor versicolor
23 versicolor versicolor
24 versicolor versicolor
25 versicolor versicolor
26 versicolor versicolor
27 versicolor versicolor
28 versicolor versicolor
29 versicolor versicolor
30 versicolor virginica
31 versicolor versicolor
32 versicolor versicolor
33 versicolor versicolor
34 versicolor versicolor
35 virginica virginica
36 virginica virginica
37 virginica virginica
38 virginica virginica
39 virginica virginica
40 virginica virginica
41 virginica virginica
42 virginica virginica
43 virginica virginica
44 virginica virginica
45 virginica virginica
46 virginica virginica
47 virginica virginica
48 virginica virginica
49 virginica virginica
50 virginica virginica

> lda.data = cbind(trx, predict(model)$x)


> library(ggplot2)
> ggplot(lda.data, aes(LD1, LD2)) +
+ geom_point(aes(color = Species))

35
36
Implementasi R untuk KNN (K Nearest Neighbor)

> data(iris)
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
#Bangkitkan bilangan random
> bilran = sample(1:nrow(iris), 0.9 * nrow(iris))
#Buat fungsi untuk normalisasi data
> nor =function(x) { (x -min(x))/(max(x)-min(x)) }
Terapkan pada 4 kolom pertama data iris
> irisn = as.data.frame(lapply(iris[,c(1,2,3,4)], nor))
> summary(irisn)
Sepal.Length Sepal.Width Petal.Length
Min. :0.0000 Min. :0.0000 Min. :0.0000
1st Qu.:0.2222 1st Qu.:0.3333 1st Qu.:0.1017
Median :0.4167 Median :0.4167 Median :0.5678
Mean :0.4287 Mean :0.4406 Mean :0.4675
3rd Qu.:0.5833 3rd Qu.:0.5417 3rd Qu.:0.6949
Max. :1.0000 Max. :1.0000 Max. :1.0000
Petal.Width
Min. :0.00000
1st Qu.:0.08333
Median :0.50000
Mean :0.45806
3rd Qu.:0.70833
Max. :1.00000
##ekstrak data training
> iris_train = irisn[bilran,]
> iris_test=irisn[-bilran,]
#Ekstrak label untuk data training
> target=iris[bilran,5]
#Ekstrak label untuk data tes
> tes_label=iris[-bilran,5]
#Panggil library class
> library(class)
#Input untuk knn adalah data training, data testing, label da
ta training, jumlah tetangga terdekat
> pr = knn(iris_train,iris_test,cl=target,k=4)
> pr
[1] setosa setosa setosa setosa setosa
[6] versicolor versicolor versicolor versicolor versicolor
[11] versicolor versicolor virginica virginica virginica
Levels: setosa versicolor virginica

> tab = table(pr,tes_label)

37
#Buat fungsi akurasi
> accuracy = function(x){sum(diag(x)/(sum(rowSums(x)))) * 100
}
> accuracy(tab)
[1] 100

Jika tidak ingin dilakukan normalisasi maka bisa dilakukan pe


rintah berikut

> trx=iris[bilran,]
> trs=iris[-bilran,]
> trx=iris[bilran,1:4]
> trs=iris[-bilran,1:4]
> pr = knn(trx,trs,cl=target,k=4)
> tab = table(pr,tes_label)
> accuracy(tab)
[1] 100

Atau kita bisa melakukan sampling lagi dengan kemungkinan bilangan random
yang berbeda.
> bilran = sample(1:nrow(iris), 0.9 * nrow(iris))
> trx=iris[bilran,1:4]
> trs=iris[-bilran,1:4]
> trlab=iris[bilran,5]
> tslab=iris[-bilran,5]
> pr = knn(trx,trs,cl=trlab,k=4)
> tab = table(pr,tslab)
> accuracy(tab)
[1] 100
> tab
tslab
pr setosa versicolor virginica
setosa 5 0 0
versicolor 0 7 0
virginica 0 0 3

Kita coba untuk data yang lain dengan menggunakan library ggplot2.

> library(ggplot2)
> ##panggil data
> data(diamonds)
>
> ##simpan sebagai data frame
> dia = data.frame(diamonds)
#Bangkitkan bilangan random berukuran 90% dari keseluruhan ju
mlah data
> ran = sample(1:nrow(dia),0.9 * nrow(dia))

38
#Tulis fungsi normalisasi diberi nama nor
> nor =function(x) { (x -min(x))/(max(x)-min(x)) }
#Lakukan normalisasi terhadap data
> dian = as.data.frame(lapply(dia[,c(1,5,6,7,8,9,10)], nor))
#Ekstrak data training
> diatr = dian[ran,]
#Ekstrak data tes
> diats = dian[-ran,]
#Gunakan kolom 2 training sebagai labeldan diurutkan
> dialab = as.factor(dia[ran,2])
#Begitu juga untuk data testing
> test_target = as.factor(dia[-ran,2])
> library(class)
> pr = knn(diatr,diats,cl=dialab,k=20)
> tb = table(pr,test_target)
#Hitung akurasi
> accuracy = function(x){sum(diag(x)/(sum(rowSums(x)))) * 100
}
> accuracy(tb)
[1] 70.05933

Bisa juga dilakukan rangkaian perintah berikut.


> ran = sample(1:nrow(iris), 0.9 * nrow(iris))
> trx=iris[ran,1:4]
> tsx=iris[-ran,1:4]
> labs=iris[-ran,5]
> labr=iris[ran,5]
> pr = knn(trx,tsx,cl=labr,k=5)
> has=data.frame(pr,labs)
> has
pr labs
1 setosa setosa
2 setosa setosa
3 setosa setosa
4 setosa setosa
5 versicolor versicolor
6 versicolor versicolor
7 versicolor versicolor
8 versicolor versicolor
9 versicolor versicolor
10 versicolor versicolor
11 versicolor versicolor

39
12 virginica virginica
13 virginica virginica
14 virginica virginica
15 virginica virginica
> tab = table(pr,labs)
> tab
labs
pr setosa versicolor virginica
setosa 4 0 0
versicolor 0 7 0
virginica 0 0 4
> accuracy(tab)
[1] 100

Decision Tree
> mower=read.csv("d:/data mining/RidingMowers.csv")
> head(mower)
Income Lot_Size Ownership
1 60.0 18.4 Owner
2 85.5 16.8 Owner
3 64.8 21.6 Owner
4 61.5 20.8 Owner
5 87.0 23.6 Owner
6 110.1 19.2 Owner
> dim(mower)
[1] 24 3

40
> ct=rpart(Ownership ~.,data=mower,control=rpart.control(maxd
epth=2),method="class")

> data(iris)
> ct=rpart(Species ~.,data=iris,control=rpart.control(maxdept
h=5),method="class")
>library(rpart.plot)

> prp(ct,type=2,extra=1,split.font=1,varlen=10)

> data(iris)
> tr=sample(150,130)
> trx=iris[tr,1:4]
> tsx=iris[-tr,1:4]
> try=iris[tr,5]

41
> ct=rpart(try ~.,data=trx,method="class")
> library(rpart)
> ct=rpart(try ~.,data=trx,method="class")
>
> library(rpart.plot)

> rpart.plot(ct, extra = 1)

> yt =predict(ct, tsx, type = 'class')


> tsy=iris[-tr,5]
> tm = table(tsy, yt)

> tm
yt
setosa versicolor virginica
setosa 7 0 0
versicolor 0 6 1
virginica 0 1 5
ada 7 setosa diramal secara tepat.

Ada 1 versicolor diramal sebagai virginica.

Ada 1virginica diramal sebagai versicolor

> akurasi = sum(diag(tm)) / sum(tm)


> akurasi
[1] 0.9

42
Naïve Bayes
Contoh implementasi Naive Bayes di R.
> data(iris)
> iris$Species=factor(iris$Species)
> trindek=sample(150, 100)
> trx=iris[trindek,1:4]
>try=iris[trindek,5]
> tsx=iris[-trindek,1:4]
>install.packages("e1071")
>install.packages("caTools")
>install.packages("caret")

# Loading package
>library(e1071)
>library(caTools)
>library(caret) #untuk membuat confusion matrix

> library("e1071")
> hasil=naiveBayes(try ~.,data=trx)
> hasil
>y_pred = predict(hasil, newdata = tsx)

# Confusion Matrix
cm = table(iris[-trindek,5], y_pred)
cm

# Model Evauation
confusionMatrix(cm)

Confusion Matrix and Statistics

yt
setosa versicolor virginica
setosa 18 0 0
versicolor 0 13 1
virginica 0 2 16

43
Overall Statistics

Accuracy : 0.94
95% CI : (0.8345, 0.9875)
No Information Rate : 0.36
P-Value [Acc > NIR] : < 2.2e-16

Kappa : 0.9096

Mcnemar's Test P-Value : NA

Statistics by Class:

Class: setosa Class: versicolor Class: virginica


Sensitivity 1.00 0.8667 0.9412
Specificity 1.00 0.9714 0.9394
Pos Pred Value 1.00 0.9286 0.8889
Neg Pred Value 1.00 0.9444 0.9688
Prevalence 0.36 0.3000 0.3400
Detection Rate 0.36 0.2600 0.3200
Detection Prevalence0.36 0.2800 0.3600
Balanced Accuracy 1.00 0.9190 0.9403

Kita coba terapkan untuk data lain


>fd=read.csv("D:/data mining/FlightDelays.csv")
Data bisa diunduh dari
https://www.biz.uiowa.edu/faculty/jledolter/DataMining/datate
xt.html
>vars=c(1,2,4,8,10)
> trx=fd[tr,vars]
> fd$delay=factor(fd$delay)
> yr=fd[tr,13]
> tsx=fd[-tr,vars]
> ys=fd[-tr,13]
> hsl=naiveBayes(yr~.,data=trx)
> yt=predict(hsl,newdata=tsx)
> table(yt,ys)
ys
yt delayed ontime
delayed 7 19
ontime 174 681
> ts=table(yt,ys)
> confusionMatrix(ts)
Confusion Matrix and Statistics

ys
yt delayed ontime
delayed 7 19

44
ontime 174 681

Accuracy : 0.7809
95% CI : (0.7521, 0.8078)
No Information Rate : 0.7946
P-Value [Acc > NIR] : 0.8512

Kappa : 0.0169

Mcnemar's Test P-Value : <2e-16

Sensitivity : 0.038674
Specificity : 0.972857
Pos Pred Value : 0.269231
Neg Pred Value : 0.796491
Prevalence : 0.205448
Detection Rate : 0.007946
Detection Prevalence : 0.029512
Balanced Accuracy : 0.505766

'Positive' Class : delayed

45
# Implementasi R untuk SVM

x = matrix(c(1, 1, -1, -1, 1, -1, 1, -1), 4, 2)


> y=c(-1,1,1,-1)
> x
[,1] [,2]
[1,] 1 1
[2,] 1 -1
[3,] -1 1
[4,] -1 -1
> y
[1] -1 1 1 -1
> dat = data.frame(x, y = as.factor(y))
>
>
> svmfit = svm(y ~ ., data = dat, kernel = "polynomial", degr
ee=2, cost = 1)
> print(svmfit)

Call:
svm(formula = y ~ ., data = dat, kernel = "polynomial", degre
e = 2, cost = 1)

Parameters:
SVM-Type: C-classification
SVM-Kernel: polynomial
cost: 1
degree: 2
coef.0: 0

Number of Support Vectors: 2


> yp = predict(svmfit, x)
> yp
1 2 3 4
-1 1 1 -1
Levels: -1 1

> xt = c(2, 2)#kita tes dengan titik baru (2 2)


> xt
[1] 2 2
> yp = predict(svmfit, t(xt))
> yp
1
-1
Levels: -1 1

Atau bisa juga dengan perintah berikut


>model=svm(x,y, type="C-classification",kernel="polynomial",
degree=2,cost=1)
> pred=predict(model,x)
> pred
1 2 3 4
1 -1 -1 1
Levels: -1 1
> data.frame(pred,y)
pred y
1 1 1

46
2 -1 -1
3 -1 -1
4 1 1

47

Anda mungkin juga menyukai