Kalbinizi toplayın, ders süresi doldu.
Geçen hafta IRIS verileri için PCA ve LDA olmak üzere iki doğrusal boyut azaltma yöntemi kullandık ve "Doğrusal Boyut İndirgeme Yöntemi (Kod)" da WINE verileri belli sonuçlara ulaşmış gibi görünüyor.Bir yandan düşük boyutlu uzayda farklı. Sınıfın örnekleri yeterince bölünmüştür, diğer yandan boyut indirgeme sonrası sınıflandırıcının performansı daha iyidir.
Doğrusal olmayan boyutsallık indirgemesinin önemli bir öncülü, verilerin dağıtımının kendisinin yüksek boyutlu değil, yüksek boyutlu bir alana gömülü düşük boyutlu bir manifold olmasıdır ve bu tür düşük boyutluluğun, bunun yerine yalnızca genişletilmesi gerekebilir. Dönüştürülmesi gerekiyor. Örneğin, dünyanın yüzeyi yaklaşık olarak küresel bir yüzeydir ve küresel yüzey üzerindeki küresel yüzey algımız üç boyutlu değil, iki boyutlu olacaktır, ancak onu tanımlamak için üç boyutlu dil kullanmalıyız. İç yapısını incelemek istiyorsak, onu sadece iki boyuta genişletmemiz gerekebilir. Ortaya çıkardığımız süreç boyutsal azalmadır.
IRIS ve WINE verilerinde böyle bir yapı bulmak bizim için zor.Bir yandan, gerçek verilerde mükemmel manifold bulunmadığından, diğer yandan en fazla üç boyutlu uzayda görselleştirebildiğimiz için ve özelliklerin sayısı çok büyük olduğunda, Her üç boyutlu uzayın veri yapısını özelliklerin birleşimiyle gözlemlemek bizim için imkansız bir görev olacaktır.
Ancak, tüm yapıyı tersine çevirmek için doğrusal olmayan boyutluluk azaltma yöntemlerini kullanabiliriz.Doğrusal olmayan boyutsallık indirgememiz, doğrusal boyutluluk indirgemesinden daha iyi sonuçlar elde ederse, o zaman verinin kendisi düşük boyutlu bir manifolddur.
İki boyutlu bir manifoldu görselleştirmek için basit bir örnek veri oluşturabiliriz:
matplotlib.pyplot dosyasını plt olarak içe aktar
mpl_toolkits.mplot3d'den Axes3D'yi içe aktarın
sklearn ithal veri kümelerinden
X, c = veri kümeleri.samples_generator.make_s_curve (1000, random_state = 2018)
ax = Axes3D (plt.figure ())
ax.scatter (X, X, X, c = c, cmap = plt.cm.hsv)
plt.title ('Örnek')
plt.show ()
Bu açıdan bakıldığında dikkate değer değil ama hadi başka bir açıdan bakalım:
Böyle bir S-şekli için, aslında üç boyutlu bir uzayda gömülü iki boyutlu bir manifolddur.Üç boyutludan iki boyutluya düşürmek istiyorsak, doğrusal olmayan boyutluluk azaltma, manifoldun iç yapısını mümkün olduğunca korumak için onu genişletmektir. Yaklaşık olarak bir manifolddur ve iç yapısı çok önemlidir.
Örnek olarak PCA ve ISOMAP'ı alırsak, sırasıyla örnek veriler üzerinde boyut indirgeme yapıyoruz:
sklearn.decomposition'dan içe aktarma PCA
X_PCA = PCA (2) .fit (X) .transform (X)
sklearn.manifold'dan ithal Isomap
X_ISO = İzomap (10,2) .fit (X). Dönüşümü (X)
PCA'nın boyut azaltma sonucu, aslında iki boyutlu bir uzayda gömülü tek boyutlu bir manifolda benzeyen bir S şeklidir. Boyut azaltmanın anlamını anlamayan birçok yeni başlayan veya öğrenci bunun yerine PCA işleminden sonra örnek verilerin S şeklinde kaldığını ve bu da iyi bir süreç olduğunu düşünecektir.
Aslında bu görüş yanlış. Üç boyutlu uzayda böyle iki boyutlu bir manifold için, manifoldun kendisi iki boyutlu olduğu için, bilgiyi en büyük ölçüde korumak için onu yalnızca "genişletmemiz" ve "düzleştirmemiz" gerekir. PCA'nın doğrusal indirgenmesi Boyutsal yöntem yalnızca bir projeksiyon alanı seçer ve çok sayıda örnek, düşük boyutlu uzayda ifade edilmez.
Uygun olmayan bir örnek için, ülkeyi veri noktalarımız olarak alırsak, bu veri noktaları üç boyutlu bir uzayda gömülü iki boyutlu bir manifold olan yeryüzünün yüzeyine dağıtılır. Küre için düşük boyutlu bir alan bulursak, PCA küreyi bir çemberle eşler (çok fazla bilgi kaybı) ve ISOMAP onu bir dünya haritasına eşler. (Aslında, bu etkiyi elde etmek için, dünya yüzeyindeki veri dağılımı hakkında daha fazla varsayımda bulunulur, ancak gerçek aynıdır)
Benzer sonuçlar elde etmek için başka bir veri kümesini değiştirebiliriz:
n_points = 1000
X, renk = veri kümeleri.samples_generator.make_swiss_roll (n_points,
random_state = 2018)
X_PCA = PCA (2) .fit (X) .transform (X)
X_ISO = İzomap (10,2) .fit (X). Dönüşümü (X)
ax = Axes3D (plt.figure ())
ax.scatter (X, X, X, \
c = renk, cmap = plt.cm.hsv)
ax.set_title ('Örnek')
bx = plt.figure ()
plt.scatter (X_PCA, X_PCA, c = renk, cmap = plt.cm.hsv)
plt.title ('PCA of Swiss Roll')
cx = plt.figure ()
plt.scatter (X_ISO, X_ISO, c = renk, cmap = plt.cm.hsv)
plt.title ('ISOMAP of Swiss Roll')
plt.show ()
Swiss roll verilerinin boyutluluğunu azaltmak için MDS ve LLE (yerel olarak doğrusal yerleştirme) gibi daha fazla yöntem kullanmaya çalışıyoruz:
MDS'nin (Çok Boyutlu Ölçeklendirme) esasen doğrusal bir algoritma olduğunu belirtmek gerekir. Asıl amacı, düşük boyutlu uzayda yüksek boyutlu uzayın mesafesini korumak olsa da, yine de metrik olarak Öklid mesafesini kullanır, dolayısıyla şekilden , MDS'nin etkisi neredeyse PCA'nınki ile aynıdır. Ve LLE, manifoldun Öklid uzayına yerel eşdeğerini kullanır.Her nokta, çevreleyen noktalarla doğrusal olarak temsil edilebilir (bu aynı zamanda doğrusal uzayın özelliğidir). Düşük boyutlu bir alana indirgendikten sonra, uydurma katsayısını korumak gerekir. sabit.
Daha sonra, doğrusal olmayan boyutluluk azaltma yöntemini gerçek verilere uygularız.WINE verilerinde doğrusal boyut azaltma ve doğrusal olmayan boyutluluk azaltma yöntemini karşılaştırıyoruz: hiperparametre olarak düşük boyutlu uzayın boyutunu alın ve yine de k-en yakın komşuyu seçin Bir sınıflandırıcı olarak, test setindeki performansı gözlemleyerek boyutsallık azaltma etkisini niteliksel olarak anlayın.
numpy'yi np olarak içe aktar
sklearn ithal veri kümelerinden
sklearn.model_selection'dan içe aktar cross_validate
sklearn.manifold'dan ithal Isomap, MDS
sklearn.manifold'dan locally_linear_embedding'ı LLE olarak içe aktar
sklearn.decomposition'dan içe aktarma PCA
sklearn.preprocessing'den import StandardScaler
sklearn.neighbors'dan KNeighborsClassifier'ı KNC olarak içe aktarır
seaborn'u sns olarak ithal etmek
matplotlib.pyplot dosyasını plt olarak içe aktar
data = datasets.load_wine ()
X = StandardScaler (). Fit (veri) .transform (veri)
y = veri
def dim_reductor (n, X):
redüktör = dikte (PCA = PCA (n) .fit (X) .transform (X), \
ISOMAP = İzomap (10, n) .fit (X) .transform (X), \
MDS = MDS (n) .fit_transform (X), \
LLE = LLE (X, 10, n))
dönüş (redüktör)
mse_mat = np.zeros ((4, X.shape))
için n içinde aralık (1, X.shape + 1):
redüktör = dim_reductor (n, X)
test_mse =
için isim, yöntem içinde redüktör.items ():
X_new = redüktör
clf = KNC ()
clf_dict = cross_validate (clf, X_new, y, \
cv = 5, puanlama = 'doğruluk')
test_mse.append (clf_dict.mean ())
mse_mat = test_mse
sns.set (style = 'darkgrid')
için idex, isim içinde numaralandır (redüktör.keys ()):
plt.plot (aralık (1, X.shape + 1), mse_mat, etiket = ad)
plt.xlabel ('boyutlar')
plt.ylabel ('doğruluk')
plt.legend ()
plt.show ()
Hangi boyutta olursa olsun, LLE performansının en kötü olduğunu ve LLE'nin boyutla dalgalanmadığını, ancak artmaya devam ettiğini gördük. Diğer üç boyut azaltma yöntemi için, MDS en iyi performansı boyut 3 olduğunda, PCA en iyi, boyut 5 olduğunda ve ISOMAP, boyut 6 olduğunda en iyi performansı gösterir. Bu, WINE verilerinin bariz bir manifold yapısına sahip olmadığını veya ISOMAP'ın sonuçlarının bize WINE verilerinin aslında 13 boyutlu bir uzayda gömülü olan 6 boyutlu bir manifold olabileceğini söyleyebileceğini açıklayabilir mi, bunu bilmemiz mümkün değil. Mühendislik açısından, uygun boyutları azaltarak ihtiyacımız olan performansı elde edene kadar çeşitli manifold öğrenmeyi kullanmamız gerekebilir.
Bu algoritmalar çok farklı görünmüyor. MDS, ISOMAP ve PCA'nın üç yönteminin iç içe geçtiğini ve aralarında ayrım yapmanın zor olduğunu da görebiliriz. Sonra cesurca bir tane deneriz, ancak bu çok yönlü bir öğrenme değildir, ancak Ancak, çekirdek eklenmiş doğrusal olmayan boyutsallık azaltma-PCA'ya aittir:
sklearn.decomposition'dan import KernelPCA
def dim_reductor (n, X):
...
KPCA = KernelPCA (n, 'rbf'). Fit_transform (X) # Yukarıdaki dim_reductor fonksiyonuna ekle
...
...
Kernel PCA'nın eğrisinin neredeyse her zaman diğer eğrilerin üzerinde olduğunu görünce şaşırdık! Bu, hemen hemen tüm boyutlarda Kernel PCA'nın diğer boyutsallık azaltma algoritmalarından (WINE verileri için) daha iyi performans gösterdiğini göstermektedir. Boyut 2'ye eşit olduğunda, çeşitli boyutluluk azaltma algoritmalarının performansını da karşılaştırabiliriz:
sns.barplot (mse_mat, list (redüktör.keys ()))
Öyleyse neden PCA Kernel'i ekliyor, performans orijinal PCA algoritmasından daha iyi? Ve Kernel tam olarak nedir? Kernel'in eklenmesi neden PCA'yı doğrusal bir algoritmadan doğrusal olmayana dönüştürür? Önümüzdeki hafta görüşmek üzere. "Makine öğreniminin çekirdek numarası" sizin için cevaplayacak.
Çekirdeği okuyun
Sınıf İPUÇLARI
Veriler, yüksek boyutlu bir uzayda düşük boyutlu bir manifoldda olduğunda, içsel koordinatları rahatlıkla kullanabiliriz, yani, manifolddaki koordinatlar verileri iyi tanımlayabilir ve bu, manifold öğrenmenin başlangıç noktasıdır.
Manifold öğrenme ISOMAP ve LLE'ye ek olarak, ortak çoklu öğrenme yöntemleri arasında Hessian Eigenmapping, t-SNE, Laplacian Eigenmaps ve Local teğet uzay hizalaması bulunur. Ancak, çok yönlü öğrenmenin üstesinden gelmesi gereken en büyük sorun, manifoldun yerel alanının Öklid uzayına eşdeğer olması ve yoğun örnekleme işleminin genellikle yerel olarak gerçekleştirilmesidir ve bu koşul genellikle karşılanmaz.
Özellik seçimi ve boyut azaltma aynı olmamakla birlikte, çelişkili değildir.Gerçek mühendislikte, önce özellik seçimi, sonra boyut azaltma yapabiliriz.Farklı verilerin farklı etkileri olabilir. Ancak fazlalık özellikler olduğunda, yüksek boyutlu uzaydaki noktaların daha seyrek hale geleceği ve yoğun örneklemenin daha büyük zorluklarla karşılaşacağı öngörülebilir.Yedekli özellikleri ortadan kaldırmak için öncelikle özellik seçimi yapmak çok gereklidir.
Yazar: Head & Shoulders olmadan keşiş
Yeniden yazdırmanız gerekirse, lütfen arka planda bir mesaj bırakın ve yeniden yazdırma şartnamelerine uyun.