Tulisan ini merupakan bagian dari tugas mata kuliah Data Mining for Science yang saya ambil tahun lalu.
Analisis Komponen Utama/Principal Component Analysis adalah salah satu algoritma unsupervised untuk mereduksi dimensi data. PCA diaplikasikan dalam visualisasi data berdimensi besar, noise filtering, gene data analysis, stock market predictions, dan lain-lain. PCA hanya menggunakan data sampel tunggal dengan \(p\) variabel. Pada metode ini digunakan asumsi bahwa tidak ada variabel dependen atau variabel respon dan tidak ada pengelompokan observasi (Rencher, 2002).
Tujuan dari PCA adalah untuk mendeteksi korelasi antara variabel pada data. Jika ada variabel yang memiliki korelasi yang kuat satu dengan yang lain, maka dimensi data bisa direduksi. Hasil dari reduksi ini merupakan variabel baru yang lebih sedikit dari variabel awal.
Pada tulisan ini akan dilakukan Analisis Komponen Utama dengan cara manual (dekomposisi nilai eigen) dan otomatis menggunakan fungsi prcomp.
Data yang akan digunakan adalah data performance CPU. Ada 209 observasi yang terdiri dari variabel-variabel sebagai berikut:
Berdasarkan hubungan kausal dapat dikatakan bahwa variabel pertama hingga keenam merupakan variabel bebas atau independen, sedangkan variabel PRP adalah variabel dependen.
# Menetapkan working directory
setwd("D:/Semester Genap/Tugas/Data Mining")
library(corrplot)
## corrplot 0.84 loaded
library(psych)
## Warning: package 'psych' was built under R version 4.0.4
mydata<-read.csv("cpu.csv",header=T) #input data
head(mydata)
## MYCT MMIN MMAX CACH CHMIN CHMAX class
## 1 125 256 6000 256 16 128 198
## 2 29 8000 32000 32 8 32 269
## 3 29 8000 32000 32 8 32 220
## 4 29 8000 32000 32 8 32 172
## 5 29 8000 16000 32 8 16 132
## 6 26 8000 32000 64 8 32 318
Seluruh tipe data sudah sesuai sehingga dapat dilanjutkan ke langkah selanjutnya.
Karena atribut pada data memiliki satuan yang berbeda-beda, maka harus dilakukan standardisasi. Standardisasi data membuat distribusi data berpusat di 0 dan berstandar deviasi 1 atau berdistribusi normal baku (mean = 0, variansi = 1).
standardized_data = scale(mydata)
head(standardized_data)
## MYCT MMIN MMAX CACH CHMIN CHMAX class
## [1,] -0.3028590 -0.6734091 -0.4942755 5.6805690 1.6580079 4.22089912 0.5743802
## [2,] -0.6717167 1.3231141 1.7229127 0.1672280 0.4843461 0.52821054 1.0158381
## [3,] -0.6717167 1.3231141 1.7229127 0.1672280 0.4843461 0.52821054 0.7111700
## [4,] -0.6717167 1.3231141 1.7229127 0.1672280 0.4843461 0.52821054 0.4127196
## [5,] -0.6717167 1.3231141 0.3584892 0.1672280 0.4843461 -0.08723756 0.1640109
## [6,] -0.6832436 1.3231141 1.7229127 0.9548481 0.4843461 0.52821054 1.3205063
Definisikan matriks \(X_{(n×p)}\) sebagai matriks data dengan fungsi as.matrix, misalkan terdapat \(p\) variabel dan \(n\) data atau observasi:
Dalam data yang berbentuk matriks, kovariansi dapat diperoleh dengan mengalikan transpose dari matriks data dengan matriks data itu sendiri: \[S=X^T X\] Apabila matriks telah distandardisasi maka S adalah matriks korelasi. Ini karena misalkan diambil dua variabel X dan Y, maka korelasi dua variabel ini adalah: \[cor(X,Y)=cov(X,Y)/(\sigma(X)\cdot\sigma(Y))\] Diketahui setelah standaridisasi standar deviasi masing-masing variabel adalah 1, sehingga pada data yang telah distandardisasi \(cor(X,Y)=cov(X_{standardized},Y_{standardized})\). Matriks \(S_{p×p}\) adalah matriks persegi.
matrix.corr<-as.matrix(cov(standardized_data))
corrplot(matrix.corr, type = "upper", order = "original",
tl.col = "black", tl.srt = 45)
Dari plot di atas disimpulkan bahwa variabel MYCT memiliki hubungan yang berbanding terbalik dengan variabel lainnya. Sedangkan enam variabel yang lain memiliki hubungan berbanding lurus. Dilihat dari warnanya, banyak hubungan antar variabel yang berkorelasi kuat. Dari asumsi ini dapat disimpulkan dimensi awal data yaitu 7 dapat direduksi menjadi dimensi yang lebih sedikit.
Selanjutnya hitung dekomposisi nilai eigen dengan rumus berikut: \[S_{p×p}=V_{p×q} Λ_{q×q} V_{p×q}^T\] Dengan \(Λ=diag(λ_1,λ_2,…,λ_q)\) yaitu matriks diagonal yang diagonalnya berisi nilai-nilai eigen. Sedangkan \(V\) matriks yang berisikan vektor eigen yang bersesuaian dengan nilai eigen \(λ\).
#menghitung nilai eigen dan eigen vector
eigen.cpu<-eigen(matrix.corr)
eigenval.cpu<-eigen.cpu$values
eigenvec.cpu<-eigen.cpu$vectors
eigenval.cpu
## [1] 4.1762171 0.8321437 0.7887882 0.5181657 0.4163160 0.1740640 0.0943053
Model komponen utama atau principal component dapat ditulis sebagai berikut: \[Z_j=v_{1j} X_1 + v_{2j} X_2 + ⋯ + v_{pj} X_p\]
Nilai persentase ini menunjukkan keterserapan informasi yang dapat diwakili oleh komponen utama, biasa juga disebut proporsi dari variansi: \[ inersiaPC_i = λ_i / (\sum_{i=1}^p λ_i)\]
inersia = (eigenval.cpu/sum(eigenval.cpu))*100
inersia #dalam persen
## [1] 59.660244 11.887767 11.268403 7.402367 5.947371 2.486629 1.347219
#Koding PCA dengan fungsi prcomp
library(factoextra)
## Loading required package: ggplot2
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
# Hitung PCA dengan data yang distandardisasi
cpu.pca <- prcomp(mydata, scale = T)
# Eigenvalues
eig.val <- get_eigenvalue(cpu.pca)
eig.val
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 4.1762171 59.660244 59.66024
## Dim.2 0.8321437 11.887767 71.54801
## Dim.3 0.7887882 11.268403 82.81641
## Dim.4 0.5181657 7.402367 90.21878
## Dim.5 0.4163160 5.947371 96.16615
## Dim.6 0.1740640 2.486629 98.65278
## Dim.7 0.0943053 1.347219 100.00000
Dengan menggunakan perhitungan manual yaitu menghitung nilai eigen dan fungsi prcomp diperoleh 7 nilai eigen beserta inersianya seperti di atas.
Dengan trace matriks nilai eigen yaitu 7. Matriks ini menunjukkan variansi antar variabel hasil komponen utama.
Diambil persentase inersia kumulatif di sekitar 90%. Jadi yang digunakan hanya komponen utama 1 sampai dengan 4 atau nilai eigen pertama sampai keempat. Dengan kata lain, data yang awalnya berdimensi 7 direduksi menjadi 4 variabel di mana telah mewakilkan 90,22% dari keselurhan informasi pada data CPU. Berikut adalah eigen vektor yang berkorelasi dengan nilai eigen pertama sampai keempat:
# Vektor eigen
hasil.pca<-summary(cpu.pca)
hasil.pca$rotation
## PC1 PC2 PC3 PC4 PC5 PC6
## MYCT 0.2372125 0.79988526 -0.5395352 0.06290484 -0.003468611 0.03196077
## MMIN -0.3946310 -0.25191958 -0.5213853 0.04690831 -0.098509675 -0.61666579
## MMAX -0.4315684 -0.07638240 -0.2474057 -0.37814062 -0.019071389 0.68928693
## CACH -0.3783555 0.11868671 0.1119802 0.66059871 0.600213290 0.12668935
## CHMIN -0.3767141 0.22156332 0.2105309 0.40129818 -0.769066783 0.09352082
## CHMAX -0.3330792 0.47009948 0.5123589 -0.46610387 0.136574194 -0.34296687
## class -0.4535826 0.08194792 -0.2376450 -0.19018030 0.139813714 -0.03409874
## PC7
## MYCT 0.08845926
## MMIN 0.34172948
## MMAX 0.35809830
## CACH 0.13237886
## CHMIN -0.05850499
## CHMAX 0.22808211
## class -0.82109262
Model komponen utama yang baru untuk proporsi variansi kumulatif 90,218% adalah: \[Z_j = v_{1j} X_{MYCT} + v_{2j} X_{MMIN} + ... + v_{pj} X_{class} \] Dengan \(X\) matriks data, \(V_j\) vektor eigen yang berasosiasi dengan nilai eigen ke-\(j\), \(j=1,2,3,4\). Setiap elemen pada vektor eigen atau pada Tabel di bawah ini adalah kontribusi/bobot yang diberikan setiap variabel untuk setiap komponen.
Untuk dimensi utama atau PC 1 sampai 4 dapat dituliskan sebagai berikut: \[Z_1 = 0.2372 \cdot X_{MYCT} + (-0.3946) \cdot X_{MMIN} + ... + (-0.4535) \cdot X_{class} \] \[Z_2 = 0.7999 \cdot X_{MYCT} + (-0.2519) \cdot X_{MMIN} + ... + 0.0819 \cdot X_{class}\] \[Z_3 = (-0.5395) \cdot X_{MYCT} + (-0.5214) \cdot X_{MMIN} + ... + (-0.2376) \cdot X_{class} \] \[Z_4 = 0.0629 \cdot X_{MYCT} + 0.0469 \cdot X_{MMIN} + ... + (-0.1901) \cdot X_{class} \] Kemudian dapat divisualisasikan bagaimana kontribusi setiap variabel pada dimensi utama.
fviz_pca_var(cpu.pca,
col.var = "contrib", # Color by contributions to the PC
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE # Avoid text overlapping
)
Dari gambar ditunjukkan 6 variabel yaitu MMIN, MMAX, class, CHMIN, CHMAX, CACH berada di sisi kiri, sedangkan variabel MYCT berada di sisi kanan atau sisi yang berlawanan. Dapat disimpulkan bahwa variabel MYCT berkorelasi negatif terhadap 6 variabel yang lain.