Uygulama yoluyla PCA boyutsallığının azaltılmasının derin analizi

Genel Bakış

Bu makale temel olarak boyutsallık azaltma yöntemi olan PCA'yı (Temel Bileşen Analizi) tanıtmaktadır. Boyut azaltma, üç tür sorunu çözmeye kendini adamıştır:

  • Boyut azaltma boyutsal felaket sorununu hafifletebilir;
  • Boyut azaltma, verileri sıkıştırırken bilgi kaybını en aza indirebilir;
  • Yüzlerce boyutun veri yapısını anlamak zordur ve küçük boyutların verilerini görselleştirme yoluyla anlamak daha kolaydır.

Aşağıda, PCA'nın boyut azaltma etkisini üç açıdan anlayacağız: giriş, hesaplama adımları ve uygulama.

PCA tanıtımı

Özellik çıkarma ve işlemeyi anlarken, yüksek boyutlu özellik vektörlerini içeren problemler genellikle boyutsallık felaketine düşmeye eğilimlidir. Veri setinin boyutsallığı arttıkça, algoritma öğrenimi için gerekli örnek sayısı katlanarak artmaktadır. Bazı uygulamalarda bu kadar büyük veriyle karşılaşmak çok dezavantajlıdır ve büyük veri setinden öğrenmek daha fazla bellek ve işlem gücü gerektirir. Ek olarak, boyutsallık arttıkça, verilerin seyrekliği de gittikçe artacaktır. Aynı veri kümesini yüksek boyutlu bir vektör uzayında incelemek, aynı seyrek veri kümesine göre daha zordur.

Ana bileşen analizi, Karhunen-Loeve Dönüşümü (Karhunen-Loeve Dönüşümü) olarak da adlandırılır. , Yüksek boyutlu veri yapılarını keşfetmek için kullanılan bir teknolojidir. PCA genellikle yüksek boyutlu veri setlerinin araştırılması ve görselleştirilmesi için kullanılır. Ayrıca veri sıkıştırma, veri ön işleme vb. İçin de kullanılabilir. PCA, potansiyel olarak ilişkilendirilmiş yüksek boyutlu değişkenleri, ana bileşenler adı verilen doğrusal bağımsız düşük boyutlu değişkenlere sentezleyebilir. Yeni düşük boyutlu veri seti, orijinal veri değişkenlerini olabildiğince koruyacaktır.

PCA, boyut azaltımı sağlamak için verileri düşük boyutlu bir alt uzaya yansıtır. Örneğin, iki boyutlu bir veri setinin boyutsallık azaltımı, noktaları bir çizgiye yansıtmaktır Veri setinin her örneği bir değerle temsil edilebilir ve iki değer gerekli değildir. Üç boyutlu veri seti iki boyutluya indirgenebilir, yani değişkenler bir düzleme eşlenir. Genel olarak, nn boyutlu veri seti haritalama yoluyla kk boyutlu alt uzaya indirgenebilir, burada kn.

Bir çiçek yetiştirme aletleri broşürü için bir fotoğrafçı olduğunuzu ve bir su şişesini fotoğrafladığınızı varsayalım. Su ısıtıcısı üç boyutlu, ancak fotoğraflar iki boyutludur Su ısıtıcısını müşterilere daha kapsamlı göstermek için farklı açılardan birkaç fotoğraf çekmeniz gerekir. Aşağıdaki resim, dört yönden çektiğiniz bir resimdir:

İlk resimde, su ısıtıcısının arkası görülebiliyor, ancak önü görünmüyor. İkinci resim çekimin önüdür, musluğu görebilirsiniz, bu resim ilk resimdeki eksik bilgileri sağlayabilir ancak tencere sapı görünmez. Üçüncü üstten görünümden potun yüksekliği görülemez. Dördüncü resim gerçekten istediğiniz şeydir, su ısıtıcısının yüksekliği, üst kısmı, musluğu ve tutacağı açıkça görülebilir.

PCA'nın tasarım konsepti buna benzer: Mümkün olduğunca çok değişkeni korurken yüksek boyutlu veri setlerini düşük boyutlu uzaya eşleyebilir. PCA rotasyon veri seti, ana bileşenleri ile hizalanır ve çoğu değişken, birinci temel bileşende tutulur. Aşağıdaki şekilde gösterilen veri kümesine sahip olduğumuzu varsayalım:

Veri seti, başlangıç noktasından sağ üst köşeye uzanan uzun ve ince bir elips gibi görünür. Tüm veri kümesinin boyutsallığını azaltmak için noktaları bir doğruya eşlemeliyiz. Aşağıdaki şekildeki iki çizginin tümü veri kümesi tarafından eşlenebilir. En çok hangi örnekle hangi çizgi eşleştirilir?

Açıktır ki, siyah noktalı çizgiye eşlenen numunenin değişimi, kırmızı noktalı çizgiye eşlenen değişiklikten çok daha büyüktür. Aslında, bu siyah kesikli çizgi ilk temel bileşendir. İkinci temel bileşen, birinci temel bileşene dik olmalıdır; bu, ikinci temel bileşenin istatistiksel olarak bağımsız olması gerektiği ve aşağıdaki şekilde gösterildiği gibi, birinci ana bileşene dik yönde görüneceği anlamına gelir:

Sonraki her bir temel bileşen, mümkün olduğu kadar çok sayıda kalan değişkeni de tutacaktır Tek gereksinim, her bir ana bileşenin bir önceki ana bileşene ortogonal olması gerektiğidir. Şimdi veri setinin üç boyutlu olduğunu varsayarsak, dağılım grafiği bir eksen boyunca dönen bir disk gibi görünür.

Bu noktalar, diski tamamen iki boyutlu hale getirmek için döndürülebilir ve dönüştürülebilir. Şimdi bu noktalar bir elips gibi görünüyor.Üçüncü boyutta temelde değişken yoktur ve göz ardı edilebilir. Veri setinin farklı boyutlarındaki varyans dağılımı eşit olmadığında PCA en kullanışlı olanıdır. (Küresel kabuk şeklinde bir veri kümesiyse, PCA etkili bir şekilde çalışamaz, çünkü tüm yönlerdeki varyanslar eşittir; çok fazla bilgi kaybetmeden boyutların hiçbiri göz ardı edilemez).

PCA hesaplama adımları

PCA'yı anlamak için üç önemli temel kavram vardır: Varyans, kovaryans ve kovaryans matrisi

varyans (Varyans), bir veri kümesinin dağılma derecesinin bir ölçüsüdür. Varyans, her bir örnek ile örnek ortalaması arasındaki farkların karelerinin toplamının ortalamasıdır:

Kovaryans (Kovaryans), iki değişkenin değişikliklerinin senkronizasyon derecesini ölçmek, yani iki değişken arasındaki doğrusal korelasyon derecesini ölçmektir.

İki değişkenin kovaryansı 0 ise, istatistiksel olarak iki değişkenin doğrusal olarak bağımsız olduğu kabul edilir. İki ilişkisiz değişkenin tamamen bağımsız olmadığını, ancak doğrusal bir korelasyon olmadığını unutmayın. Aşağıdaki şekilde hesaplanmıştır:

Kovaryans 0'dan büyükse, bir değişkenin arttığı ve bir başka değişkenin de artacağı, yani pozitif bir korelasyon olduğu anlamına gelir, kovaryansın 0'dan küçük olması bir değişkenin arttığı ve bir diğerinin azalacağı anlamına gelir, yani negatif bir korelasyon.

Kovaryans matrisi (Kovaryans matrisi), veri setindeki iki değişkenin kovaryansından oluşur. Matrisin (i, j) (i, j). Elemanı, veri setindeki iith ve jjth elemanlarının kovaryansıdır. Örneğin, üç boyutlu verilerin kovaryans matrisi aşağıdaki gibidir:

Aşağıdaki tablodaki verilerin kovaryans matrisini hesaplayalım:

Python'daki numpy paketi, ortalama ve kovaryansı hesaplar:

numpy'yi np olarak içe aktar

X =

baskı (np.ortalama (X, eksen = 0))

baskı (np.cov (np.array (X) .T))

Üç değişkenin örnek ortalama değerleri sırasıyla 2.125, 0.075 ve -1.275'tir; kovaryans matrisi:

Özvektör ve özdeğer

vektör Büyüklüğü ve yönü olan geometrik bir kavramdır.

Özellik vektörü (Özvektör), aşağıdaki formülü sağlayan bir matristen elde edilen sıfır olmayan bir vektördür:

V özvektör olduğunda, A kare matristir ve özdeğerdir. A dönüşümünden sonra, özvektörün yönü değişmeden kalır, ancak boyutu özdeğerin katları halinde değişmiştir. Başka bir deyişle, bir matris ile çarpılan bir özvektör, özvektörü ölçeklendirmeye eşittir. Almanca eigen kelimesi "ait veya tuhaf" anlamına gelir; matrisin özellik vektörü, veri setine ait olan ve yapısını açıklayan bir vektördür.

Özvektörler ve özdeğerler yalnızca kare matrislerden türetilebilir ve tüm kare matrislerin özvektörleri ve öz değerleri yoktur. Bir matrisin özvektörleri ve özdeğerleri varsa, matrisin her boyutunun bir çift özvektör ve özdeğer vardır. Matrisin temel bileşenleri, karşılık gelen özdeğerlere göre kovaryans matrisinin özvektörlerinin sıralanmasıyla elde edilir. En büyük özdeğer ilk temel bileşendir, ikinci en büyük özdeğer ikinci temel bileşendir ve bu böyle devam eder.

Aşağıdaki matrisin özvektörlerini ve özdeğerlerini hesaplayın:

Özellik vektörü ile çarpılan önceki AA formülüne göre, özellik vektörü ile çarpılan özellik değerine eşit olmalıdır. Çözülecek karakteristik denklemi oluşturuyoruz:

Karakteristik denklemden matrisin çarpımının matris determinantının ve özdeşlik matrisinin ve özdeğerinin 0 olduğu görülebilir:

Matrisin her iki öz değeri de -1'e eşittir. Şimdi özvektörü çözmek için özdeğerini kullanın. = 1'i şuraya getirin:

Almak:

F:

Denklemi karşılayan her şey

Sıfır olmayan vektör (alma

) Özellik vektörleri olarak kullanılabilir:

PCA, L2 normu olan birim özellik vektörünü gerektirir

Özellik vektörü 1'e eşittir.

Daha sonra birim özellik vektörü:

Daha sonra birim özellik vektörü:

Burada, elle hesaplanan özellik vektörünün doğru olup olmadığını kontrol etmek için numpy'yi kullanabilirsiniz. Eig işlevi, bir özdeğer ve özvektör demeti döndürür:

> > > numpy'yi np olarak içe aktar

> > > w, v = np.linalg.eig (np.array ())

> > > print ('Karakteristik değer: {} \ nKarakteristik vektör: {}'. format (w, v))

Çıktı (buradaki özellik değeri, kayan nokta verileri için python derleyicisinin doğruluk gereksinimleri nedeniyle 1'den farklıdır):

Özdeğerler:

Özellik vektörü: >

Boyutsallığı azaltmak için PCA kullanın

Aşağıdaki tablodaki iki boyutlu verileri tek boyutlu hale getirmek için PCA yöntemini kullanalım:

PCA'nın ilk adımı, örnek ortalamasını örnek verilerinden çıkarmaktır:

Ardından, verilerin temel bileşenlerini hesaplıyoruz. Daha önce de belirtildiği gibi, Matrisin temel bileşeni, kovaryans matrisinin özvektörlerinin karşılık gelen öz değerlere göre sıralanmasıyla elde edilir. Temel bileşenler iki şekilde hesaplanabilir: İlk yöntem, veri kovaryans matrisini hesaplamaktır. Kovaryans matrisi bir kare matris olduğundan, özdeğerleri ve özvektörleri hesaplamak için önceki yöntemi kullanabiliriz. İkinci yöntem, kovaryans matrisinin özvektörlerini ve özdeğerlerinin kareköklerini bulmak için veri matrisinin tekil değer ayrışımını kullanmaktır. İlk önce ilk yöntemi tanıtıyoruz, ardından ikinci yöntem olan scikit-learn'ün PCA uygulamasını tanıtıyoruz. Yukarıdaki veri setinin açıklayıcı değişken kovaryans matrisi aşağıdaki gibidir:

Yukarıda açıklanan yöntemi kullanarak, özdeğerler 1.25057433 ve 0.03398123'dür ve birim özvektör:

Aşağıda verileri temel bileşenlerle eşleştiriyoruz. İlk temel bileşen, en büyük öz değere karşılık gelen özvektördür, bu nedenle her bir sütunu ana bileşenin özvektörü olan bir dönüşüm matrisi oluşturmalıyız. 5 boyutlu veriyi 3 boyutluya düşürmek istiyorsak, dönüşüm matrisi olarak 3 boyutlu bir matris kullanmamız gerekir. Bu örnekte, iki boyutlu verilerimizi tek boyutlu olarak eşleyeceğiz, bu nedenle özellik vektöründeki ilk temel bileşeni dönüşüm matrisi olarak kullanmamız gerekiyor. Son olarak, dönüşüm matrisini veri matrisiyle çarpıyoruz. Aşağıdaki, ilk temel bileşen eşlemesinin sonucudur:

Numpy paketindeki matrix çağrısı aracılığıyla uygulama süreci aşağıdaki gibidir:

numpy'yi np olarak içe aktar

x = np.mat (,

>)

x = x.T

T = x-x.ortalama (eksen = 0)

C = np.cov (x.T)

w, v = np.linalg.eig (C)

v_ = np.mat (v) # Her özellik değeri, özellik matrisinin her bir sütun vektörüne karşılık gelir

v_ = v_.T # Varsayılan olarak, bir satır vektörü olarak kaydedilir ve formülde sütun vektör formuna dönüştürülür

y = T * v_

baskı (y)

PCA kullanımı

Yüksek boyutlu veri görselleştirme

İki boyutlu veya üç boyutlu veriler, görselleştirme yoluyla desenleri keşfetmek daha kolaydır. Yüksek boyutlu bir veri seti grafiksel olarak gösterilemez, ancak onu iki boyutlu veya üç boyutlu verilere indirgeyerek, boyut azaltma yöntemleriyle görselleştirebiliriz. Fisher, 1936'da üç çeşit süsen (Iris Data) topladı: Setosa, Virginica ve Versicolour. Açıklayıcı değişken, yaprakların ve çanak yaprakların uzunluk ve genişliğinin ölçülen değeridir ve yanıt değişkeni çiçeğin türüdür. İris veri seti genellikle sınıflandırma modeli testi için kullanılır ve ayrıca scikit-learn'de de mevcuttur. Kolay görselleştirme için iris veri setini iki boyutlu verilere indirelim:

% matplotlib satır içi

matplotlib.pyplot dosyasını plt olarak içe aktar

sklearn.decomposition'dan içe aktarma PCA

sklearn.datasets'den import load_iris

İlk olarak, iris çiçeği veri setini ve PCA tahmincisini içe aktarıyoruz. PCA sınıfı, ana bileşenlerin sayısını hiperparametre olarak alır. Diğer tahmin ediciler gibi, PCA da azaltılmış boyutluluk veri matrisini döndürmek için fit_transform () kullanır:

data = load_iris ()

y = data.target

X = data.data

pca = PCA (n_components = 2)

azaltılmış_X = pca.fit_transform (X)

Son olarak grafiği çiziyoruz:

red_x, red_y =,

blue_x, blue_y =,

green_x, green_y =,

aralıktaki i için (len (azaltılmış_X)):

eğer y == 0:

red_x.append (indirimli_X )

red_y.append (indirimli_X )

elif y == 1:

blue_x.append (indirimli_X )

blue_y.append (indirimli_X )

Başka:

green_x.append (indirimli_X )

green_y.append (indirimli_X )

plt.scatter (red_x, red_y, c = 'r', işaretçi = 'x')

plt.scatter (blue_x, blue_y, c = 'b', işaretçi = 'D')

plt.scatter (green_x, green_y, c = 'g', işaretçi = '.')

plt.show ()

Boyut azaltma verileri yukarıdaki şekilde gösterilmektedir. Her veri setindeki üç sınıf farklı sembollerle işaretlenmiştir. Bu iki boyutlu veri grafiğinden, bir sınıfın diğer iki örtüşen sınıftan tamamen ayrıldığı açıktır. Bu sonuç, bir sınıflandırma modeli seçmemize yardımcı olabilir.

Yüz tanıma

Şimdi bir yüz tanıma problemini çözmek için PCA kullanalım. Yüz tanıma, bir kişiyi bir fotoğraftan tanımak için kullanılan denetimli bir sınıflandırma görevidir. Bu örnekte, Cambridge Üniversitesi ATT Laboratuvarı'ndan Yüzler Veritabanımız veri kümesini ( kullanıyoruz. Set, 40 kişinin her birinin 10 fotoğrafını içeriyor. Bu fotoğraflar farklı ışık koşullarında çekilmiştir ve her fotoğraftaki ifadeler farklıdır. Fotoğrafların tamamı siyah beyaz ve boyutları 92 x 112 piksel. Bu resimler büyük olmamakla birlikte her resmin piksel yoğunluğuna göre düzenlenen öznitelik vektörü de (92 x 112 =) 10304 boyutuna sahiptir. Bu yüksek boyutlu verilerin eğitimi, fazla uydurmayı önlemek için çok sayıda örnek gerektirebilir. Ve örneklem boyutumuz büyük değil, bu yüzden bu fotoğrafları temsil edecek bazı temel bileşenleri hesaplamak için PCA kullanıyoruz.

Fotoğrafın piksel yoğunluğu matrisini bir vektöre dönüştürebilir ve ardından bir matris oluşturmak için eğitim fotoğraflarının tüm vektörlerini kullanabiliriz. Her bir fotoğraf, veri setinin temel bileşenlerinin doğrusal bir kombinasyonudur. Yüz tanıma teorisinde, bu temel bileşenlere özyüzler denir. Özyüz, yüzün standartlaştırılmış bir bileşeni olarak kabul edilebilir. Veri setindeki her yüz, bazı standart yüzlerin bir kombinasyonu veya özyüzlerin en önemli doğrusal kombinasyonunun bir yaklaşımı ile oluşturulabilir.

os içe aktarma yürüyüşünden, yol

numpy'yi np olarak içe aktar

mahotaları mh olarak içe aktar

sklearn.cross_validation'dan içe aktarma train_test_split

sklearn.cross_validation'dan içe aktarma cross_val_score

sklearn.preprocessing ithalat ölçeğinden

sklearn.decomposition'dan içe aktarma PCA

sklearn.linear_model'den import LogisticRegression

sklearn.metrics'den sınıflandırma içe aktarma

X =

y =

Aşağıda fotoğrafları bir Numpy dizisine aktarıyoruz ve ardından piksel matrisini bir vektöre dönüştürüyoruz:

dir_path, dir_names, file_names in walk ('C: / Users / HLB / Desktop / first blog / att_faces /'):

#Walk () işlevi verilerin mutlak yolunu saklar ve eğik çizginin yönüne dikkat eder.

file_names içindeki fn için:

fn == 'pgm' ise:

image_filename = yol.join (dir_path, fn)

X.append (ölçek (mh.imread (resim_dosyaadı, as_grey = Doğru) .reshape (10304) .astype ('float32')))

y.append (dir_path)

X = np.array (X)

Ardından, eğitim setini ve test setini oluşturmak için çapraz kontrolü kullanırız ve eğitim setinde PCA'yı kullanırız:

X_train, X_test, y_train, y_test = train_test_split (X, y)

pca = PCA (n_components = 150)

Tüm numuneleri 150 boyuta indirip ardından lojistik regresyon sınıflandırıcı eğitiyoruz. Veri seti 40 sınıf içerir; scikit-learn'ün alt katmanı, ikili sınıflandırıcı oluşturmak için otomatik olarak bire karşı tüm stratejiyi kullanır:

X_train_reduced = pca.fit_transform (X_train)

X_test_reduced = pca.transform (X_test)

print ('Eğitim seti verilerinin orijinal boyutu: {}'. format (X_train.shape))

print ('PCA boyutsallığının azaltılmasından sonraki eğitim seti verileri: {}'. format (X_train_reduced.shape))

sınıflandırıcı = LogisticRegression ()

doğruluklar = cross_val_score (sınıflandırıcı, X_train_reduced, y_train)

Eğitim seti verilerinin orijinal boyutu: (300, 10304) PCA boyutsallığının azaltılmasından sonraki eğitim seti verileri: (300, 150)

Son olarak, sınıflandırıcının performansını değerlendirmek için çapraz doğrulama ve test setleri kullanıyoruz. Sınıflandırıcının ortalama kapsamlı değerlendirme indeksi (F1 puanı) 0.88'dir, ancak eğitilmesi daha fazla zaman alır ve daha fazla eğitim örneği içeren uygulamalarda daha yavaş olabilir.

print ('Çapraz doğrulama doğruluk oranı: {} \ n {}'. format (np.ortalama (doğruluklar), doğruluklar))

classifier.fit (X_train_reduced, y_train)

tahminler = sınıflandırıcı.predict (X_test_reduced)

baskı (sınıflandırma_raporu (y_test, tahminler))

Nihai analiz sonucu:

Özet

Bu makale temel olarak PCA boyutsallığı azaltma problemini tanıtmaktadır. Yüksek boyutlu veriler kolayca görselleştirilemez. Tahminci yüksek boyutlu veri setleri üzerinde eğitim aldığında boyutsal felaketler de meydana gelebilir. Bu problemleri hafifletmek için temel bileşen analizi yöntemi kullanılır ve olası açıklayıcı değişkenlerin korelasyonlu yüksek boyutlu veri seti, verilerin düşük boyutlu bir altuzay ile eşleştirilmesiyle doğrusal olarak bağımsız düşük boyutlu bir veri setine indirgenir. Son olarak, PCA, görselleştirme için dört boyutlu iris veri setini iki boyutlu verilere indirgemek için kullanılır ve PCA, bir yüz tanıma sisteminde kullanılır.

"Kaçak Kardeşler" yeni kadro resmi duyurusu, eski üyelerden sadece üçü ve yeni bir kız grubu üyesi eklendi
önceki
Liu Xiaoqing güneşte yaralandı ve yüzün tamamı her zamankinden gerçekten farklı, gerçek bir burun ve gerçek bir yüz olduğunu iddia ediyor
Sonraki
Derin öğrenme hedef tespit yönteminin YOLO'sunu derinlemesine anlayın
Kabul edilemez! WeChat nihayet vicdanlı, resmi hesap platformu sessizce göz alıcı işlevi başlattı, netizenler merhaba
Xu Haiqiao "My Girlfriend" de göründü ve Wu Xin'e bir demet çiçek verdi Peder Wu mutlu bir şekilde gülümsedi.
Hebei suçu işledi ve Nanjing'e gitti, ancak "Kurnaz Tavşan Üç Mağarası" hala yakalandı
Tamamen yenilenmiş ikinci futbol endüstrisi fuarı, uygulayıcıların 800 milyarlık pazar alanını keşfetmelerine yardımcı oluyor
Elektrik çağında bir Godzilla'ya ihtiyacımız var!
Ağır mücadele: sınıflandırma algoritması uygulaması ve Python araçlarının nasıl kullanılacağı
Kia konsept otomobil 21 cep telefonu ekranları büyük bir merkezi kontrol ekranı oluşturuyor
Xiang Zuonun annesi gösteride Guo Bitingi övdü ve Guonun babası da Xiang Zuoya çok sevecen 6 kelime söyledi.
Fransa "Baget" yazısını tanıtıyor, Jiang Mi Tiao memnuniyetsizliğini ifade ediyor
Yeni Çin Erkek Basketbol Takımının ilk galibiyetinin ardında, milli basketbol takımının yeni iş döngüsü yeni zirvelere ulaşacak
SanDiskin en güçlü USB flash sürücüsü piyasaya sürüldü: yazma hızı SSD'ye kıyasla 380MB / s'ye ulaşabilir!
To Top