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:
![]()