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.
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.
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.
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
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.
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