Inilah Pengertian, Algoritma, dan Teknik Dimensionality Reduction dengan Python

Assalamu‘alaikum wr. wb.

Halo gais! Dalam Machine Learning, kita mengenal sebuah Teknik untuk mengurangi Dimensi dalam sebuah Data. Teknik itu disebut dengan Dimensionality Reduction atau Pengurangan Dimensi. Kali ini kita juga akan menerapkannya dalam Bahasa Python dengan Library seperti Scikit-Learn.

Teknik Dimensionality Reduction dengan Python

Sumber Artikel Materi : Learndatasci.com, Machinelearningmastery.comCmdlinetips.comStackabuse.comAnalytics Vidhya (Blog), dan Geeksforgeeks.org

Dengan menggunakan teknik reduksi dimensionalitas, tentu saja. Anda dapat menggunakan konsep ini untuk mengurangi jumlah fitur dalam dataset Anda tanpa harus kehilangan banyak informasi dan tetap (atau meningkatkan) kinerja model. Ini adalah cara yang sangat efektif untuk menangani dataset besar, seperti yang akan Anda lihat dalam artikel ini.

Ini adalah panduan komprehensif tentang berbagai teknik reduksi dimensionalitas yang dapat digunakan dalam skenario praktis. Kita akan pertama-tama memahami apa itu konsep ini dan mengapa kita harus menggunakannya, sebelum masuk ke 12 teknik berbeda yang telah saya bahas. Setiap teknik memiliki implementasi sendiri di Python untuk membuat Anda benar-benar mengenalinya.

A. Pengertian Dimensionality Reduction

Reduksi Dimensionalitas atau Dimensionality Reduction adalah teknik yang digunakan untuk mengurangi jumlah fitur dalam suatu dataset sambil tetap mempertahankan sebanyak mungkin informasi penting. Dengan kata lain, ini adalah proses transformasi data berdimensi tinggi menjadi ruang berdimensi lebih rendah yang masih mempertahankan inti dari data asli.

Dalam Machine Learning, data berdimensi tinggi merujuk pada data dengan sejumlah besar fitur atau variabel. Kutukan dimensionalitas adalah masalah umum dalam machine learning, di mana kinerja model memburuk seiring dengan bertambahnya jumlah fitur. Ini terjadi karena kompleksitas model meningkat seiring dengan jumlah fitur, dan menjadi lebih sulit untuk menemukan solusi yang baik. Selain itu, data berdimensi tinggi juga dapat menyebabkan overfitting, di mana model terlalu cocok dengan data pelatihan dan tidak umum dengan baik pada data baru.

Dimensionality Reduction dapat membantu mengatasi masalah ini dengan mengurangi kompleksitas model dan meningkatkan kinerjanya dalam generalisasi. Ada dua pendekatan utama untuk reduksi dimensionalitas: seleksi fitur dan ekstraksi fitur.

Kita menghasilkan jumlah data yang luar biasa setiap hari. Bahkan, 90% data di dunia ini telah dihasilkan dalam 3-4 tahun terakhir! Angkanya benar-benar mengagumkan. Di bawah ini hanyalah beberapa contoh dari jenis data yang dikumpulkan :

  • Facebook mengumpulkan data tentang apa yang Anda suka, bagikan, posting, tempat yang Anda kunjungi, restoran yang Anda sukai, dll.
  • Aplikasi smartphone Anda mengumpulkan banyak informasi pribadi tentang Anda.
  • Amazon mengumpulkan data tentang apa yang Anda beli, lihat, klik, dll. di situs mereka.
  • Kasino melacak setiap gerakan setiap pelanggan.

Seiring dengan peningkatan generasi dan pengumpulan data, memvisualisasikan dan menyimpulkan data tersebut menjadi semakin menantang. Salah satu cara paling umum untuk melakukan visualisasi adalah melalui grafik. Misalkan kita memiliki 2 variabel, Usia dan Tinggi. Kita dapat menggunakan plot titik atau garis antara Usia dan Tinggi dan memvisualisasikan hubungannya dengan mudah :


Sekarang pertimbangkan kasus di mana kita memiliki, katakanlah 100 variabel (p=100). Dalam hal ini, kita dapat memiliki 100(100-1)/2 = 5000 plot yang berbeda. Tidak masuk akal untuk memvisualisasikan masing-masing dari mereka secara terpisah, bukan? Dalam kasus-kasus di mana kita memiliki sejumlah besar variabel, lebih baik memilih subset dari variabel ini (p<<100) yang menangkap sebanyak mungkin informasi seperti set variabel asli.

Mari kita pahami dengan contoh sederhana. Pertimbangkan gambar di bawah ini :

Di sini kita memiliki berat objek serupa dalam Kg (X1) dan Pound (X2). Jika kita menggunakan kedua variabel ini, mereka akan menyampaikan informasi yang serupa. Jadi, akan masuk akal untuk menggunakan hanya satu variabel. Kita dapat mengonversi data dari 2D (X1 dan X2) menjadi 1D (Y1) seperti yang ditunjukkan di bawah ini :

Demikian pula, kita dapat mengurangi p dimensi data menjadi subset k dimensi (k<<n). Ini disebut Dimensionality Reduction.

B. Kegunaan Dimensionality Reduction

Ada beberapa alasan mengapa reduksi dimensionalitas digunakan dalam machine learning: untuk mengatasi biaya komputasi, mengendalikan overfitting, dan memvisualisasikan serta membantu menginterpretasikan dataset berdimensi tinggi.

Seringkali dalam machine learning, semakin banyak fitur yang ada dalam dataset, semakin baik klasifier dapat belajar. Namun, lebih banyak fitur juga berarti biaya komputasi yang lebih tinggi. Tidak hanya dimensionalitas tinggi dapat mengakibatkan waktu pelatihan yang lama, lebih banyak fitur sering kali mengarah pada algoritma overfitting karena mencoba membuat model yang menjelaskan semua fitur dalam data.

Karena reduksi dimensionalitas mengurangi jumlah fitur secara keseluruhan, ini dapat mengurangi tuntutan komputasi yang terkait dengan pelatihan model dan juga membantu mengatasi overfitting dengan menjaga agar fitur yang akan disajikan ke model cukup sederhana.

Reduksi dimensionalitas dapat digunakan dalam konteks pembelajaran bersifat supervisi dan tak bersifat supervisi. Dalam kasus pembelajaran tak bersifat supervisi, reduksi dimensionalitas sering digunakan untuk memproses data dengan melakukan seleksi fitur atau ekstraksi fitur.

Algoritma utama yang digunakan untuk melakukan reduksi dimensionalitas untuk pembelajaran tak bersifat supervisi adalah Principal Component Analysis (PCA) dan Singular Value Decomposition (SVD).

Dalam kasus pembelajaran bersifat supervisi, reduksi dimensionalitas dapat digunakan untuk menyederhanakan fitur yang diberikan ke klasifier machine learning. Metode paling umum yang digunakan untuk melakukan reduksi dimensionalitas untuk masalah pembelajaran supervisi adalah Linear Discriminant Analysis (LDA) dan PCA, dan dapat digunakan untuk memprediksi kasus baru.

Perlu dicatat bahwa kasus penggunaan di atas adalah kasus penggunaan umum dan bukan satu-satunya kondisi di mana teknik-teknik ini digunakan. Sebabnya, teknik reduksi dimensionalitas adalah metode statistik dan penggunaannya tidak terbatas oleh model machine learning.

Mari kita luangkan waktu untuk menjelaskan ide di balik masing-masing teknik reduksi dimensionalitas yang paling umum.

C. Kutukan Dimensi (Dimensionality Curse)

"Kutukan dimensi" muncul dalam berbagai cara dalam Data Science :

1. Jarak bukanlah ukuran perbedaan yang baik di dimensi tinggi

Dengan dimensi tinggi, sebagian besar titik data berakhir jauh satu sama lain. Oleh karena itu, banyak algoritma machine learning yang mengandalkan fungsi jarak untuk mengukur kesamaan data tidak dapat menangani data berdimensi tinggi. Ini termasuk algoritma seperti K-Means, K-Nearest Neighbors (KNN).

2. Perlunya lebih banyak data

Setiap fitur meningkatkan jumlah data yang diperlukan untuk estimasi. Aturan praktis yang baik adalah memiliki setidaknya 10 contoh untuk setiap fitur dalam dataset Anda. Misalnya, jika data Anda memiliki 100 fitur, Anda sebaiknya memiliki setidaknya 1000 contoh sebelum mencari pola.

3. Overfitting

Algoritma pembelajaran dapat menemukan korelasi semu antara fitur dan target ketika Anda menggunakan terlalu banyak fitur. Model overfitting cocok secara semu dengan data pelatihan dan tidak generalisasi dengan baik ke data uji.

4. Ledakan Kombinatorial

Ruang pencarian menjadi secara eksponensial lebih besar ketika Anda menambahkan dimensi lebih banyak. Bayangkan kasus sederhana di mana Anda hanya memiliki fitur biner, yang berarti mereka hanya mengambil nilai 0 dan 1.

1 Fitur memiliki 2 Kemungkinan Nilai

2 Fitur memiliki 2^2 = 4 Kemungkinan Nilai

...

1000 Fitur memiliki 2^1000 ≈ 10^300 Kemungkinan Nilai.

Untuk perbandingan, ada sekitar 10^82 atom di seluruh alam semesta (menurut Universe Today). Dengan kata lain, dataset kita berisi jauh lebih banyak nilai yang mungkin daripada jumlah atom di alam semesta. Sekarang pertimbangkan bahwa 1000 fitur tidak banyak menurut standar saat ini dan bahwa fitur biner adalah penyederhanaan yang ekstrem.

Ledakan kombinatorial ini menimbulkan dua masalah bagi Data Science :

  • Kualitas model. Metode ilmu data tradisional tidak berfungsi dengan baik di ruang pencarian yang begitu luas.
  • Komputasi. Dibutuhkan komputasi dalam jumlah besar untuk menemukan pola dalam dimensi tinggi.

D. Kelebihan dan Kekurangan dari Dimensionality Reduction

Keuntungan dari Reduksi Dimensi (Dimensionality Reduction) :

  • Kompresi Data : Membantu dalam kompresi data, dan akibatnya mengurangi ruang penyimpanan.
  • Pengurangan Waktu Komputasi : Mengurangi waktu komputasi.
  • Penghapusan Fitur yang Redundan : Membantu menghilangkan fitur yang redundan, jika ada.
  • Visualisasi yang Ditingkatkan : Data dengan dimensi tinggi sulit untuk divisualisasikan, dan teknik reduksi dimensi dapat membantu dalam visualisasi data dalam 2D atau 3D, yang dapat membantu dalam pemahaman dan analisis yang lebih baik.
  • Pencegahan Overfitting : Data dengan dimensi tinggi dapat menyebabkan overfitting pada model machine learning, yang dapat mengakibatkan kinerja generalisasi yang buruk. Reduksi dimensi dapat membantu mengurangi kompleksitas data, dan dengan demikian mencegah overfitting.
  • Ekstraksi Fitur : Reduksi dimensi dapat membantu dalam mengekstraksi fitur penting dari data dengan dimensi tinggi, yang dapat berguna dalam pemilihan fitur untuk model machine learning.
  • Pra-Pemrosesan Data : Reduksi dimensi dapat digunakan sebagai langkah pra-pemrosesan sebelum menerapkan algoritma machine learning untuk mengurangi dimensi data dan dengan demikian meningkatkan kinerja model.
  • Peningkatan Kinerja : Reduksi dimensi dapat membantu meningkatkan kinerja model machine learning dengan mengurangi kompleksitas data, dan dengan demikian mengurangi noise dan informasi yang tidak relevan dalam data.

Kerugian dari Reduksi Dimensi (Dimensionality Reduction) :

  • Kehilangan Data : Mungkin menyebabkan kehilangan sejumlah data.
  • Korelasi Linear : PCA cenderung menemukan korelasi linear antar variabel, yang terkadang tidak diinginkan.
  • Kegagalan PCA : Gagal dalam kasus di mana rata-rata dan kovarian tidak cukup untuk mendefinisikan dataset.
  • Tidak Tahu Berapa Banyak Komponen Utama yang Harus Ditetapkan : Dalam praktiknya, beberapa aturan praktis diterapkan.
  • Interpretasi yang Sulit : Dimensi yang berkurang mungkin tidak mudah diinterpretasikan, dan mungkin sulit untuk memahami hubungan antara fitur asli dan dimensi yang berkurang.
  • Overfitting : Dalam beberapa kasus, reduksi dimensi dapat menyebabkan overfitting, terutama ketika jumlah komponen dipilih berdasarkan data pelatihan.
  • Sensitivitas terhadap Pencilan : Beberapa teknik reduksi dimensi sensitif terhadap pencilan, yang dapat menghasilkan representasi data yang bias.
  • Kompleksitas Komputasional : Beberapa teknik reduksi dimensi, seperti pembelajaran manifold, dapat memakan waktu komputasi, terutama ketika menangani dataset besar.

E. Taksonomi Algoritma

Taxonomy of Algorithms in Dimensionality Reduction

Sekarang kita telah melihat masalah dengan dimensi tinggi, mari kita lihat opsi yang kita miliki untuk memitigasinya. Kami membedakan antara pendekatan Seleksi Fitur dan Proyeksi Fitur.

1. Feature Selection

Pemilihan Fitur mempertahankan subkumpulan dimensi milik kumpulan data asli. Ini berarti memilih dimensi "terbaik" dari kumpulan data tertentu, dan hanya menyisakan sebagian dari n dimensi. Pemilihan fitur yang optimal mengharuskan kita memeriksa semua 2^n kombinasi, yang tidak dapat dikelola pada banyak aplikasi.

Teknik Seleksi Fitur umumnya dibagi menjadi 3 kategori :

  • Metode Filter secara rakus mengeliminasi fitur berdasarkan statistiknya. Contoh dari statistik tersebut bisa menjadi korelasi dengan target. Metode Filter adalah pendekatan yang paling sederhana dan cepat.
  • Metode Embedded merupakan bagian dari algoritma prediktif. Misalnya, algoritma berbasis pohon secara inheren memberi skor fitur dataset dan mengurutkannya berdasarkan kepentingan. Regularisasi Lasso L1 secara inheren mengeliminasi fitur yang redundan dengan menjatuhkan bobotnya menjadi nol.
  • Metode Wrapper menggunakan algoritma prediktif pada set validasi dengan subset fitur untuk mengidentifikasi yang paling berguna. Menemukan subset optimal memiliki biaya komputasi yang besar. Metode Wrapper membuat keputusan rakus seperti seleksi mundur/ke depan, yang dengan rakus mengeliminasi/memilih fitur satu per satu.

2. Feature Projection

Proyeksi Fitur — juga disebut sebagai Ekstraksi Fitur atau Transformasi Fitur — mengekstrak fitur yang "penting" dengan menerapkan transformasi pada fitur asli. Bergantung pada jenis transformasi yang diterapkan, pendekatan transformasi fitur dibagi lebih lanjut menjadi Linear dan Non-Linear :

  • Metode Linear menggabungkan secara linear fitur asli untuk menyusutkan dataset asli menjadi dimensi yang lebih sedikit. Metode umum melibatkan Analisis Komponen Utama (PCA), Analisis Diskriminan Linier (LDA), dan Dekomposisi Nilai Tunggal (SVD).
  • Metode Non-Linear lebih kompleks tetapi dapat menemukan reduksi dimensi yang berguna di mana metode linear gagal. Mengurangi dimensionalitas hanya menjadi rotasi dan skala untuk Gambar 1 tidak akan mungkin bagi metode linear. Metode Reduksi Dimensi Non-Linear melibatkan kernel PCA, t-SNE, Autoencoder, Peta Kendali Diri, IsoMap, dan UMap.

F. Jenis-jenis Algoritma Umum

Kami membahas beberapa algoritma yang paling umum digunakan untuk Pengurangan Dimensi pada subbagian berikutnya, yaitu PCA, Autoencoders, t-SNE, dan UMAP.

1. Principal Component Analysis (PCA)

Pada Gambar di atas menunjukkan bahwa PCA memproyeksikan titik-titik biru ke garis dan memaksimalkan jarak, atau varians, di antara titik-titik tersebut. Garis yang paling cocok ini adalah komponen utama pertama.

Analisis Komponen Utama (PCA) adalah metode statistik yang membuat fitur atau karakteristik data baru dengan menganalisis karakteristik dataset. Pada dasarnya, karakteristik data dirangkum atau digabungkan bersama. Anda juga dapat menganggap Analisis Komponen Utama sebagai "memampatkan" data menjadi hanya beberapa dimensi dari ruang dimensi yang lebih tinggi.

Untuk lebih konkret, sebuah minuman mungkin dijelaskan oleh banyak fitur, tetapi banyak dari fitur ini akan redundan dan relatif tidak berguna untuk mengidentifikasi minuman tersebut. Alih-alih menggambarkan anggur dengan fitur seperti aerasi, tingkat C02, dll., itu bisa lebih mudah dijelaskan oleh warna, rasa, dan usia.

Analisis Komponen Utama memilih karakteristik "utama" atau paling berpengaruh dari dataset dan membuat fitur berdasarkan pada mereka. Dengan memilih hanya fitur-fitur yang paling berpengaruh pada dataset, dimensionalitasnya dikurangi.

PCA mempertahankan korelasi antara variabel saat membuat fitur baru. Komponen utama yang dibuat oleh teknik ini adalah kombinasi linear dari variabel asli, dihitung dengan konsep yang disebut vektor eigen.

Diasumsikan bahwa komponen-komponen baru bersifat ortogonal, atau tidak berhubungan satu sama lain.

2. Autoencoders

Autoencoder adalah arsitektur jaringan saraf maju tanpa pengawas. Mereka belajar secara tidak terawasi dengan memaksa output jaringan untuk mendekati input jaringan (X = X'), seperti yang ditunjukkan pada Gambar di atas. Mereka berhasil mempelajari sesuatu yang lebih menarik daripada fungsi identitas karena adanya beberapa batasan dalam arsitektur jaringan. Batasan umum adalah memaksa sebagian jaringan memiliki neuron lebih sedikit daripada ukuran input (|z| < |X|). Penggabungan lapisan yang dihasilkan dapat digunakan untuk reduksi dimensionalitas non-linear.

Autoencoder bermanfaat tidak hanya untuk reduksi dimensionalitas. Sebagai contoh, denoising autoencoders adalah jenis khusus yang menghilangkan noise dari data, dilatih pada data di mana noise secara artifisial ditambahkan. Mereka baru-baru ini menjadi sorotan dengan model bahasa seperti BERT, yang merupakan jenis khusus dari denoising autoencoders.

3. Singular Value Decomposition (SVD)

Tujuan dari Singular Value Decomposition (SVD) adalah untuk menyederhanakan sebuah matriks dan mempermudah perhitungan dengan matriks tersebut. Matriks direduksi menjadi bagian-bagian konstituennya, mirip dengan tujuan dari Principal Component Analysis (PCA). Memahami seluk-beluk SVD tidak sepenuhnya diperlukan untuk mengimplementasikannya dalam model machine learning Anda, tetapi memiliki intuisi tentang bagaimana itu bekerja akan memberi Anda gagasan yang lebih baik tentang kapan menggunakannya.

SVD dapat dilakukan pada matriks kompleks atau bernilai riil, tetapi untuk menjelaskan ini dengan lebih mudah dimengerti, kita akan membahas metode untuk mendekomposisi matriks bernilai riil.

Saat melakukan SVD, kita memiliki sebuah matriks yang diisi dengan data dan kita ingin mengurangi jumlah kolom yang dimiliki matriks tersebut. Ini mengurangi dimensionalitas matriks sambil tetap mempertahankan sebanyak mungkin variabilitas dalam data.

Kita dapat mengatakan bahwa Matriks A sama dengan Transpos Matriks V :

Dengan asumsi kita memiliki suatu matriks A, kita dapat merepresentasikan matriks tersebut sebagai tiga matriks lain yang disebut U, V, dan D. Matriks A memiliki elemen asli sebanyak xy, sementara Matriks U adalah matriks ortogonal yang berisi xx elemen dan Matriks V adalah matriks ortogonal yang berisi yy elemen. Terakhir, D adalah matriks diagonal yang berisi xy elemen.

Mendekomposisi nilai untuk suatu matriks melibatkan mengonversi nilai-nilai singular dalam matriks asli menjadi nilai-nilai diagonal dari matriks baru. Matriks ortogonal tidak mengubah propertinya jika dikalikan dengan angka lain, dan kita dapat memanfaatkan properti ini untuk mendapatkan perkiraan dari matriks A. Dengan mengalikan matriks ortogonal bersama-sama dengan transpose matriks V, kita mendapatkan matriks yang setara dengan matriks asli A.

Ketika kita memecah/mendekomposisi matriks A menjadi U, D, dan V, kita kemudian memiliki tiga matriks berbeda yang berisi informasi dari Matriks A.

Ternyata bahwa kolom-kolom sebelah kiri dari matriks menyimpan sebagian besar data kita, dan kita dapat memilih hanya beberapa kolom ini untuk mendapatkan perkiraan yang baik dari Matriks A. Matriks baru ini jauh lebih sederhana dan lebih mudah untuk dikerjakan, karena memiliki dimensi yang lebih sedikit.

4. Linear Discriminant Analysis (LDA)

Analisis Diskriminan Linear beroperasi dengan memproyeksikan data dari grafik multidimensi ke grafik linear. Cara paling mudah untuk membayangkan ini adalah dengan grafik yang diisi dengan titik data dari dua kelas yang berbeda. Mengasumsikan bahwa tidak ada garis yang bisa dengan rapi memisahkan data menjadi dua kelas, grafik dua dimensi dapat direduksi menjadi grafik 1D. Grafik 1D ini kemudian dapat digunakan untuk, semoga, mencapai pemisahan yang terbaik dari titik-titik data.

Ketika LDA dilakukan, ada dua tujuan utama: meminimalkan varians dari dua kelas dan memaksimalkan jarak antara mean dari dua kelas data.

Untuk mencapai ini, suatu sumbu baru akan digambarkan dalam grafik 2D. Sumbu baru ini harus memisahkan dua titik data berdasarkan kriteria yang disebutkan sebelumnya. Setelah sumbu baru telah dibuat, titik-titik data dalam Grafik 2D digambar ulang sepanjang sumbu baru tersebut.

LDA melakukan tiga langkah berbeda untuk memindahkan grafik asli ke sumbu baru. Pertama, kepisahan antara kelas harus dihitung, dan ini didasarkan pada jarak antara mean kelas atau varians antarkelas. Pada langkah berikutnya, varians dalam kelas harus dihitung, yaitu jarak antara mean dan sampel untuk kelas-kelas yang berbeda. Akhirnya, ruang dimensional rendah yang memaksimalkan varians antarkelas harus dibangun.

LDA berfungsi paling baik ketika mean dari kelas-kelas berada jauh satu sama lain. Jika mean distribusi bersama, tidak mungkin bagi LDA untuk memisahkan kelas dengan sumbu linear baru.

5. t-distributed Stochastic Neighbor Embedding (t-SNE)

t-distributed Stochastic Neighbor Embedding (t-SNE)

t-SNE adalah algoritma Machine Learning untuk memvisualisasikan data berdimensi tinggi yang diusulkan oleh Laurens van der Maaten dan Geoffrey Hinton (Hinton yang sama yang mendapatkan Turing Award 2018 untuk kontribusinya pada Deep Learning).

Ada gagasan bahwa data alam berdimensi tinggi berada dalam manifold berdimensi rendah yang tertanam dalam ruang berdimensi tinggi. Dari semua gambar 32x32 yang mungkin, sebagian kecilnya sesuai dengan gambar digit, yang membentuk manifold dalam ruang 32x32. t-SNE bertujuan untuk mempertahankan topologi manifold ini dengan mempertahankan jarak lokal saat berpindah dari dimensi tinggi ke dimensi rendah.

6. Uniform Manifold Approximation and Projection (UMAP)

Visualisasi UMAP dan t-SNE pada Fashion Dataset (UMAP vs t-SNE Algorithm)

Menurut para penulis UMAP, "Algoritma UMAP bersaing dengan t-SNE untuk kualitas visualisasi, dan dengan argumen mempertahankan lebih banyak struktur global dengan kinerja waktu yang superior. Selain itu, UMAP tidak memiliki pembatasan komputasional pada dimensi embedding, menjadikannya layak sebagai teknik reduksi dimensi tujuan umum untuk machine learning."

Empat hal yang perlu diperhatikan di dalam UMAP adalah :

  • UMAP mencapai kinerja visualisasi yang sebanding dengan t-SNE.
  • UMAP mempertahankan lebih banyak struktur global. Sementara jarak antara cluster yang terbentuk dalam t-SNE tidak memiliki arti yang signifikan, dalam UMAP jarak antara cluster penting.
  • UMAP cepat dan dapat menyusun skala hingga Big Data.
  • UMAP tidak terbatas hanya untuk tujuan visualisasi seperti t-SNE. Ini dapat berfungsi sebagai algoritma Reduksi Dimensi tujuan umum.

G. Penerapannya dengan Python

Jika di atas secara Teori saja, di bawah ini kita akan menjelaskan mengenai penerapannya dengan Python.

1. Principal Component Analysis (PCA)

Analisis Komponen Utama, atau PCA, mungkin merupakan teknik paling populer untuk reduksi dimensi dengan data padat (sedikit nilai nol).

Perpustakaan scikit-learn menyediakan implementasi kelas PCA (Principal Component Analysis) yang dapat digunakan sebagai transformasi data reduksi dimensi. Argumen "n_components" dapat diatur untuk mengonfigurasi jumlah dimensi yang diinginkan dalam output transformasi.

Berikut adalah contoh lengkap dari evaluasi model dengan reduksi dimensi PCA.

# evaluate pca with logistic regression algorithm for classification
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression

# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)
# define the pipeline
steps = [('pca', PCA(n_components=10)), ('m', LogisticRegression())]
model = Pipeline(steps=steps)
# evaluate model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
# report performance
print('Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

Menjalankan contoh tersebut mengevaluasi pipa pemodelan dengan reduksi dimensi dan model prediksi regresi logistik.

Catatan : Hasil Anda mungkin bervariasi mengingat sifat stokastik dari algoritma atau prosedur evaluasi, atau perbedaan dalam presisi numerik. Pertimbangkan untuk menjalankan contoh beberapa kali dan membandingkan hasil rata-rata.

Dalam kasus ini, kita tidak melihat peningkatan kinerja model dengan menggunakan transformasi PCA.

Output :

Accuracy: 0.824 (0.034)

Jika ingin menampilkan Grafik PCA, silakan Tambahkan Kode ini :

import pandas as pd
import matplotlib.pyplot as plt  # Correct import statement for pyplot

# Fit PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# Create a DataFrame for visualization
df = pd.DataFrame(data={'PC1': X_pca[:, 0], 'PC2': X_pca[:, 1], 'Target': y})

# Scatter plot of PCA components
plt.figure(figsize=(10, 6))
colors = {0: 'red', 1: 'blue'}
plt.scatter(df['PC1'], df['PC2'], c=df['Target'].map(colors))
plt.title('PCA Components')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

Output :

2. Singular Value Decomposition

Dekomposisi Nilai Singular, atau SVD, adalah salah satu teknik paling populer untuk reduksi dimensi untuk data renggang (data dengan banyak nilai nol).

# evaluate pca with logistic regression algorithm for classification
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression

# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)
# define the pipeline
steps = [('pca', PCA(n_components=10)), ('m', LogisticRegression())]
model = Pipeline(steps=steps)
# evaluate model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
# report performance
print('Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

Menjalankan contoh tersebut mengevaluasi pipa pemodelan dengan reduksi dimensi dan model prediksi regresi logistik.

Catatan : Hasil Anda mungkin bervariasi mengingat sifat stokastik dari algoritma atau prosedur evaluasi, atau perbedaan dalam presisi numerik. Pertimbangkan untuk menjalankan contoh beberapa kali dan membandingkan hasil rata-rata.

Dalam kasus ini, kita tidak melihat peningkatan kinerja model dengan menggunakan transformasi SVD.

Output :

Accuracy: 0.824 (0.034)

Jika ingin menampilkan Grafik SVD, berikut ini ada sedikit Tambahan Kode Program-nya :

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.decomposition import TruncatedSVD  # SVD in scikit-learn
from sklearn.linear_model import LogisticRegression

# Define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)

# Define the pipeline with TruncatedSVD
steps = [('svd', TruncatedSVD(n_components=10)), ('m', LogisticRegression())]
model = Pipeline(steps=steps)

# Evaluate model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)

# Report performance
print('Accuracy: %.3f (%.3f)' % (np.mean(n_scores), np.std(n_scores)))

# Plot explained variance ratio for SVD
model.fit(X, y)
explained_variance_ratio = model.named_steps['svd'].explained_variance_ratio_

plt.bar(range(1, len(explained_variance_ratio) + 1), explained_variance_ratio)
plt.xlabel('Principal Components')
plt.ylabel('Explained Variance Ratio')
plt.title('Explained Variance Ratio for SVD')
plt.show()

Output :

3. Linear Discriminant Analysis (LDA)

Analisis Diskriminan Linear, atau LDA, adalah algoritma klasifikasi multi-kelas yang dapat digunakan untuk reduksi dimensionalitas.

Jumlah dimensi untuk proyeksi dibatasi menjadi 1 dan C-1, di mana C adalah jumlah kelas. Dalam hal ini, dataset kami adalah masalah klasifikasi biner (dua kelas), membatasi jumlah dimensi menjadi 1.

Pustaka scikit-learn menyediakan kelas LinearDiscriminantAnalysis implementasi Analisis Diskriminan Linear yang dapat digunakan sebagai transformasi data reduksi dimensionalitas. Argumen "n_components" dapat diatur untuk mengkonfigurasi jumlah dimensi yang diinginkan dalam output transformasi.

Contoh lengkap dari evaluasi model dengan reduksi dimensionalitas LDA tercantum di bawah ini.

# evaluate lda with logistic regression algorithm for classification
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LogisticRegression

# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)

# define the pipeline
steps = [('lda', LinearDiscriminantAnalysis(n_components=1)), ('m', LogisticRegression())]
model = Pipeline(steps=steps)

# evaluate model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)

# report performance
print('Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

Menjalankan contoh mengevaluasi pipa pemodelan dengan reduksi dimensionalitas dan model prediksi regresi logistik.

Catatan : Hasil Anda mungkin bervariasi mengingat sifat stokastik algoritma atau prosedur evaluasi, atau perbedaan dalam presisi numerik. Pertimbangkan untuk menjalankan contoh beberapa kali dan membandingkan hasil rata-rata.

Dalam kasus ini, kita dapat melihat peningkatan kinerja yang sedikit dibandingkan dengan fitur dasar pada data mentah.

Output :

Accuracy: 0.825 (0.034)

Jika ingin menampilkan Grafik LDA, silakan Tambahkan Kode ini :

# Fit the model and transform the data using LDA
X_lda = model.named_steps['lda'].fit_transform(X, y)

# Create a scatter plot of the reduced feature space
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_lda, np.zeros_like(X_lda), c=y, cmap='viridis', alpha=0.7)
plt.title('LDA Reduced Feature Space')
plt.xlabel('LD1')
plt.yticks([])
plt.legend(*scatter.legend_elements(), title='Classes')
plt.show()

Output :

Dan masih banyak lagi Contoh-contoh dari Pengurangan Dimensi (Dimensionality Reduction).


Itulah Teknik Dimensionality Reduction dengan menggunakan Python dalam Machine Learning (ML) dan Data Science. Mohon maaf apabila ada kesalahan apapun.

Terima Kasih 😄😘👌👍 :)

Wassalamu‘alaikum wr. wb. 

Post a Comment

Previous Post Next Post