Sinopsis
Contents
Bila kalian bekerja dengan principal component analyst (PCA ) dialih bahasakan menjadi analisis komponen utama (AKU) maka akan ada perhitungan sebuah eigen value dan eigen vector. Tools yang sering digunakan untuk perhitungan PCA biasanya menggunakan matlab ataupun Python-Numpy. Nah pembahasan kali ini mengenai hasil yang didapatkan mengapa berbeda antara matlab dan python-numpy.
Apa itu nilai eigen
Perhatikan persamaan matematika dibawah ini bahwa jika suatu matriks bujur sangkar, dikali dengan sebuah vektor bukan nol, diatur sedimikian rupa sehingga hasilnya sama dengan perkalian sebuah bilangan skalar dengan vektor tak nol itu sendiri, inilah yang dinamakan Nilai Eigen dan Vektor Eigen.
jika adalah matrix
adalah vektor eigen
adalah nilai eigen maka
Sehingga
dapat dilambangkan menjadi vector eigen, nilai eigen
nilai eigen dikalikan dengan matrix identitas, maka
Contoh perhitungan manual eigen
Berikut adalah 2 contoh soal bagaimana menentukan nilai dan vektor Eigen suatu matriks:
Tentukan nilai dan vektor eigen dari matrix ?
Nilai eigen
untuk menentukan nilai yang skalar, berlaku:
sehingga atau
didapatkan
Perhatikan persamaan berikut untuk menguji vektor eigen
Untuk nilai maka:
terbentuk sistem persamaan linear
diperoleh dan
pembuktian
Untuk nilai maka:
terbentuk sistem persamaan linear
diperoleh dan
pembuktian
Hasil dari Matlab dan Python-Numpy
Penulis disini bukan membahas mengenai cara diatas, akan tetapi mengungkap persoalan hasil perhitungan eigen di Matlab dan Numpy (Pustaka matrix di python) koq berbeda??Coba perhatikan berikut. Jika kalian gunakan code matlab berikut
clc;clear all;close all; A = [1,-2;1,4] [vektor_eigen,nilai_eigen] = eig(A); vektor_eigen nilai_eigen = diag(nilai_eigen)
Menghasilkan
A = 1 -2 1 4 vektor_eigen = -0.8944 0.7071 0.4472 -0.7071 nilai_eigen = 2 3
Mari kita uji apakah masih berlaku?
Kita akan menggunakan nilai eigen ke 1 yaitu bernilai 2
%lakukan uji no_uji = 1; sisi_kiri = A*vektor_eigen(:,no_uji) sisi_kanan = nilai_eigen(no_uji)*vektor_eigen(:,no_uji)
Ternyata menghasilkan yang sama
sisi_kiri = -1.7889 0.8944 sisi_kanan = -1.7889 0.8944
Kalaupun no_uji diganti dengan nilai eigen ke 2 yaitu bernilai 3, pun akan sama hasil nya
sisi_kiri = 2.1213 -2.1213 sisi_kanan = 2.1213 -2.1213
Menghasilkan vektor_eigen = [-0.8944, 0.7071; 0.4472, -0.7071] dan Nilai_eigen = [2,3]
Mari kita coba versi python dengan numpy sebagai pustaka nya!
import numpy as np A = np.array([[1,-2],[1,4]]) [nilai,vektor] = np.linalg.eig(A) print('A = ',A) print('nilai = ',nilai) print('vektor = ', vektor) index = 0 sisi_kiri = np.dot(A,vektor[:,index]) sisi_kanan = nilai[index]*vektor[:,index] print ('sisi_kiri\n',sisi_kiri) print ('sisi_kanan\n',sisi_kanan)
Menghasilkan nilai yang sama
A = [[ 1 -2] [ 1 4]] nilai = [2. 3.] vektor = [[-0.89442719 0.70710678] [ 0.4472136 -0.70710678]] sisi_kiri [-1.78885438 0.89442719] sisi_kanan [-1.78885438 0.89442719]
Itu artinya bisa solusi non trivial (kebetulan saja menggunakan data ukuran 2*2, bila saja menggunakan ukuran data yang agak besar, maka hasil di matlab dan numpy-python bisa berbeda!) tapi sebetulnya itu sama bila mengacu definisi berikut: