Harbin Institute of Technology yüksek lisans öğrencileri Python'da 11 klasik veri boyutluluğunu azaltma algoritması uyguladılar ve kaynak kodu kitaplığı açıldı

Leifeng.com AI geliştiricisinin notu: İnternetteki çeşitli boyut azaltma algoritmaları hakkındaki bilgiler eşit değildir ve çoğu kaynak kodu sağlamaz. İşte Python'u 11 klasik veri çıkarma (veri boyutluluğunu azaltma) algoritmasını uygulamak için kullanan bir GitHub projesi: PCA, LDA, MDS, LLE, TSNE, vb. İlgili bilgiler ve ekran efektleriyle; makine öğrenimi için çok uygun Veri madenciliğine yeni başlayanlar ve arkadaşlar.

Veri boyutluluğu neden azalır?

Sözde boyutsallık indirgeme, D vektörleri Xi'de bulunan yararlı bilgileri temsil etmek için bir dizi d vektörü Zi kullanmaktır, burada d

Genel olarak, çoğu veri kümesinin yüzlerce hatta binlerce boyuta sahip olduğunu, klasik MNIST'in ise 64 boyuta sahip olduğunu bulacağız.

MNIST El Yazısı Rakam Veri Kümesi

Bununla birlikte, pratik uygulamalarda, kullandığımız faydalı bilgiler bu kadar yüksek bir boyut gerektirmez ve her ek boyut için gereken örnek sayısı katlanarak artar, bu da doğrudan büyük bir "boyut felaketine" yol açabilir. "ve veri boyutunda azalma sağlanabilir:

  • Veri kümesinin kullanımını kolaylaştırın

  • Değişkenlerin birbirinden bağımsız olduğundan emin olun

  • Algoritma hesaplama maliyetini azaltın

  • Gürültüyü kaldır

Bu bilgileri doğru bir şekilde işleyip boyut azaltmayı doğru ve etkili bir şekilde gerçekleştirdiğimizde, bu, hesaplama miktarını azaltmaya ve makine işlemlerinin verimliliğini artırmaya büyük ölçüde yardımcı olacaktır. Veri boyutluluğunu azaltma ayrıca genellikle metin işleme, yüz tanıma, görüntü tanıma, doğal dil işleme ve diğer alanlarda kullanılır.

Veri boyutluluğunu azaltma ilkesi

Genellikle yüksek boyutlu uzaydaki veriler seyrek olarak dağıtılmış olarak görünecektir, bu nedenle boyutsallığı azaltma sürecinde genellikle bir miktar veri azaltma yaparız. Bu veriler, fazlalık verileri, geçersiz bilgileri ve tekrarlanan ifade içeriğini içerir.

Örneğin: Bir 1024 * 1024 resim mevcutsa, merkez 50 * 50 alan hariç, diğer konumların tümü sıfırdır, bu sıfır bilgiler işe yaramaz bilgiler olarak sınıflandırılabilir; simetrik bir grafik için, bilginin simetrik kısmı olabilir Yinelenen bilgiler olarak sınıflandırılmıştır.

Bu nedenle, klasik boyut azaltma tekniklerinin çoğu da bu içeriğe dayalı olarak geliştirilmiştir.Bunlar arasında boyutluluk azaltma yöntemleri doğrusal ve doğrusal olmayan boyut azaltma, doğrusal olmayan boyut azaltma ise çekirdek işlevi tabanlı ve özdeğer tabanlı yöntemler olarak ikiye ayrılır.

  • Doğrusal boyutluluk azaltma yöntemi:

PCA, ICA LDA, LFA, LPP (LE'nin doğrusal gösterimi)

  • Doğrusal olmayan boyutluluk azaltma yöntemi:

Çekirdek işlevi-KPCA, KICA, KDA'ya dayalı doğrusal olmayan boyutluluk azaltma yöntemi

Özdeğerlere dayalı doğrusal olmayan boyutluluk azaltma yöntemi (akış örüntüsü öğrenme) -ISOMAP, LLE, LE, LPP, LTSA, MVU

Harbin Teknoloji Enstitüsü'nde bilgisayar teknolojisi alanında yüksek lisans öğrencisi olan Heucoder, PCA, KPCA, LDA, MDS, ISOMAP, LLE, TSNE, AutoEncoder, FastICA, SVD, LE ve LPP dahil olmak üzere 12 klasik boyut küçültme algoritmasını derledi ve ilgili bilgileri sağladı. Bilgi, kod ve ekran, aşağıdakiler, boyut azaltma algoritmasının spesifik çalışmasını tanıtmak için örnek olarak PCA algoritmasını esas alacaktır.

Temel bileşen analizi (PCA) boyutsallık azaltma algoritması

PCA, yüksek boyutlu uzaydan düşük boyutlu uzaya haritalamaya dayanan bir haritalama yöntemidir.Aynı zamanda en temel denetimsiz boyutsallık azaltma algoritmasıdır.Amacı, verinin en çok değiştiği yöne veya yeniden yapılandırma hatasının en aza indirildiği yöne projeksiyon yapmaktır. . 1901'de Karl Pearson tarafından önerildi ve bir doğrusal boyut indirgeme yöntemidir. PCA ile ilgili ilke genellikle maksimum varyans teorisi veya minimum hata teorisi olarak adlandırılır. İkisinin hedefleri aynı, ancak süreç odağı farklı.

Maksimum varyans teorisi boyutluluk azaltma ilkesi

Bir dizi N boyutlu vektörü K-boyutuna indirgeyin (K, 0'dan büyük, N'den küçük) Amaç, K birim ortogonal tabanları seçmektir.Her alan arasındaki COV (X, Y) 0'dır ve alanın varyansı tükenmiştir. Büyük olabilir. Bu nedenle, maksimum varyans, projeksiyon verilerinin varyansını maksimize etmektir.Bu süreçte, Xmxn veri setinin en iyi projeksiyon uzayını Wnxk, kovaryans matrisini vb. Bulmamız gerekir. Algoritma akışı:

  • Algoritma girişi: veri kümesi Xmxn;

  • X veri kümesinin ortalama değerini Xortalama sütununa göre hesaplayın ve ardından Xnew = X Xortalama olarak ayarlayın;

  • Xnew matrisinin kovaryans matrisini çözün ve Cov olarak kaydedin;

  • Kovaryans matrisi COv'nin özdeğerlerini ve karşılık gelen öz vektörlerini hesaplayın;

  • Özdeğerleri en büyükten en küçüğe sıralayın, aralarında en büyük k'yi seçin ve özvektör matrisi Wnxk'yi oluşturmak için sütun vektörleri olarak karşılık gelen k özvektörlerini kullanın;

  • XnewW'yi hesaplayın, yani Xnew veri kümesini seçilen özellik vektörüne yansıtın, böylece ihtiyacımız olan azaltılmış boyutsallık veri kümesini XnewW elde ederiz.

Minimal Hata Teorisi Prensibi

Minimum hata, ortalama projeksiyon maliyetini en aza indiren doğrusal projeksiyondur.Bu süreçte, kare hata değerlendirme fonksiyonu J0 (x0) ve diğer parametreleri bulmamız gerekir.

Ayrıntılı adımlar için lütfen "Sıfırdan Temel Bileşen Analizi (PCA) Algoritmasını Elde Etme" bölümüne bakın:

https://blog.csdn.net/u013719780/article/details/78352262

Temel bileşen analizi (PCA) kod uygulaması

PCA algoritmasının kodu aşağıdaki gibidir:

__gelecekten__ içe aktarım yazdırma_işlevi

sklearn ithal veri kümelerinden

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

matplotlib.cm'yi cmx olarak içe aktar

matplotlib.colors'u renk olarak içe aktar

numpy'yi np olarak içe aktar

% matplotlib satır içi

def shuffle_data (X, y, seed = Yok):

tohum ise:

np.random.seed (tohum)

idx = np.arange (X.shape)

np.random.shuffle (idx)

dönüş X, y

# Normalleştirilmiş veri kümesi X

def normalize (X, eksen = -1, p = 2):

lp_norm = np.atleast_1d (np.linalg.norm (X, p, eksen))

lp_norm = 1

dönüş X / np.expand_dims (lp_norm, eksen)

# Standartlaştırılmış veri kümesi X

def standardize (X):

X_std = np.zeros (X.shape)

ortalama = X.ortalama (eksen = 0)

std = X.std (eksen = 0)

# Bölme işlemleri yaparken, paydanın 0'a eşit olamayacağını daima unutmayın

# X_std = (X-X.ortalama (eksen = 0)) / X.std (eksen = 0)

aralıktaki sütun için (np.shape (X)):

std ise:

X_std = (X_std-ortalama) / std

dönüş X_std

# Veri setini eğitim setine ve test setine bölün

def train_test_split (X, y, test_size = 0.2, shuffle = True, seed = None):

karıştırılırsa:

X, y = shuffle_data (X, y, tohum)

n_train_samples = int (X.shape * (1-test_size))

x_train, x_test = X, X

y_train, y_test = y, y

x_train, x_test, y_train, y_test döndür

# X matrisinin kovaryans matrisini hesaplayın

def hesapla_ kovaryans_matrix (X, Y = np.empty ((0,0))):

Y. değilse:

Y = X

n_samples = np.shape (X)

kovaryans_matrix = (1 / (n_örnekler-1)) * (X-X.ortalama (eksen = 0)) T.dot (Y-Yortamı (eksen = 0))

dönüş np.array (covariance_matrix, dtype = float)

# Veri kümesi X'in her bir sütununun varyansını hesaplayın

def hesapla_variance (X):

n_samples = np.shape (X)

varyans = (1 / n_örnek) * np.diag ((X-X.ortalama (eksen = 0)). T.dot (X-X.ortalama (eksen = 0)))

dönüş varyansı

# Veri kümesi X'in her bir sütununun standart sapmasını hesaplayın

def calculate_std_dev (X):

std_dev = np.sqrt (hesapla_variance (X))

dönüş std_dev

# Korelasyon katsayısı matrisini hesaplayın

def hesaplama_korelasyon_matrisi (X, Y = np.empty ()):

# Önce kovaryans matrisini hesaplayın

kovaryans_matrisi = kovaryans_matrisini_ hesapla (X, Y)

# X, Y'nin standart sapmasını hesaplayın

std_dev_X = np.expand_dims (hesapla_std_dev (X), 1)

std_dev_y = np.expand_dims (hesapla_std_dev (Y), 1)

korelation_matrix = np.divide (kovaryans_matrix, std_dev_X.dot (std_dev_y.T))

dönüş np.array (korelation_matrix, dtype = float)

sınıf PCA:

"" "

Temel bileşen analiz algoritması PCA, denetimsiz öğrenme algoritması.

"" "

def __init __ (öz):

self.eigen_values = Yok

self.eigen_vectors = Yok

self.k = 2

def dönüşümü (öz, X):

"" "

Orijinal veri seti X, PCA ile azaltılır

"" "

kovaryans = kovaryans_matrisini_ hesapla (X)

# Özdeğerleri ve özvektörleri çözün

self.eigen_values, self.eigen_vectors = np.linalg.eig (kovaryans)

# Özdeğerleri büyükten küçüğe sıralayın Özvektörlerin sütunlar halinde düzenlendiğine dikkat edin, yani self eigen_vectors'ın k'inci sütunu self.eigen_values'teki k'inci özdeğerine karşılık gelen özvektördür

idx = self.eigen_values.argsort

özdeğerler = self.eigen_values

özvektörler = self.eigen_vectors

# Orijinal veri kümesi X'i düşük boyutlu uzaya eşleme

X_transformed = X.dot (özvektörler)

dönüş X_transformed

def main:

# Veri kümesini yükleyin

data = datasets.load_iris

X = data.data

y = data.target

# Harita veri kümesi X'i düşük boyutlu uzaya ayarlayın

X_trans = PCA.transform (X)

x1 = X_trans

x2 = X_trans

cmap = plt.get_cmap ('viridis')

renkler =

class_distr =

# Farklı sınıf dağılımlarını çizin

i, l için numaralandırmada (np.unique (y)):

_x1 = x1

_x2 = x2

_y = y

class_distr.append (plt.scatter (_x1, _x2, renk = renkler ))

# Efsane ekle

plt.legend (class_distr, y, loc = 1)

# Eksen etiketleri

plt.xlabel ('Ana Bileşen 1')

plt.ylabel ('Ana Bileşen 2')

plt.show

__name__ == "__main__" ise:

ana

Sonunda, aşağıdaki gibi boyutsallık azaltma sonucunu alacağız. Bunların arasında, özellik sayısı (D) örnek sayısından (N) çok daha fazlaysa, PCA algoritmasının karmaşıklık dönüşümünü gerçekleştirmek için küçük bir numara kullanabilirsiniz.

PCA boyutsallık azaltma algoritması ekranı

Elbette, bu algoritma klasik olmasına ve daha yaygın olarak kullanılmasına rağmen, eksiklikleri de çok açıktır. Doğrusal korelasyonu çok iyi çözebilir, ancak yüksek dereceli korelasyonla karşılaşıldığında etkisi zayıftır.Aynı zamanda, PCA'nın öncülü verinin ana özelliklerinin ortogonal yönde, dolayısıyla ortogonal olmayan yönde dağıtıldığını varsaymaktır. Daha büyük varyanslara sahip birkaç yön vardır ve PCA'nın etkisi büyük ölçüde azalacaktır.

Diğer boyutluluk azaltma algoritmaları ve kod adresleri

  • KPCA (çekirdek PCA)

KPCA, nükleer teknoloji ve PCA kombinasyonunun ürünüdür.Bununla PCA arasındaki temel fark, çekirdek fonksiyonunun, çekirdek fonksiyonu eşleştirildikten sonra kovaryans matrisi olan kovaryans matrisi hesaplanırken kullanılmasıdır.

Çekirdek işlevinin tanıtımı, doğrusal olmayan veri eşleme sorununu çözebilir. kPCA, doğrusal olmayan verileri yüksek boyutlu bir uzayla eşleyebilir ve yüksek boyutlu bir uzayda başka bir düşük boyutlu uzayla eşlemek için standart PCA kullanabilir.

KPCA boyut azaltma algoritması ekranı

Ayrıntılar için lütfen "Python Makine Öğrenimi" Özellik Çıkarma-kPCA'ya bakın:

https://blog.csdn.net/weixin_40604987/article/details/79632888

Kod adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes/blob/master/codes/PCA/KPCA.py

  • LDA (Doğrusal Ayrımcı Analizi)

LDA bir özellik çıkarma teknolojisidir ve amacı, sınıflar arasındaki farkı en üst düzeye çıkarmak ve sınıflar arasındaki farkı en aza indirgemek, böylece sınıflandırma ve diğer görevleri farklı sınıfların örneklerini etkili bir şekilde ayırmak için kolaylaştırmaktır. LDA, veri analizi sürecindeki hesaplama verimliliğini artırabilir ve düzenlenmiş olmayan modeller için boyutluluk felaketinin neden olduğu aşırı uyumu azaltabilir.

LDA boyutsallık azaltma algoritması ekranı

Ayrıntılar için lütfen "Veri Boyutunun Azaltılması-Doğrusal Ayrımcı Analizi (LDA)" bölümüne bakın:

https://blog.csdn.net/ChenVast/article/details/79227945

Kod adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes/tree/master/codes/LDA

  • MDS (çok boyutlu ölçekleme)

MDS, sezgisel uzamsal diyagramlar aracılığıyla araştırma nesnelerinin algısını ve tercihini ifade eden geleneksel bir boyutluluk azaltma yöntemi olan Çok Boyutlu Ölçeklendirme Analizi anlamına gelir. Bu yöntem, herhangi iki numune noktası arasındaki mesafeyi hesaplar, böylece izdüşümü gerçekleştirmek için düşük boyutlu bir alana projeksiyondan sonra göreceli mesafe korunabilir.

Sklearn'deki MDS yinelemeli optimizasyon yöntemini benimsediğinden, aşağıdaki iki uygulama yinelemeli ve yinelemesizdir.

MDS boyutsallık azaltma algoritması ekranı

Ayrıntılar için lütfen "MDS Algoritması" na bakın

https://blog.csdn.net/zhangweiguo_717/article/details/69663452

Kod adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes/tree/master/codes/MDS

  • ISOMAP

Isomap, doğrusal olmayan yapı veri seti üzerindeki MDS algoritmasının dezavantajlarını çözebilen eşit metrik eşleme algoritmasıdır.

MDS algoritması boyutsallık azaltıldıktan sonra numuneler arasındaki mesafeyi değişmeden tutarken, Isomap algoritması bir komşuluk grafiği sunar.Örnek sadece komşu örneklere bağlanır ve komşular arasındaki mesafe hesaplanır ve daha sonra bakım bu temelde azaltılır. mesafe.

ISOMAP boyutsallık azaltma algoritması ekranı

Ayrıntılar için lütfen "Isomap" a bakın

https://blog.csdn.net/zhangweiguo_717/article/details/69802312

Kod adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes/tree/master/codes/ISOMAP

  • LLE (yerel olarak doğrusal yerleştirme)

LLE, doğrusal olmayan boyutsallık azaltma algoritması olan yerel doğrusal bir gömme algoritmasıdır. Algoritmanın temel fikri, her noktanın, kendisine bitişik birden fazla noktanın doğrusal kombinasyonundan yaklaşık olarak yeniden oluşturulabilmesi ve ardından yüksek boyutlu verilerin, veri noktaları arasındaki yerel doğrusal yeniden yapılandırmayı sürdürmek için düşük boyutlu alana yansıtılmasıdır. İlişki, yani aynı yeniden yapılandırma katsayısına sahiptir. Sözde manifold boyutsallık indirgeme ile uğraşırken, etki PCA'dan çok daha iyidir.

LLE boyutsallık azaltma algoritması ekranı

Ayrıntılar için lütfen "LLE İlkesi ve Türetme Süreci" ne bakın

https://blog.csdn.net/scott198510/article/details/76099630

Kod adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes/tree/master/codes/LLE

  • t-SNE

t-SNE ayrıca doğrusal olmayan bir boyut azaltma algoritmasıdır ve yüksek boyutlu verilerin boyutsal olarak görselleştirme için 2 veya 3 boyuta indirilmesi için çok uygundur. Verinin orijinal eğilimine dayanan ve düşük enlemlerde (iki boyutlu veya üç boyutlu) veri eğilimini yeniden yapılandıran denetimsiz bir makine öğrenme algoritmasıdır.

Aşağıdaki sonuçlar kaynak koduyla ilgilidir ve tensorflow ile de uygulanabilir (parametreleri manuel olarak güncellemenize gerek yoktur).

t-SNE boyutsallık azaltma algoritması ekranı

Ayrıntılar için lütfen "t-SNE Kullanımında Bazı Tuzaklar" bölümüne bakın:

Kod adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes/tree/master/codes/T-SNE

  • LE (Laplacian Eigenmaps)

LE, LLE algoritmasına benzer, ancak aynı zamanda veriler arasındaki ilişkiyi yerel bir perspektiften kuran Laplacian özellik haritasıdır. Sezgisel fikri, boyut küçültme sonrası boşlukta birbirleriyle ilişkili noktaların (şekildeki bağlantılı noktalar) olabildiğince yakın olmasını ummaktır; bu şekilde, manifoldun geometrik yapısını yansıtabilecek bir çözüm elde edilebilir.

LE boyutsallık azaltma algoritması ekranı

Ayrıntılar için lütfen "Laplace Özellik Haritası Boyut Azaltma ve Python Uygulaması" konusuna bakın:

https://blog.csdn.net/HUSTLX/article/details/50850342

Kod adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes/tree/master/codes/LE

  • LPP (Yerelliği Koruma Projeksiyonları)

LPP yerel bir koruma projeksiyon algoritmasıdır. Fikri Laplacian özellik haritalamasına benzer. Temel fikir, bir veri setinin komşu yapı bilgilerini en iyi şekilde koruyarak bir projeksiyon eşlemesi oluşturmaktır.Ancak LPP, projeksiyon sonucunu doğrudan alan LE'den farklıdır. Projeksiyon matrisini çözmeniz gerekiyor.

LPP boyutsallık azaltma algoritması ekranı

Ayrıntılar için lütfen "Kısmi Koruma Projeksiyon Algoritması (LPP) Ayrıntılı Açıklama" bölümüne bakın:

https://blog.csdn.net/qq_39187538/article/details/90402961

Kod adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes/tree/master/codes/LPP

* "Dimensionality_reduction_alo_codes" proje yazarı tanıtımı

Şu anda Harbin Teknoloji Enstitüsü'nde bilgisayar teknolojisi alanında yüksek lisans öğrencisi olan Heucoder, esas olarak İnternet alanında faaliyet göstermektedir. Zhihu, "Süper Sevgi Öğrenimi" olarak adlandırılır. Github ana sayfası adresi: https://github.com/heucoder.

Github proje adresi:

https://github.com/heucoder/dimensionality_reduction_alo_codes

Leifeng.com AI Geliştiricisi

Leifeng.com Yıllık Seçimi 19 büyük sektörde en iyi yapay zeka iniş uygulamalarını arıyor

2017'de kurulan "En İyi AI Nuggets Vakalarının Yıllık Listesi", sektörün ilk AI iş vaka seçimi etkinliğidir. Ticari boyuttan başlayarak, Leifeng.com çeşitli sektörlerde en iyi yapay zeka uygulamalarını arıyor.

Üçüncü seçim resmi olarak başlatıldı. Kayda katılmak için WeChat genel hesabı "Leifeng.com" u takip edin ve "liste" anahtar kelimesini yanıtlayın. Ayrıntılar için lütfen WeChat ID'ye başvurun: xqxq_xq

Guangdong Müzik üniversite kampüsüne giriyor, binden fazla öğretmen ve öğrenci yerel klasiklerin tadını çıkarıyor
önceki
3299 yuan'dan! Honor V30 Serisi Matrix Kamera 100 milyon pikselle savaşabilir mi?
Sonraki
Ölümcül bir darbe! Shen Zijie'nin 1.7 saniyelik havadan bilgisi olan Shenzhen Navigator, iki puanla az farkla kazandı
Çin Tenis Grand Prix'si Longgang'da sona erdi, tek kadınlar kara at Liu Fangzhou unvanı kazandı, Li Zhe çift taç kazandı
Kolan Bek'in serbest bırakılması
Cao Sorgulama | Soğuk, nilüfer kökü çorbasını seven insanlar dikkat! Bu çok önemli, çok geç değil
Akademisyen ekip sivil otomotiv radar pazarına giriyor
Su şehri Venedik suyun renginin değişmesinden bahsediyor, ne oldu?
Xiamen, Haicang Bölgesi'nde başka bir gündüz bakım merkezi açıldı
Dünyanın en hızlı 5G SoC Dimensity 1000 piyasaya sürülen yapay zeka karşılaştırma puanı rekoru kırdı
Madeni Paralarda Çin: On Yuan Renminbi'nin Ardındaki Hikaye
"Çılgın Uzaylılar" ile diyalog ve yeniden ortaya çıkan gizemli eski filmler. Xiamen, Siming Bölgesi'ndeki bu iki sergiyi izlemek ücretsizdir
PATEO başkan yardımcısı Zhang Yi: Taşınabilir araç ağı, teknolojik yinelemelerde kullanıcı dikkatini tamamlamak için en iyi çözümdür
Bu yıl kavrulmuş bütün kuzunun fiyatı kişi başı 100 yuan'ın altında olan 1.000 yuan'ın altına düştü Beş kişilik bir aile de kavrulmuş bütün kuzu yiyebilir.
To Top