Dataset USArrests yang berisi data tingkat kejahatan di berbagai negara bagian AS dimuat untuk persiapan analisis.
## Murder Assault UrbanPop Rape
## Alabama 13.2 236 58 21.2
## Alaska 10.0 263 48 44.5
## Arizona 8.1 294 80 31.0
## Arkansas 8.8 190 50 19.5
## California 9.0 276 91 40.6
## Colorado 7.9 204 78 38.7
Dilakukan standardisasi data menggunakan fungsi scale. Langkah ini penting agar setiap variabel (Murder, Assault, dll.) memiliki skala yang sebanding, sehingga tidak ada variabel yang mendominasi proses clustering hanya karena rentang nilainya lebih besar.
## 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
Algoritma K-Means diterapkan untuk mengelompokkan data ke dalam 3 cluster (K=3). Penggunaan set.seed(123) memastikan hasil pengelompokan dapat direplikasi.
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
Output menunjukkan alokasi cluster untuk setiap negara bagian dan jumlah anggota dari masing-masing cluster yang terbentuk.
## [1] 20 13 17
Visualisasi ini menampilkan sebaran data yang diwarnai berdasarkan
keanggotaan clusternya. Dari plot ini, kita dapat secara visual
mengamati bagaimana negara-gama dikelompokkan dan apakah ada pemisahan
yang jelas antar cluster pada berbagai kombinasi variabel.
## Alabama Alaska Arizona Arkansas California Colorado
## 1 1 1 3 1 1
## Alabama Alaska Arizona Arkansas California Colorado
## 2 3 3 2 3 3
##
## 1 2 3
## 1 0 7 13
## 2 13 0 0
## 3 16 1 0
Tabel kontingensi ini membandingkan hasil dari dua kali proses K-Means dengan titik awal acak yang berbeda. Angka-angka di luar diagonal utama menunjukkan adanya ketidaksesuaian atau inkonsistensi hasil clustering. Ini membuktikan bahwa K-Means sensitif terhadap pemilihan centroid awal, yang menyoroti pentingnya menjalankan algoritma beberapa kali untuk mendapatkan solusi yang lebih stabil.
## 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
Matriks jarak antar negara bagian dihitung menggunakan metode jarak Euclidean pada data yang telah distandardisasi. Jarak ini menjadi dasar bagi semua metode clustering hierarkis berikutnya.
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")
Metode ini menggabungkan cluster berdasarkan jarak terdekat antara
anggota-anggotanya. Hasilnya, seperti yang terlihat pada dendrogram,
cenderung menciptakan cluster memanjang atau seperti rantai, di mana
satu anggota baru dapat bergabung ke cluster yang sudah ada karena
kedekatannya dengan satu anggota saja.
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")
Berkebalikan dengan single linkage, metode ini menggabungkan cluster
berdasarkan jarak terjauh antar anggotanya. Pendekatan ini menghasilkan
cluster-cluster yang cenderung lebih bulat (spherical) dan terpisah
dengan jelas satu sama lain.
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")
Metode ini mengambil jalan tengah dengan menggabungkan cluster
berdasarkan rata-rata jarak dari semua pasangan anggota antar cluster.
Ini memberikan keseimbangan antara kecenderungan memanjang dari single
linkage dan kekompakan dari complete linkage.
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")
Metode Ward bertujuan untuk meminimalkan varians total di dalam cluster.
Setiap kali penggabungan terjadi, metode ini memilih pasangan cluster
yang menghasilkan kenaikan sum of squared error (SSE) paling minimal.
Hasilnya adalah cluster yang sangat kompak dan ukurannya cenderung
seimbang.
## 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")
Fungsi cutree digunakan untuk “memotong” dendrogram dari metode Ward
pada level yang menghasilkan 4 cluster, lalu memberikan label cluster
pada setiap negara bagian. Visualisasi dendrogram horizontal dan heatmap
digunakan untuk menginspeksi hasil clustering. Heatmap secara khusus
efektif dalam menunjukkan pola variabel yang menjadi ciri khas setiap
cluster yang terbentuk.
#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"
Algoritma Fuzzy C-Means diterapkan pada data USArrScale untuk membentuk 3 cluster. Berbeda dengan K-Means, setiap negara bagian tidak dimasukkan secara kaku ke dalam satu cluster, melainkan memiliki derajat keanggotaan pada setiap cluster yang ada.
Sebagai contoh, Alabama memiliki nilai keanggotaan 0.65 di Cluster 1, 0.11 di Cluster 2, dan 0.24 di Cluster 3. Meskipun memiliki keanggotaan di semua cluster, Alabama paling dominan di Cluster 1. Hasil “Closest hard clustering” menunjukkan alokasi cluster definitif berdasarkan derajat keanggotaan tertinggi untuk setiap negara bagian.
#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")
Hasil clustering divisualisasikan menggunakan PCA (Principal Component
Analysis) untuk mereduksi data ke dalam dua dimensi (PC1 dan PC2).
Setiap titik mewakili satu negara bagian dan diwarnai sesuai dengan
alokasi cluster definitifnya (berdasarkan keanggotaan tertinggi). Plot
ini membantu untuk melihat bagaimana cluster-cluster terpisah dalam
ruang dua dimensi yang paling signifikan.
##
## 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)
Pertama, data simulasi yang terdiri dari dua kelompok dibangkitkan.
Kemudian, algoritma DBSCAN diterapkan menggunakan fungsi dbscan dengan
dua parameter kunci: eps=0.5 (radius lingkungan) dan minPts=5 (jumlah
minimum titik dalam lingkungan).
Hasilnya adalah alokasi cluster untuk setiap titik. Titik yang diberi label 0 dianggap sebagai noise atau outlier, sedangkan sisanya dikelompokkan ke dalam cluster yang terbentuk. Visualisasi plot menunjukkan bagaimana algoritma berhasil memisahkan kedua kelompok data dan mengidentifikasi beberapa titik sebagai noise.
OPTICS adalah variasi dari DBSCAN yang tidak memerlukan parameter eps di
awal, sehingga lebih fleksibel untuk data dengan kepadatan yang
bervariasi. Algoritma ini dijalankan pada matriks jarak dari data dan
menghasilkan sebuah “reachability plot”.
Dari reachability plot tersebut, kita dapat secara visual mengidentifikasi lembah-lembah yang mewakili area padat (cluster). Puncak-puncak di antara lembah menunjukkan jarak antar cluster. Berdasarkan plot ini, eps=0.5 dipilih sebagai ambang batas untuk mengekstraksi cluster menggunakan fungsi extractDBSCAN, yang hasilnya kemudian divisualisasikan.
##
## 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)
Contoh ini menunjukkan penerapan DBSCAN menggunakan package fpc yang
lebih lawas. Data sampel acak tanpa struktur cluster yang jelas
dibangkitkan. Algoritma fpc::dbscan kemudian dijalankan dengan nilai eps
yang sangat kecil (0.15). Hasil plot menunjukkan bahwa dengan eps
sekecil itu, sebagian besar titik dianggap sebagai noise karena tidak
ada lingkungan yang cukup padat yang terbentuk.
## Loading required package: Matrix
##
## Attaching package: 'arules'
## The following objects are masked from 'package:base':
##
## abbreviate, write
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/asus/Documents/1 - Dok - Back Up/Faruq/STIS/6 - Data Mining/data_transaksi.txt",
format = "single",
sep = "\t",
cols = c(1, 2),
skip = 1
)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.
## transactions in sparse format with
## 10 transactions (rows) and
## 4 items (columns)
Pada bagian ini, kita mencetak objek transaksi yang berisi data transaksi yang telah diimpor. Terdiri dari 10 transaksi dan 4 item.
## 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
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.
## labels
## 1 Greentea
## 2 Roti
## 3 Sambal
## 4 Yoghurt
Informasi item terdiri dari 4 item, greentea, roti, sambal, dan yoghurt.
## 4 x 10 sparse Matrix of class "ngCMatrix"
##
## [1,] | | . | | | | | | .
## [2,] | . | . . | | . . |
## [3,] . | . . | . . . | |
## [4,] | . | | | . | . . |
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.
## Greentea Roti Sambal Yoghurt
## 0.8 0.5 0.4 0.6
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.
## Greentea Roti Sambal Yoghurt
## 8 5 4 6
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.
Dilakukan perhitungan frekuensi kemunculan setiap item, baik secara
relatif (persentase) maupun absolut (jumlah). Grafik itemFrequencyPlot
menunjukkan bahwa Greentea adalah item yang paling sering dibeli.
## 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
## 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].
## 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
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.
## 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
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”.
## lhs rhs support confidence coverage lift count
## [1] {Roti, Sambal} => {Yoghurt} 0.1 1 0.1 1.666667 1
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.
## 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
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”.
## 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].
## 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
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.
## lhs rhs support confidence coverage lift count
## [1] {Greentea, Roti} => {Yoghurt} 0.2 0.6666667 0.3 1.111111 2
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).
## lhs rhs support confidence coverage lift count
## [1] {Roti, Sambal} => {Yoghurt} 0.1 1 0.1 1.666667 1
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.
## 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].
Aturan asosiasi yang memiliki nilai lift > 1 divisualisasikan dalam
bentuk grafik jaringan. Pada grafik ini: Lingkaran (node) mewakili item.
Ukuran lingkaran menunjukkan support item tersebut. Panah (edge)
menunjukkan sebuah aturan (dari LHS ke RHS). Warna panah menunjukkan
nilai lift—semakin merah, semakin kuat asosiasinya. Visualisasi ini
mempermudah identifikasi hubungan antar item yang paling signifikan
secara visual.
# install.packages("mlbench")
# install.packages("caret")
# install.packages("nnet")
library(mlbench)
library(caret)## Loading required package: ggplot2
## Loading required package: lattice
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.
## 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, ]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.
## # 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
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.
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.
## [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")
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.
#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, ]Seluruh variabel dalam dataset dinormalisasi ke rentang [0, 1] menggunakan metode min-max scaling. Kemudian, data yang telah dinormalisasi dipartisi menjadi data latih dan data uji.
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
Pembuatan Model: Model neural network dibangun menggunakan fungsi neuralnet dengan arsitektur dua hidden layer yang masing-masing berisi 5 dan 3 neuron.
plot(test.r, pr.nn, main = "Neural Network Prediction", xlab = "Actual medv", ylab = "Predicted medv")
abline(lm(pr.nn ~ test.r), col = "red")
Prediksi dan Evaluasi: Model digunakan untuk prediksi pada data uji, di
mana hasilnya kemudian dikembalikan ke skala semula. Perhitungan MSE
pada model ini menghasilkan nilai 8.99.
Kesimpulan: Model yang dibangun dengan neuralnet menunjukkan MSE yang lebih rendah dibandingkan model nnet, mengindikasikan kinerja prediksi yang lebih akurat pada dataset ini. Plot prediksi vs. aktual juga mengonfirmasi korelasi yang kuat antara nilai prediksi dan nilai sebenarnya.