teknik reduksi dimensi

2 Teknik Reduksi Dimensi Populer dengan Python

Posted by

Dimensionality reduction atau reduksi dimensi adalah teknik untuk mengurangi dimensi dataset dalam hal ini fitur data. Biasanya dataset yang ingin diproses memiliki puluhan bahkan mungkin ratusan fitur atau kolom. Dengan reduksi dimensi, kita dapat mengurangi jumlah fitur atau kolom tanpa menghilangkan informasi dari dataset tersebut.

Reduksi dimensi pada prinsipnya sama dengan ketika kita mengkompres file yang berukuran besar menjadi zip file misalnya. Kompresi file tidak akan menghilangkan atau mengurangi informasi yang ada di dalam file tersebut, hanya membuatnya lebih sederhana sehingga mengurangi ukuran file yang dapat mempercepat proses transfer file.

Sebelumnya, mari kita uraikan mengapa perlu dilakukan reduksi dimensi pada dataset.

Mengapa perlu dilakukan reduksi dimensi?

Banyaknya variabel input dapat menurunkan performa machine learning. Dataset yang digunakan pada umumnya direpresentasikan oleh baris dan kolom, sehingga dalam hal ini variabel inputnya adalah kolom atau fiturnya.

Jumlah fitur yang sangat banyak sering kali dapat mengakibatkan data point merepresentasikan sampel yang tidak representatif. Ini dapat sangat mempengaruhi performa algoritma machine learning.

Baca Juga: 2 Cara Implementasi One-Hot Encoding di Python

Selain itu, semakin banyak variabel pada dataset, semakin tinggi pula jumlah sampel yang mewakili semua kombinasi kemungkinan nilai fitur. Model akan menjadi lebih kompleks dan akan meningkatkan kemungkinan overfitting.

Reduksi dimensi bertujuan untuk menghindari overfitting. Data training dengan fitur yang lebih sedikit akan membuat model machine learning tetap simpel.

Teknik Reduksi Dimensi

Ada banyak sekali teknik yang dapat digunakan untuk reduksi dimensi seperti metode feature selection atau yang mengkombinasikan dimensi dengan menghitung bobot rata-rata fitur yang berkorelasi. Namun, disini saya hanya akan membahas dua teknik yang sering digunakan untuk reduksi dimensi yaitu Principal Component Analysis (PCA) dan Linear Discriminant Analysis (LDA).

Sebelum kita mempraktekkan bagaimana cara penerapan dua teknik di atas menggunakan Python, kita harus menyiapkan dataframe yang akan digunakan.

Disini saya membuat dataframe dengan men-generate bilangan float random antara 0 dan 1 sebagai fitur-fiturnya (ada 10 fitur), serta label A, B, dan C sebanyak masing-masing 100 data.

import pandas as pd
import numpy as np
import random

data = {'feature_1': [random.uniform(0, 1) for i in range(100)],
        'feature_2': [random.uniform(0, 1) for i in range(100)],
        'feature_3': [random.uniform(0, 1) for i in range(100)],
        'feature_4': [random.uniform(0, 1) for i in range(100)],
      'feature_5': [random.uniform(0, 1) for i in range(100)],
        'feature_6': [random.uniform(0, 1) for i in range(100)],
        'feature_7': [random.uniform(0, 1) for i in range(100)],
        'feature_8': [random.uniform(0, 1) for i in range(100)],
        'feature_9': [random.uniform(0, 1) for i in range(100)],
        'feature_10': [random.uniform(0, 1) for i in range(100)],
        'label': [random.choice(['A', 'B', 'C']) for i in range(100)]}

df = pd.DataFrame(data)
df.head()

Output:

contoh dataframe

Harap dicatat bahwa jika menggunakan dataset asli, pastikan data fitur sudah di-scaling, bisa dengan normalisasi atau standarisasi sehingga bentuknya mirip seperti output di atas.

Kemudian kita pisahkan kolom fitur dan label seperti di bawah ini.

memisahkan fitur dan label

Baca Juga: Cara Binning Data di Python dengan Pandas

Setelah fitur dan label dipisahkan, selanjutnya mari kita terapkan reduksi dimensi pada dataframe tersebut menggunakan PCA dan LDA.

Principal Component Analysis (PCA)

Principal Component Analysis atau PCA adalah teknik reduksi dimensi yang paling populer. Teknik ini menggunakan operasi matriks sederhana dari aljabar linier dan statistik untuk menghitung proyeksi dari data asli ke dalam dimensi dengan jumlah yang sama atau lebih sedikit.

Di Python, kita dapat melakukan kalkulasi Principal Component Analysis dengan class PCA() yang ada di library Scikit-Learn.

Pertama kita harus mengimpor library-nya terlebih dahulu.

from sklearn.decomposition import PCA

Kemudian kita membuat class PCA() dengan memberikan parameter n_components yang mendefinisikan jumlah komponen atau kolom baru yang diinginkan.

pca = PCA(n_components=2)

Setelah membuat class, kita lakukan fit_transform pada data fitur. Jadi, nantinya 10 kolom fitur di atas akan diproses menggunakan teknik PCA sehingga akan mengeluarkan 2 kolom baru hasil reduksi.

fit_pca = pca.fit_transform(x)

Selanjutnya kita buat dataframe baru hasil fit_transform tersebut.

pca_df = pd.DataFrame(data = fit_pca, columns = ['PCA_1', 'PCA_2'])
pca_df.tail()
principal component analysis di python

Sekarang fitur-fitur dalam dataset tersebut sudah direduksi menjadi hanya 2 fitur.

Linear Discriminant Analysis (LDA)

Selain PCA, teknik reduksi dimensi lainnya yang juga banyak digunakan adalah Linear Discriminant Analysis atau LDA.

Linear Discriminant Analysis merupakan salah satu algoritma machine learning untuk klasifikasi yang juga dapat digunakan untuk reduksi dimensi. Cara kerjanya yaitu dengan menghitung statistik ringkasan untuk fitur-fitur input menurut label, seperti mean dan standar deviasi.

Baca Juga: Apa Yang Harus Dilakukan Dalam Proses Data Cleaning?

Di Python, kita dapat mengaplikasikan LDA dengan class LinearDIscriminantAnalysis pada Scikit-Learn.

Sama seperti sebelumnya, kita juga harus mengimpor library-nya terlebih dahulu.

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

Kemudian kita membuat class LinearDiscriminantAnalysis() dengan memberikan parameter n_components yang mendefinisikan jumlah komponen atau kolom baru yang diinginkan.

lda = LinearDiscriminantAnalysis(n_components=2)

Setelah membuat class, kita lakukan fit pada data fitur dan label kemudian transform.

fit_lda = lda.fit(x,y).transform(x)

Selanjutnya kita buat dataframe baru hasil fit dan transform tersebut.

lda_df = pd.DataFrame(fit_lda, columns = ['LDA_1', 'LDA_2'])
lda_df.tail()
linear discriminant analysis di python

Semoga bermanfaat!

modul data science ilmudatapy