"Boyutsal felaketi" çözmek için, temel bileşen analizi size boyutsallığı azaltmayı öğretir

Tam metin 7016 Kelimeler, tahmini öğrenme süresi 40 Dakika veya daha uzun

Fotoğraf Kredisi: Farhan Azam / unsplash.com

Modern teknolojik çağda giderek daha fazla veri üretilmekte ve toplanmaktadır. Ancak makine öğreniminde çok fazla veri iyi bir şey değildir. Bir anlamda, daha fazla özellik veya boyut, modelin doğruluğu da o kadar azalacaktır, çünkü daha fazla verinin genelleştirilmesi gerekir - bu sözde "boyut felaketi" dir.

Boyut azaltma, model karmaşıklığını azaltmak ve aşırı uydurmayı önlemek için bir yöntemdir. Özellik seçimi ve özellik çıkarma, iki ana boyutluluk azaltma yöntemidir. Özellik seçimi, orijinal özellik kümesinin bir alt kümesini seçmektir ve özellik çıkarma, yeni bir özellik alt alanı oluşturmak için orijinal özellik kümesinden bilgilerin bir bölümünü toplamaktır.

Bu makale sizi özellik çıkarma işlemini öğrenmeye götürecektir. Pratik uygulamalarda, özellik çıkarma, yalnızca depolama alanını genişletmekle kalmaz, öğrenme algoritmalarının hesaplama verimliliğini iyileştiremez, aynı zamanda boyutsal felaketlerden kaçınarak tahmin performansını da geliştirebilir - özellikle de düzenli olmayan modeller kullanıldığında.

Spesifik olarak, ilgili bilgilerin çoğunu korurken veri setini daha düşük boyutlu bir özellik alt uzayına sıkıştırmak için temel bileşen analizinin (PCA) kullanımını tartışacağız. Öğreneceğiz:

· PCA kavramı ve arkasındaki matematiksel bilgi

· Adım adım PCA gerçekleştirmek için Python nasıl kullanılır

· PCAscikit-öğrenme makine öğrenimi gerçekleştirmek için Python kitaplığı nasıl kullanılır

Şimdi başlayalım!

Resim kaynağı: Traf / unsplash.com

Bu eğitim, Next Tec'in Python makine öğrenimi serisinin ikinci bölümünden uyarlanmıştır ve Xiaobai, makine öğrenimi ve derin öğrenme algoritmaları için Python'u kullanmayı başarılı bir şekilde öğrenmeye yönlendirecektir. Bu eğitici, tarayıcıya gömülü bir sanal alan ortamını, gerekli tüm yazılım ve kitaplıkları önceden yüklenmiş ve genel veri kümelerini kullanan bazı projeleri içerir.

1. Ana Bileşen Analizine Giriş

Temel bileşen analizi, birçok alanda, özellikle özellik çıkarma ve boyutluluk azaltma için yaygın olarak kullanılan, denetimsiz bir doğrusal dönüşüm yöntemidir. Diğer popüler uygulamalar arasında keşif amaçlı veri analizi, borsa piyasalarında gürültülü sinyallerin ortadan kaldırılması ve biyoinformatikte genom verilerinin ve gen ifade seviyelerinin analizi yer alır.

PCA, özellikler arasındaki bağlantılara dayalı olarak verilerdeki modelleri tanımlar. Kısacası, PCA, yüksek boyutlu verilerdeki maksimum varyansın yönünü bulmayı ve bunu aynı veya daha düşük boyutluluğa sahip yeni bir alt uzaya yansıtmayı amaçlamaktadır.

Yeni özellik eksenlerinin birbirine dik olması koşuluyla, aşağıdaki şekilde gösterildiği gibi, yeni alt uzayın ortogonal ekseni (ana bileşen) maksimum varyans yönü olarak kabul edilebilir:

Yukarıdaki şekilde, x1 ve x2 orijinal özellik eksenleridir ve PC1 ve PC2 ana bileşenlerdir.

Boyut indirgeme için PCA kullanılırsa ve bir d × k boyutlu dönüşüm matrisi W oluşturulursa, bir örnekteki x vektörü yeni bir k boyutlu özellik alt uzayına (k, d'den küçüktür) eşlenebilir.

Orijinal d boyutlu veriler yeni k boyutlu alt uzay ile eşlendiğinden (genellikle k, d'den çok daha küçüktür), ilk temel bileşen olası en büyük varyansa sahip olacak ve diğer temel bileşenler ilintisiz ise, bunlar da Maksimum varyans vardır - girdi özellikleri birbiriyle ilişkili olsa bile, ortaya çıkan ana bileşenler birbirine ortogonal olacaktır (ilişkili değil).

Not: Veri ölçeklendirmenin PCA yönü üzerinde büyük etkisi vardır.Özellikler farklı ölçeklerde ölçülüyorsa ve bu özelliklere aynı önemi vermek istiyorsanız, PCA'dan önce bu özellikleri standartlaştırmanız gerekir.

Boyut azaltma için PCA algoritmasını ayrıntılı olarak öğrenmeden önce, birkaç basit adımda özetleyeceğim:

1. d boyutlu veri setini standartlaştırın.

2. Kovaryans matrisini oluşturun.

3. Kovaryans matrisini özvektörlere ve özdeğerlere ayırın.

4. Özdeğerleri azalan sırada sıralayın ve karşılık gelen vektörleri sıralayın.

5. En büyük k özdeğerine karşılık gelen k özvektörünü seçin; burada k, yeni özellik alt uzayının boyutudur (k d).

6. W projeksiyon matrisini k özvektörlerine göre oluşturun.

7. d boyutlu girdi veri kümesi X'i projeksiyon matrisi W aracılığıyla yeni bir k boyutlu veri alt uzayına dönüştürün.

Şimdi bir egzersiz olarak adım adım PCA gerçekleştirmek için Python'u kullanın. Ardından, PCA'yı daha iyi gerçekleştirmek için scikit-learn makine öğrenimini nasıl kullanacağınızı görün.

2. Temel bileşenleri yavaş yavaş çıkarın

Örnek olarak UCI makine öğrenimi havuzundaki Wine veri kümesini kullanacağız. Veri seti, kimyasal özelliklerini açıklamak için 13 özelliği kullanan 178 şarap numunesi içermektedir.

Bu bölümde, PCA Dört Adımının ilk adımını öğrenecek ve ardından kalan üç adımı öğreneceksiniz. Gerekli tüm kitaplıkların önceden yüklenmiş olduğu bu öğreticide kodu öğrenmek için Next Tech sanal alanını kullanabilir veya kod parçacıklarını yerel ortamda çalıştırabilirsiniz.

Sandbox yüklendikten sonra, Wine veri setini doğrudan depodan yükleyerek başlayacağız.

pandaları pd olarak içe aktar df_wine = pd.read_csv ('https://archive.ics.uci.edu/ml/' 'makine öğrenimi veritabanları / wine / wine.data', başlık = Yok) df_wine.head ()

Ardından, Wine verilerini ayrı eğitim ve test setlerine işlemek için 70:30 ayrımı kullanın ve bunları birim varyansına normalleştirin.

sklearn.model_selection'dan import train_test_split sklearn.preprocessing'den import StandardScaler # eğitim ve test setlerine bölün X, y = df_wine.iloc.values, df_wine.iloc.values X_train, X_test, y_train, y_test = train_test_split ( X, y, test_size = 0.3, stratify = y, random_state = 0 ) # özellikleri standartlaştırın sc = StandardScaler () X_train_std = sc.fit_transform (X_train) X_test_std = sc.transform (X_test)

Gerekli ön işlemi tamamladıktan sonra, şimdi ikinci adıma geçin: kovaryans matrisini oluşturun. Farklı özellikler arasındaki ikili kovaryansı içeren simetrik d × d boyutlu kovaryans matrisi (d, veri setinin boyutudur). Örneğin, genel düzeyde x_j ve x_j özelliklerinin kovaryansı aşağıdaki formülle hesaplanabilir:

Burada _j ve _k, sırasıyla j özelliğinin ve k özelliğinin örnek ortalama değerleridir.

Not: Veri seti standartlaştırılmışsa, örneklem ortalaması 0'dır. İki özellik arasında pozitif kovaryans varsa bu ikisinin de aynı anda artması ve azalması, negatif bir kovaryans olması ise zıt yönlerde değişmesi anlamına gelir. Örneğin, üç özelliğin kovaryans matrisi şu şekilde yazılabilir (not: , toplamı değil, Yunan büyük harfli sigmayı temsil eder):

Kovaryans matrisinin özvektörü temel bileşeni (maksimum varyansın yönü) temsil eder ve karşılık gelen özdeğer, boyutunu tanımlar. Wine veri setinden 13 × 13 boyutlu kovaryans matrisi, 13 özvektör ve özdeğer elde edilebilir.

Üçüncü adım, kovaryans matrisinden özdeğer elde etmektir. Özellik vektörü v aşağıdaki koşulları karşılar:

skaler bir özdeğerdir. Özvektörleri ve özdeğerleri manuel olarak hesaplamak biraz karmaşık ve külfetli olduğundan, Şarap kovaryans matrisinin özellik çiftlerini elde etmek için NumPy'nin linalg.eig işlevini kullanacağız.

numpy'yi np olarak içe aktar cov_mat = np.cov (X_train_std.T) eigen_vals, eigen_vecs = np.linalg.eig (cov_mat)

Standartlaştırılmış veri kümesinin kovaryans matrisini hesaplamak için numpy.cov işlevini kullanın. Özdeştirme gerçekleştirmek için linalg.eig işlevini kullanın ve 13 özdeğer ve karşılık gelen özvektörler içeren bir vektör (özdeğer) elde edin, bunların tümü 13 × 13 boyutlu bir matriste (özvektör) sütun olarak saklanır.

3. Toplam varyans ve yorumlanabilir varyans

Veri kümesini sıkıştırarak yeni bir özellik alt uzayı elde ederek veri kümesinin boyutluluğunu azaltmak istediğimizden, yalnızca bilginin (varyans) çoğunu içeren özellik vektörünün (ana bileşen) bir alt kümesini seçeriz.

En büyük miktarda bilgi içeren bu k özellik vektörlerini toplamadan önce, ilk olarak özellik değerinin özellik varyansı katkı oranını hesaplayın. _j karakteristik değerinin karakteristik varyans katkı oranı, karakteristik değer _j'nin karakteristik değerin toplamına oranıdır.

Varyans katkılarının toplamını hesaplamak için NumPy cumsum işlevini kullanın ve ardından aşağıdakileri açıklamak için matplotlibin adım işlevini kullanın:

matplotlib.pyplot dosyasını plt olarak içe aktar # açıklanan varyansların kümülatif toplamını hesapla tot = sum (eigen_vals) var_exp = cum_var_exp = np.cumsum (var_exp) # plot varyansları açıkladı plt.bar (aralık (1,14), var_exp, alpha = 0.5, align = 'center', label = 'ayrı ayrı açıklanan varyans') plt.step (range (1,14), cum_var_exp, burada = 'mid', label = 'kümülatif açıklanan varyans') plt.ylabel ('Açıklanan varyans oranı') plt.xlabel ('Ana bileşen dizini') plt.legend (loc = 'en iyi') plt.show ()

Sonuçlar, birinci temel bileşenin varyansın yaklaşık% 40'ını açıkladığını göstermektedir. Ek olarak, ilk iki ana bileşenin birlikte veri setindeki varyansın yaklaşık% 60'ını oluşturduğunu görebiliriz.

4. Özellik dönüşümü

Kovaryans matrisini özellik çiftlerine başarıyla ayrıştırdıktan sonra, Wine veri setini yeni ana bileşen eksenine dönüştürmek için PCA'nın son üç adımına geçin.

Önce, özellik değerlerinin azalan sırasına göre özellik çiftlerini sınıflandırın:

# (Özdeğer, özvektör) demetlerinin bir listesini yapın eigen_pairs = # (Özdeğer, özvektör) demetleri yüksekten düşüğe doğru sıralayın eigen_pairs.sort (anahtar = lambda k: k, ters = Doğru)

Daha sonra, bu veri setindeki varyansın yaklaşık% 60'ını elde etmek için en büyük iki öz değere karşılık gelen iki özvektörü toplayın. Örnekleme uğruna, sadece iki öznitelik vektörü seçtiğimize dikkat edin, çünkü verileri bu bölümün ilerleyen kısımlarında iki boyutlu bir dağılım grafiği ile çizeceğiz. Pratik uygulamalarda, ana bileşenlerin sayısı hesaplama verimliliği ve sınıflandırıcı performansı ile belirlenir:

w = np.hstack ((eigen_pairs, eigen_pairs)) baskı ('Matris W: \ n', w) Matris W: >

Önceki kodu çalıştırarak, yukarıdaki iki özellik vektörüne bağlı olarak 13x2 boyutlu bir projeksiyon matrisi W oluşturulur.

Projeksiyon matrisini kullanarak, bir x örneği (1 x 13 boyutlu satır vektörü), iki yeni özellik içeren iki boyutlu bir örnek vektörü x elde etmek için PCA alt uzayına (ana bileşen 1 ve ana bileşen 2) dönüştürülebilir:

X_train_std.dot (w)

Benzer şekilde, 124 x 13 boyutlu eğitim veri seti, matris iç çarpımı hesaplanarak iki temel bileşene dönüştürülebilir:

X_train_pca = X_train_std.dot (w)

Son olarak, dönüştürülmüş Wine eğitim setini iki boyutlu bir dağılım grafiğinde görselleştirin ve 124 x 2 boyutlu bir matris olarak saklayın:

renkler = işaretçiler = zip olarak l, c, m için (np.unique (y_train), renkler, işaretçiler): plt.scatter (X_train_pca, X_train_pca, c = c, etiket = l, işaretçi = m) plt.xlabel ('PC 1') plt.ylabel ('PC 2') plt.legend (loc = 'sol alt') plt.show ()

Şekilden de görülebileceği gibi, veriler daha önce oluşturulan özellik varyans katkı oranı grafiğiyle tutarlı olan x ekseni (ilk ana bileşen) boyunca daha fazla dağıtılır. Bununla birlikte, doğrusal sınıflandırıcının iyi sınıflandırabilmesi gerektiğini sezgisel olarak görebiliriz.

Sınıf etiketleri, önceki dağılım grafiklerinde açıklama için kodlanmış olsa da, PCA'nın sınıf etiketi bilgilerini kullanmayan denetimsiz bir teknik olduğunu unutmayın.

5. PCA ve scikit-learn makine öğrenimi

Önceki bölüm, PCA'nın dahili çalışma prensibini anlamamıza yardımcı oldu ve şimdi scikit-learn'de uygulanan PCA benzeri modelin nasıl kullanılacağını tartışacağız. PCA sınıfı model, scikit-learn'ün başka bir dönüştürücü sınıfıdır.Eğitim verilerini ve test veri setini dönüştürmek için aynı model parametrelerini kullanmadan önce, modele uyması için ilk olarak eğitim verilerini kullanırız.

Dönüştürülen örnekleri lojistik regresyon yoluyla sınıflandırmak için Wine eğitim veri setindeki PCA modelini kullanın:

sklearn.linear_model'den import LogisticRegression sklearn.decomposition'dan içe aktarma PCA # pca ve lojistik regresyon modelini intialize edin pca = PCA (n_components = 2) lr = LogisticRegression (multi_class = 'auto', çözücü = 'liblinear') # verileri sığdır ve dönüştür X_train_pca = pca.fit_transform (X_train_std) X_test_pca = pca.transform (X_test_std) lr.fit (X_train_pca, y_train)

Şimdi karar bölgesini görselleştirmek için normal bir plot_decision_regions işlevi kullanın:

matplotlib.colors'dan import ListedColormap def plot_decision_regions (X, y, sınıflandırıcı, çözünürlük = 0,02): # kurulum işaretleyici oluşturucu ve renk haritası işaretçiler = ('s', 'x', 'o', '^', 'v') renkler = ('kırmızı', 'mavi', 'açık yeşil', 'gri', 'camgöbeği') cmap = ListedColormap (renkler) # karar yüzeyini çizin x1_min, x1_max = X.min () - 1, X.max () + 1 x2_min, x2_max = X.min () - 1, X.max () + 1 xx1, xx2 = np.meshgrid (np.arange (x1_min, x1_max, çözünürlük), np.arange (x2_min, x2_max, çözünürlük)) Z = sınıflandırıcı.predict (np.array (). T) Z = Z.reshape (xx1.shape) plt.contourf (xx1, xx2, Z, alpha = 0.4, cmap = cmap) plt.xlim (xx1.min (), xx1.max ()) plt.ylim (xx2.min (), xx2.max ()) # plot sınıfı örnekleri idx için, numaralandırmada cl (np.unique (y)): plt.scatter (x = X, y = X, alfa = 0.6, c =, edgecolor = 'siyah', işaretçi = işaretçiler, label = cl) Eğitim seti için # plot karar bölgeleri plot_decision_regions (X_train_pca, y_train, sınıflandırıcı = lr) plt.xlabel ('PC 1') plt.ylabel ('PC 2') plt.legend (loc = 'sol alt') plt.show ()

Önceki kodu çalıştırdıktan sonra, eğitim verilerinin karar alanının iki ana bileşen eksenine indirildiğini görmelisiniz.

Tamlık için, iyi sınıflandırılıp sınıflandırılamayacağını görmek için dönüştürülmüş test veri setindeki lojistik regresyon karar alanını çizin:

Test seti için # plot karar bölgesi plot_decision_regions (X_test_pca, y_test, sınıflandırıcı = lr) plt.xlabel ('PC1') plt.ylabel ('PC2') plt.legend (loc = 'sol alt') plt.show ()

Test seti için karar alanını çizmek için önceki kodu çalıştırdıktan sonra, lojistik regresyonun bu iki boyutlu özellik alt uzayında çok iyi performans gösterdiğini ve test veri setini sınıflandırırken sadece birkaç hata yaptığını görebiliriz.

Özellik varyans katkı oranıyla ilgileniyorsanız, PCA sınıfını n_components parametre setiyle basitçe başlatabilirsiniz, böylece tüm ana bileşenlerin korunması ve özellik varyansı katkı oranının hesaplanması, açıklanan_variance_ratio özelliği aracılığıyla gerçekleştirilebilir:

pca = PCA (n_components = Yok) X_train_pca = pca.fit_transform (X_train_std) pca.explained_variance_ratio_

Not: PCA sınıfını başlatırken, yani n_components = None olarak ayarlandığında, boyutlandırma azaltma işlemleri gerçekleştirmek yerine tüm ana bileşenleri sınıflandırma sırasına göre döndürecektir.

Yorum Beğen Takip Et

Yapay zeka öğrenme ve geliştirmenin kuru mallarını paylaşalım

Tam platform yapay zeka dikey öz medya "temel okuma tekniği" ni takip etmeye hoş geldiniz

Xinsheng Today | Adobe, insan yüzlerini PS ile otomatik olarak keşfedebilen yapay zeka araçları geliştiriyor
önceki
Tsinghua, yapay zekayı 700'den fazla kişiyi test etmeyi öğreniyor! Panik yapmayın, ülke çapındaki tüm AI üniversitelerinin büyük bir envanterini çıkarın
Sonraki
Guizhou İnşaat Bankası, motosikletler için ETC kullanımı nedeniyle askıya alındı
3A şaheser, 9. nesil Core oyuncularının ilk tercihi olan tek adımda yer alıyor
Bir parça tuvalet kağıdı sayısız kahramanın rekabet etmesini sağladı! Water Margin'in Douyin tuvalet kağıdı versiyonu, ağ üzerinde 3 milyon taklit yapıyor
Yeniliğe giden yolda Daikin Klima, neden bir kez daha tanınan yeni ürünleri piyasaya sürüyor?
Antarktika e-ticaret yüksek büyüme komplosu
1 milyar yatırım! Huawei bırakıyor: 3 yılda 1 milyon yapay zeka yeteneğini eğitin! Netizen Tanrı cevap verdi
Yeni Toyota YARiS casus fotoğrafları ortaya çıktı, yeni hibrit modeller eklendi
Gelecek dolu! Samsung'un açılan geniş ekranlı cep telefonu patenti ortaya çıktı
3 kat performans artışı olan Raspberry Pi 4 tasarım kusurlarına maruz kaldı
OPPO Enco ticari marka teşhiri: veya katlanır ekranlı cihazlar için hazırlanın
Microsoft CTO Wei Qing: 5G ve Aristotle
Bilgisayar şifresinin mucidi vefat etti! Turing Ödülü'nü kazandı ve Unix'in doğuşunu aydınlattı
To Top