Dimensionality Reduction : Principal Component Analysis Implementation using Python

Insan Cahya Setia
5 min readSep 26, 2021

Pada pengembangan machine learning, pemilihan dataset yang baik tentu akan berdampak pada performa dari model yang akan kita buat. Terdapat banyak dataset yang tersedia untuk bisa kita gunakan, baik data publik yang bebas kita gunakan ataupun data privat yang digunakan oleh setiap perusahaan. Datanya pun sangat bervariatif, mulai dari data dengan dimensi yang kecil ataupun data dengan dimensi yang sangat besar. Pada pengembangan machine learning, tentu data yang sedikit akan sangat mudah untuk jadikan model karena waktu yang diperlukan untuk melatih model tersebut pun sangat cepat. Namun pada kenyataannya, banyak masalah machine learning menggunakan dataset yang sangat besar, yakni memiliki ribuan atribut bahkan jutaan, seperti pada dataset yang berisi informasi mengenai genetik manusia.

Dengan begitu banyaknya atribut, proses pelatihan akan menjadi lambat dan memakan waktu lama. Contoh lain pada kasus image recognition, di mana atribut dari image adalah jumlah pixel dari gambar tersebut. Jika sebuah gambar memiliki resolusi 64 x 64 pixel, maka gambar tersebut memiliki 4.096 atribut.

https://medium.com/analytics-vidhya/hand-detection-and-finger-counting-using-opencv-python-5b594704eb08

Pada gambar di atas, setiap pixel adalah sebuah atribut. Hanya atribut yang berada di dalam garis kuning yang berguna untuk dipakai dalam pelatihan model machine learning. Sebaliknya, atribut yang berada di luar garis kuning, tidak berguna dalam pelatihan model. Pengurangan dimensi pada kasus ini adalah dengan membuang pixel atau atribut yang berada di luar garis kuning. Bayangkan jika terdapat 10.000 gambar seperti di atas dalam sebuah dataset. Pengurangan dimensi akan mempercepat pelatihan model secara signifikan.

Ada beberapa teknik dalam pengurangan dimensi. Salah satu metode pengurangan dimensi yang terkenal adalah Principal Component Analysis atau sering disebut PCA.

Principal Component Analysis

PCA adalah analisis multivariate yang mentransformasi variabel-variabel (atribut) asal yang saling berkorelasi menjadi variabel-variabel baru yang tidak saling berkorelasi dengan mereduksi sejumlah variabel tersebut sehingga mempunyai dimensi yang lebih kecil namun dapat menerangkan sebagian besar keragaman variabel aslinya.

Secara sederhana, tujuan dari PCA adalah mereduksi dimensi atau mengurangi jumlah atribut pada dataset tanpa mengurangi informasi. Contohnya pada sebuah dataset harga rumah. Pada PCA setiap atribut disebut sebagai principal component. Jika terdapat 10 atribut pada dataset, berarti terdapat 10 principal component. Pada gambar di bawah terdapat histogram dari 10 principal component dan variance dari setiap principal component.

PCA bekerja dengan menghitung variance dari tiap atribut. Variance adalah informasi yang dimiliki sebuah atribut. Misal pada dataset rumah, atribut jumlah kamar memiliki variance atau informasi sebesar 92% dan warna rumah memiliki variance/informasi sebesar 4% tentang harga rumah terkait. Dari hasil perhitungan variance, atribut warna rumah dapat dibuang dari dataset karena tidak memiliki informasi yang cukup signifikan ketika kita ingin mempercepat pelatihan sebuah model.

Perbedaan mendasar lain yang membedakan LDA dan PCA adalah PCA merupakan teknik unsupervised karena pada pengurangan dimensi, PCA tidak menghiraukan label yang terdapat pada dataset. Sedangkan LDA merupakan teknik supervised karena LDA memperhatikan bagaimana kelas-kelas pada data dapat dipisahkan dengan baik.

PCA Implementation

Setelah kita berkenalan dengan apa itu PCA, kali ini kita akan coba mengimplementasikan PCA menggunakan Python dengan menggunakan library Scikit Learn. Dataset yang akan kita kali ini yaitu Iris Dataset.

Tahapan pada latihan ini sebagai berikut:

  1. Bagi dataset.
  2. Latih model tanpa PCA.
  3. Latih model dengan PCA.
  4. Evaluasi hasil kedua model.

Pertama-tama impor library yang dibutuhkan. Kemudian kita masukkan dataset iris dan bagi data menjadi train set dan test set.

from sklearn import datasetsfrom sklearn.model_selection import train_test_split
# Load iris dataset
iris = datasets.load_iris()# Separate attribute and labelatribut = iris.datalabel = iris.target# separate training data and test dataX_train, X_test, y_train, y_test = train_test_split(atribut, label, test_size=0.2)

Kita akan menggunakan model Decision Tree dan menghitung berapa akurasinya tanpa menggunakan PCA.

from sklearn import tree
# Call decisiontree model
decision_tree = tree.DecisionTreeClassifier()first_model = decision_tree.fit(X_train, y_train)# Print accuracyfirst_model.score(X_test, y_test)

Tampilan hasil akurasi tanpa PCA dari kode di atas sebagai berikut.

Akurasi tanpa PCA adalah 0.9 atau 90%.

Kemudian kita akan menggunakan PCA dan menghitung variance dari setiap atribut.

from sklearn.decomposition import PCA# create a PCA object with 4 principal componentspca = PCA(n_components=4)# PCA implementation on datasetpca_attributes = pca.fit_transform(X_train)# see the variance of each attributepca.explained_variance_ratio_

Hasil dari setiap atributnya menjadi sebagai berikut.

Hasilnya adalah 1 atribut memiliki variance sebesar 0.931, yang berarti atribut tersebut menyimpan informasi yang tinggi dan jauh lebih signifikan dari atribut lain.

Melihat dari variance sebelumnya kita bisa mengambil 2 principal component terbaik karena total variance nya jika dijumlahkan adalah 0.977 yang sudah cukup tinggi.

# PCA with 2 principal componentspca = PCA(n_components = 2)X_train_pca = pca.fit_transform(X_train)X_test_pca = pca.fit_transform(X_test)

Kita akan menguji akurasi dari classifier setelah menggunakan PCA.

# Testing accuracymodel2 = decision_tree.fit(X_train_pca, y_train)model2.score(X_test_pca, y_test)

Hasil pengujian akurasi setelah menggunakan PCA menjadi seperti di bawah ini.

Dari percobaan di atas bisa kita lihat bahwa dengan hanya 2 principal component atau 2 atribut saja model masih memiliki akurasi yang cukup tinggi, yaitu 80%. Dengan principal component kamu bisa mengurangi atribut yang kurang signifikan dalam prediksi dan mempercepat waktu pelatihan sebuah model machine learning.

Pada pembahasan diatas kita sudah belajar tentang Principal Component Analysis dan juga implementasinya menggunakan Python. Cukup sekian pembahasan kita kali ini, nantikan artikel selanjutnya yang akan saya bagikan. Untuk melihat project lengkap pada latihan diatas, kalian bisa lihat disini.

See you next time ..

--

--