data(USArrests)
head(USArrests)
Interpretasi: Pada bagian ini K-MEANS, kita mengimpor dataset
USArrests
.
USArrScale <- scale(USArrests, scale=T)
head(USArrScale)
## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144 1.7589234 2.067820292
## Colorado 0.02571456 0.3988593 0.8608085 1.864967207
Interpretasi: Pada bagian ini, kita melakukan rescaling pada dataset
USArrests
menggunakan fungsi scale
.
set.seed(123) # untuk memastikan hasil yang konsisten
kMres <- kmeans(USArrScale, centers=3)
kMres $cluster
## Alabama Alaska Arizona Arkansas California
## 1 1 1 3 1
## Colorado Connecticut Delaware Florida Georgia
## 1 3 3 1 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 2 1 3 2
## Kansas Kentucky Louisiana Maine Maryland
## 3 2 1 2 1
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 1 2 1 1
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 1 2 3
## New Mexico New York North Carolina North Dakota Ohio
## 1 1 1 2 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 1 3 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 2 2 3
kMres$size
## [1] 20 13 17
Interpretasi: Pada bagian ini, kita melakukan K-Means clustering dengan jumlah cluster (K) ditetapkan sebanyak 3. Hasilnya adalah label cluster untuk setiap baris data dan ukuran masing-masing cluster.
pairs(USArrScale, col=c(1:3)[kMres $cluster], pch=16, main="K-Means Clustering with K=3")
Interpretasi: Terlihat pada gambar di atas hasil pengelompokkan dari kelompok 1 (berwarna merah), kelompok 2 (berwarna hijau), dan kelompok 3 (berwarna hitam). Negara kelompok 1 adalah negara dengan tingkat kejahatan rendah. Kelompok 2 adalah negara dengan tingkat kejahatan sedang, dan kelompok 3 adalah negara dengan tingkat kejahatan tinggi. Perlu diperhatikan algoritma K-Means menghasilkan hasil yang berbeda-beda karena adanya proses randomisasi.
set.seed(12)
kMres1 <- kmeans(USArrScale, centers=3)
head(kMres1 $cluster)
## Alabama Alaska Arizona Arkansas California Colorado
## 1 1 1 3 1 1
kMres2 <- kmeans(USArrScale, centers=3)
head(kMres2 $cluster)
## Alabama Alaska Arizona Arkansas California Colorado
## 2 3 3 2 3 3
#aggreement cluster membership
table(kMres1 $cluster, kMres2 $cluster)
##
## 1 2 3
## 1 0 7 13
## 2 13 0 0
## 3 16 1 0
Interpretasi: Tabel di atas memperlihatkan agreement/kesesuaian anara cluster membership dari dua kali run. Terlihat dari tabel terdapat beberapa disagreement hasil clustering. Hal ini menunjukkan bahwa K-Means clustering dapat menghasilkan hasil yang berbeda tergantung pada inisialisasi centroid awal. Hal ini dapat diatasi dengan ensemble, dengan melakukan beberapa kali run K-Means clustering dengan inisialisasi centroid yang berbeda, kemudian mengambil hasil clustering yang paling sering muncul (mode) sebagai hasil akhir.
#Pakai data scale pada contoh 8.1
head(USArrScale)
## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144 1.7589234 2.067820292
## Colorado 0.02571456 0.3988593 0.8608085 1.864967207
#Hitung distance euclidean
distArrest <- dist(USArrScale, method = "euclidean")
Interpretasi: Pada bagian ini, kita menghitung jarak antar data
menggunakan metode Euclidean. Fungsi dist
digunakan untuk
menghasilkan matriks jarak antar baris dalam dataset
USArrScale
.
res1 <- hclust(distArrest, method = "single")
#dendogram
plot(res1, labels = rownames(USArrests), main = "Single Linkage Dendrogram", xlab = "Distance", ylab = "Cluster")
rect.hclust(res1, k=3, border="red")
Interpretasi: Pada bagian ini dan selanjutnya, kita melakukan
hierarchical clustering menggunakan fungsi hclust
. Single
linkage menghubungkan dua cluster berdasarkan jarak terdekat antara
anggota dari kedua cluster. Single linkage cenderung menghasilkan
cluster yang lebih panjang dan rantai, karena menghubungkan berdasarkan
jarak terdekat.
res2 <- hclust(distArrest, method = "complete")
plot(res2, labels = rownames(USArrests), main = "Complete Linkage Dendrogram", xlab = "Distance", ylab = "Cluster")
rect.hclust(res2, k=4, border="red")
Interpretasi: Complete linkage menghubungkan dua cluster berdasarkan jarak terjauh antara anggota dari kedua cluster. dibagi menjadi 4 cluster, dengan garis merah menunjukkan batas cluster. Ini menghasilkan cluster yang lebih terpisah dan kompak dibandingkan dengan single linkage.
res3 <- hclust(distArrest, method = "average")
plot(res3, hang=-2,labels = rownames(USArrests), main = "Average Linkage Dendrogram", xlab = "Distance", ylab = "Cluster")
rect.hclust(res3, k=2, border="red")
Interpretasi: Average linkage menghubungkan dua cluster berdasarkan rata-rata jarak antara anggota dari kedua cluster. Dibagi menjadi 2 cluster, dengan garis merah menunjukkan batas cluster.
res4 <- hclust(distArrest, method = "ward.D")
plot(res4, hang=-1, cex=0.6, labels = rownames(USArrests), main = "Ward Linkage Dendrogram", xlab = "Distance", ylab = "Cluster")
rect.hclust(res4, k=4, border="red")
Interpretasi: Ward linkage menghubungkan dua cluster dengan cara meminimalkan jumlah kuadrat jarak antar anggota cluster. Ini menghasilkan cluster yang lebih kompak.
#cluster member res4 k=4
cutree(res4, k=4)
## Alabama Alaska Arizona Arkansas California
## 1 2 2 3 2
## Colorado Connecticut Delaware Florida Georgia
## 2 3 3 2 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 4 2 3 4
## Kansas Kentucky Louisiana Maine Maryland
## 3 3 1 4 2
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 2 4 1 3
## Montana Nebraska Nevada New Hampshire New Jersey
## 4 4 2 4 3
## New Mexico New York North Carolina North Dakota Ohio
## 2 2 1 4 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 4 1 2 3 4
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 4 4 3
#convert hclust into a dendogram and plot
res4.a <- as.dendrogram(res4)
#horizontal plot
plot(res4.a, main = "Ward Linkage Dendrogram (Horizontal)", xlab = "Height", ylab = "Cluster", horiz = TRUE)
heatmap(USArrScale, Rowv = as.dendrogram(res4), Colv = NA, scale = "row",
main = "Heatmap of USArrests with Ward Linkage Dendrogram")
Interpretasi: Pada bagian ini, kita menggunakan fungsi
cutree
untuk memotong dendrogram menjadi 4 cluster
berdasarkan hasil Ward linkage. Hasilnya adalah label cluster untuk
setiap baris data. Kemudian, kita mengonversi objek hclust menjadi objek
dendrogram dan memplotnya secara horizontal. Terakhir, kita membuat
heatmap dari dataset USArrests
dengan dendrogram Ward
linkage sebagai baris.
#Pakai data USArrScale pada contoh 8.1
#install.packages("e1071")
set.seed(123) # untuk memastikan hasil yang konsisten
# Load the library
library(e1071)
# (Using k=4 and m=2 as an example)
fuzzcm1 <- cmeans(USArrScale, centers = 3, m = 2, iter.max = 100)
show(fuzzcm1)
## Fuzzy c-means clustering with 3 clusters
##
## Cluster centers:
## Murder Assault UrbanPop Rape
## 1 0.9736658 1.0345287 0.3041592 0.85228653
## 2 -0.9585151 -1.0034728 -0.8487070 -0.94414694
## 3 -0.2807109 -0.2810076 0.3812853 -0.09374483
##
## Memberships:
## 1 2 3
## Alabama 0.65195593 0.11183197 0.23621211
## Alaska 0.58065895 0.16278717 0.25655388
## Arizona 0.70545052 0.07400973 0.22053976
## Arkansas 0.26727003 0.31225375 0.42047622
## California 0.61391345 0.11248819 0.27359837
## Colorado 0.56735531 0.10886192 0.32378277
## Connecticut 0.09257918 0.36843387 0.53898695
## Delaware 0.21737891 0.16633610 0.61628499
## Florida 0.78779230 0.06719813 0.14500957
## Georgia 0.67409870 0.11299351 0.21290780
## Hawaii 0.13023338 0.25830567 0.61146095
## Idaho 0.02008463 0.89854108 0.08137429
## Illinois 0.65893055 0.07011987 0.27094958
## Indiana 0.05888054 0.13180393 0.80931553
## Iowa 0.01922986 0.90841142 0.07235873
## Kansas 0.04343319 0.17769294 0.77887387
## Kentucky 0.14892969 0.46471260 0.38635771
## Louisiana 0.76242358 0.07309663 0.16447978
## Maine 0.02143751 0.91264121 0.06592128
## Maryland 0.91288915 0.02471598 0.06239487
## Massachusetts 0.12404462 0.17221112 0.70374425
## Michigan 0.89948672 0.02701695 0.07349633
## Minnesota 0.05082595 0.65584652 0.29332752
## Mississippi 0.49924408 0.21892694 0.28182898
## Missouri 0.41523255 0.08377429 0.50099316
## Montana 0.04934620 0.74176769 0.20888611
## Nebraska 0.04346821 0.61916910 0.33736269
## Nevada 0.66900362 0.10439971 0.22659668
## New Hampshire 0.02120758 0.90441674 0.07437568
## New Jersey 0.19751465 0.13421887 0.66826648
## New Mexico 0.94608514 0.01482759 0.03908727
## New York 0.69884943 0.06819119 0.23295937
## North Carolina 0.50914793 0.21286105 0.27799102
## North Dakota 0.05169855 0.81870081 0.12960065
## Ohio 0.04299653 0.04982616 0.90717730
## Oklahoma 0.01124129 0.01695647 0.97180224
## Oregon 0.18627174 0.15306148 0.66066678
## Pennsylvania 0.05951789 0.20109208 0.73939003
## Rhode Island 0.16926091 0.28463281 0.54610628
## South Carolina 0.61291239 0.15300707 0.23408054
## South Dakota 0.02181791 0.91584172 0.06234036
## Tennessee 0.65432725 0.10256082 0.24311193
## Texas 0.68588598 0.06596615 0.24814787
## Utah 0.10775849 0.17257154 0.71966997
## Vermont 0.08441990 0.74177919 0.17380091
## Virginia 0.12310131 0.12304802 0.75385067
## Washington 0.10789234 0.12759871 0.76450896
## West Virginia 0.06592707 0.78597355 0.14809938
## Wisconsin 0.05072671 0.72273738 0.22653591
## Wyoming 0.09636793 0.31152792 0.59210415
##
## Closest hard clustering:
## Alabama Alaska Arizona Arkansas California
## 1 1 1 3 1
## Colorado Connecticut Delaware Florida Georgia
## 1 3 3 1 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 2 1 3 2
## Kansas Kentucky Louisiana Maine Maryland
## 3 2 1 2 1
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 1 2 1 3
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 1 2 3
## New Mexico New York North Carolina North Dakota Ohio
## 1 1 1 2 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 1 3 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 2 2 3
##
## Available components:
## [1] "centers" "size" "cluster" "membership" "iter"
## [6] "withinerror" "call"
Interpretasi: Karena pada contoh dengan package advclust sudah tidak
update dan sudah diremove pada CRAN. Kita menggunakan package
e1071
untuk melakukan fuzzy c-means clustering pada dataset
USArrScale
. Contoh ALABAMA Klaster 1 = 0.65, Klaster 2 =
0.11, Klaster 3 = 0. 24. Ini menunjukkan bahwa ALABAMA memiliki derajat
keanggotaan yang lebih tinggi di klaster 1, sehingga masuk ke klaster
1.
#biplot
# Perform PCA on the scaled data
pca_result <- prcomp(USArrScale)
# Plot the first two principal components (PC1 vs PC2)
plot(pca_result$x[, 1:2],
main = "Fuzzy C-Means on PCA Biplot",
xlab = "PC1",
ylab = "PC2",
pch = 19, # Use solid circles for points
col = fuzzcm1$cluster) # Color points by cluster
# Add a legend to explain the colors
legend("topright",
legend = unique(fuzzcm1$cluster),
fill = unique(fuzzcm1$cluster),
title = "Cluster")
Interpretasi: Pada bagian ini, kita melakukan visualisasi hasil fuzzy c-means clustering dengan menggunakan biplot dari PCA (Principal Component Analysis). Kita memplot dua komponen utama (PC1 dan PC2) dari hasil PCA, dan mewarnai titik-titik berdasarkan klaster yang dihasilkan oleh fuzzy c-means clustering. Hasilnya menunjukkan klaster 1 (berwarna hitam), klaster 2 (berwarna hijau), dan klaster 3 (berwarna biru) dalam ruang dua dimensi.
#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’.
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.
#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.
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.
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.
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.
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.
transaksi@itemInfo
Interpretasi: Informasi item terdiri dari 4 item, greentea, roti, sambal, dan yoghurt.
transaksi@itemsetInfo
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.
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.
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.
itemFrequencyPlot(transaksi, topN = 10, type = "relative", main = "Frekuensi Item Transaksi")
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].
## 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.
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”.
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.
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”.
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.
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).
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.
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.
#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.
#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.
netmodel <- nnet(medv/50 ~ ., data = train.set, size = 5, maxit = 500)
## # weights: 76
## initial value 19.080293
## iter 10 value 10.398460
## iter 20 value 10.071831
## iter 30 value 10.030378
## iter 40 value 10.030183
## iter 50 value 9.985011
## iter 60 value 9.882163
## iter 70 value 9.527416
## iter 80 value 7.427559
## iter 90 value 5.751257
## iter 100 value 4.777030
## iter 110 value 4.238808
## iter 120 value 3.217454
## iter 130 value 2.768087
## iter 140 value 2.698467
## iter 150 value 2.626152
## iter 160 value 2.607299
## iter 170 value 2.588017
## iter 180 value 2.578006
## iter 190 value 2.572681
## iter 200 value 2.569926
## iter 210 value 2.567625
## iter 220 value 2.566084
## iter 230 value 2.565212
## iter 240 value 2.564330
## iter 250 value 2.563913
## iter 260 value 2.563698
## final value 2.563697
## 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.
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.
mean((medv.predict - test.set$medv)^2)
## [1] 13.5412
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.
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, ]
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] 8.988249
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.