Temel bileşen analizi (PCA), yüksek boyutlu bir uzaydan veriyi daha düşük boyutlu bir alt uzaya projekte ederek bilgi çıkarmak için kullanılabilen doğrusal bir boyut indirgeme tekniğidir. Lineer cebir diline aşinaysanız, PCA’nın verideki en yüksek varyans yönlerini belirlemek için kovaryans matrisinin özvektörlerini bulmak olduğunu da söyleyebilirsiniz.
PCA hakkında dikkat edilmesi gereken önemli bir nokta, denetimsiz bir boyut indirgeme tekniği olmasıdır; yani, herhangi bir denetim (veya etiket) olmadan, aralarındaki korelasyona dayanarak benzer veri noktalarını kümelendirebilirsiniz.
Not: Özellikler, Boyutlar ve Değişkenler aynı şeyi ifade eder. Bu terimlerin birbirinin yerine kullanıldığını göreceksiniz.
PCA’yı Nerelerde Uygulayabilirsiniz?
Veri Görselleştirme: Günümüzde veriyle ilgili herhangi bir problem üzerinde çalışırken asıl zorluk, verinin hacmi ve veriyi tanımlayan değişkenlerin/özelliklerin sayısıdır. Verinin kilit rol oynadığı bir sorunu çözmek için değişkenlerin nasıl korele olduğunun bulunması veya bazı değişkenlerin dağılımının anlaşılması gibi kapsamlı veri keşfine ihtiyaç vardır. Veri dağıldığı boyutların veya değişkenlerin sayısı fazla olduğunda görselleştirme zor ve neredeyse imkânsız hale gelebilir.
Dolayısıyla PCA, veriyi daha düşük bir boyuta projekte ettiği için bunu sizin yerinize yapabilir; böylece veriyi çıplak gözle 2B veya 3B uzayda görselleştirmenize olanak tanır.
Bir Makine Öğrenimi (ML) Algoritmasını Hızlandırma: PCA’nın temel fikri boyut indirgeme olduğundan, verinizde çok sayıda özellik bulunduğu ve ML algoritmanızın öğrenmesi çok yavaş olduğu durumlarda, modelinizin eğitim ve test süresini hızlandırmak için bundan yararlanabilirsiniz.
Özet düzeyinde, çok sayıda özelliğe sahip bir veri kümesi alır ve bu veri kümesini orijinal özelliklerden birkaç Principal Components seçerek basitleştirirsiniz.
Temel Bileşen (Principal Component) Nedir?
Temel bileşenler PCA’nın anahtarıdır; verinizin kaputunun altındakini temsil ederler. Basitçe söylemek gerekirse, veri yüksek boyutlu bir uzaydan daha düşük boyuta (örneğin üç boyuta) projekte edildiğinde, bu üç boyut verinizin varyansının (bilgisinin) çoğunu yakalayan üç temel bileşenden başka bir şey değildir.
Temel bileşenlerin hem yönü hem büyüklüğü vardır. Yön, verinin en çok hangi temel eksenler boyunca yayıldığını ya da en fazla varyansa sahip olduğunu gösterir; büyüklük ise o temel bileşenin, veri o eksene projekte edildiğinde yakaladığı varyans miktarını ifade eder. Temel bileşenler düz bir doğrudur ve birinci temel bileşen verideki en büyük varyansı tutar. Her bir sonraki temel bileşen, bir öncekine diktir ve daha az varyansa sahiptir. Bu şekilde, y örnek üzerinde x korele değişkenden oluşan bir küme için, aynı y örnek üzerinde u adet ilişkisiz temel bileşen elde edersiniz.
Orijinal özelliklerden ilişkisiz temel bileşenler elde etmenizin nedeni, korele özelliklerin aynı temel bileşene katkıda bulunmasıdır; böylece orijinal veri özellikleri, her biri farklı miktarlarda değişkenliğe sahip, farklı korele özellik kümelerini temsil eden ilişkisiz temel bileşenlere indirgenir. Her temel bileşen, veriden yakalanan toplam değişkenliğin bir yüzdesini temsil eder.
Bugünkü eğitimde, PCA’yı veri görselleştirme yoluyla içgörü elde etmek ve makine öğrenimi algoritmamızı hızlandırmak amacıyla uygulayacağız. Bu iki görevi başarmak için iki ünlü veri kümesini kullanacaksınız: Breast Cancer ve CIFAR-10. İlki sayısal bir veri kümesidir; ikincisi bir görüntü veri setidir.
Veriyi Anlamak
Veriyi yüklemeye geçmeden önce, üzerinde çalışacağınız veriyi anlamak ve incelemek faydalıdır!
Breast Cancer
Breast Cancer veri kümesi, iki sınıftan oluşan ve her bir sınıfın bir hastada meme kanseri olup olmadığını belirttiği, reel değerli çok değişkenli bir veridir. İki kategori: malign ve benign.
Malign sınıfta 212 örnek, benign sınıfta ise 357 örnek vardır.
Tüm sınıflar arasında paylaşılan 30 özelliği vardır: yarıçap, doku, çevre, alan, pürüzsüzlük, fraktal boyut vb.
Breast cancer veri setini buradan indirebilir ya da daha kolay bir yöntem olarak sklearn kütüphanesinin yardımıyla yükleyebilirsiniz.
CIFAR - 10
CIFAR-10 (Canadian Institute For Advanced Research) veri kümesi, her biri 32x32x3 renkli görüntü olan 60000 görüntüden oluşur; on sınıf ve sınıf başına 6000 görüntü vardır.
Veri kümesi 50000 eğitim ve 10000 test görüntüsünden oluşur.
CIFAR veri setini buradan indirebilir veya Keras gibi bir derin öğrenme kütüphanesiyle anında yükleyebilirsiniz.
PCA ile Veri Keşfi
Şimdi Breast Cancer ve CIFAR-10 veri kümelerini yükleyip analiz edeceksiniz. Bu noktada her iki veri kümesinin de boyutsallığı hakkında bir fikriniz var.
Hadi, iki veri kümesini de hızlıca keşfedelim.
Breast cancer veri keşfi
Önce Breast Cancer veri kümesini keşfedelim.
sklearn’in datasets modülünü kullanacak ve buradan Breast Cancer veri kümesini içe aktaracaksınız.
from sklearn.datasets import load_breast_cancer
Altyapı:
load_breast_cancer hem etiketleri hem veriyi sağlar. Veriyi almak için .data, etiketleri almak için .target çağrısı yapacaksınız.
Veride otuz özelliği olan 569 örnek vardır ve her örnekle ilişkili bir etiket bulunur. Bu veri kümesinde iki etiket vardır.
Şimdi numpy’yi içe aktaracağız; çünkü breast_labels’ı breast_data ile birleştirmek için yeniden şekillendirecek, ardından hem veriyi hem de etiketleri içeren bir DataFrame oluşturacağız.
features dizisinde label alanının eksik olduğuna dikkat edin. Bu nedenle, bu diziyi breast_dataset veri çerçevenizin sütun adlarıyla eşitleyeceğiniz için, features dizisine bunu manuel olarak eklemeniz gerekecek.
Orijinal etiketler 0,1 formatında olduğundan, .replace fonksiyonunu kullanarak etiketleri benign ve malignant olarak değiştireceksiniz. inplace=True kullanarak breast_dataset veri çerçevesini yerinde değiştireceksiniz.
İçe aktardıktan sonra, veriyi indirmek için .load_data() metodunu kullanacaksınız; bu yöntem veriyi indirip Keras dizininize kaydeder. İnternet hızınıza bağlı olarak biraz zaman alabilir.
Toplam etiket sayısını ve verideki sınıf türlerini de bulalım.
# Find the unique numbers from the train labels
classes = np.unique(y_train)
nClasses =len(classes)print('Total number of outputs : ', nClasses)print('Output classes : ', classes)Altyapı:
Total number ofoutputs:10
Output classes :[0123456789]Altyapı:
Şimdi CIFAR-10 görüntülerini çizdirmek için matplotlib’i içe aktaracak ve çıktıların doğrudan defterde gösterilmesi için jupyter notebook’a magic (%) komutu olan %matplotlib inline’ı kullanacaksınız!
import matplotlib.pyplot as plt
%matplotlib inline
Altyapı:
Daha iyi anlamak için, kategorik sınıf etiketlerine karşılık gelen sınıf adlarını içeren bir sözlük oluşturalım.
plt.figure(figsize=[5,5])# Display the first image in training data
plt.subplot(121)
curr_img = np.reshape(x_train[0],(32,32,3))
plt.imshow(curr_img)print(plt.title("(Label: "+str(label_dict[y_train[0][0]])+")"))# Display the first image in testing data
plt.subplot(122)
curr_img = np.reshape(x_test[0],(32,32,3))
plt.imshow(curr_img)print(plt.title("(Label: "+str(label_dict[y_test[0][0]])+")"))Altyapı:
Yukarıdaki iki görüntü bulanık olsa da yine de birincisinin etiket frog olan bir kurbağa, ikincisinin ise etiket cat olan bir kedi olduğunu bir şekilde gözlemleyebilirsiniz.
PCA ile Veri Görselleştirme
Şimdi bu eğitimin en heyecanlı kısmına geldik. Daha önce öğrendiğiniz gibi PCA, yüksek boyutlu veriyi düşük boyutlu temel bileşenlere projekte eder; şimdi bunu Python yardımıyla görselleştirme zamanı!
Breast cancer verisini görselleştirme
PCA’nın çıktısı verinin özelliklerinin ölçeğinden etkilendiği için veriyi önce Standardize ederek başlarsınız.
Herhangi bir makine öğrenimi algoritmasına vermeden önce verinizi normalleştirmek yaygın bir uygulamadır.
Normalleştirme uygulamak için sklearn kütüphanesinden StandardScaler modülünü içe aktaracak ve Veri Keşfi adımında oluşturduğunuz breast_dataset’ten yalnızca özellikleri seçeceksiniz. Özellikleri aldıktan sonra, özellik verisi üzerinde fit_transform yaparak ölçekleme uygulayacaksınız.
StandardScaler uygularken, verinizin her bir özelliği normal dağılıma sahip olacak şekilde dönüştürülür; dağılım ortalaması sıfır ve standart sapması bir olacak şekilde ölçeklenir.
from sklearn.preprocessing import StandardScaler
x = breast_dataset.loc[:, features].values
x = StandardScaler().fit_transform(x)# normalizing the featuresAltyapı:
Şimdi kritik kısım geliyor; aşağıdaki birkaç satır kod, otuz boyutlu Breast Cancer verisini iki boyutlu temel bileşenlere projekte edecek.
sklearn kütüphanesini kullanarak PCA modülünü içe aktaracak, PCA metodunda bileşen sayısını (n_components=2) geçecek ve son olarak tümleşik veride fit_transform çağıracaksınız. Burada bileşen sayısı, yüksek boyutlu verinizi projekte edeceğiniz daha düşük boyutu temsil eder.
from sklearn.decomposition import PCA
pca_breast = PCA(n_components=2)
principalComponents_breast = pca_breast.fit_transform(x)Altyapı:
Sonraki adımda, 569 örneğin tümü için temel bileşen değerlerini içerecek bir DataFrame oluşturalım.
Temel bileşenleri elde ettikten sonra explained_variance_ratio değerini bulabilirsiniz. Bu, veriyi daha düşük boyutlu alt uzaya projekte ettikten sonra her temel bileşenin tuttuğu bilgi veya varyans miktarını verir.
print('Explained variability per principal component: {}'.format(pca_breast.explained_variance_ratio_))Altyapı:
Explained variability per principal component:[0.442720260.18971182]Altyapı:
Yukarıdaki çıktıya göre, principal component 1 bilginin %44,2’sini tutarken, principal component 2 yalnızca %19’unu tutmaktadır. Ayrıca dikkat edilmesi gereken bir diğer nokta, otuz boyutlu veriyi iki boyuta projekte ederken %36,8 bilginin kaybolmuş olmasıdır.
569 örneğin görselleştirmesini principal component - 1 ve principal component - 2 eksenleri boyunca çizelim. Bu, örneklerinizin iki sınıf arasında nasıl dağıldığına dair iyi bir içgörü sağlamalıdır.
plt.figure()
plt.figure(figsize=(10,10))
plt.xticks(fontsize=12)
plt.yticks(fontsize=14)
plt.xlabel('Principal Component - 1',fontsize=20)
plt.ylabel('Principal Component - 2',fontsize=20)
plt.title("Principal Component Analysis of Breast Cancer Dataset",fontsize=20)
targets =['Benign','Malignant']
colors =['r','g']for target, color inzip(targets,colors):
indicesToKeep = breast_dataset['label']== target
plt.scatter(principal_breast_Df.loc[indicesToKeep,'principal component 1'], principal_breast_Df.loc[indicesToKeep,'principal component 2'], c = color, s =50)
plt.legend(targets,prop={'size':15})Altyapı:
<matplotlib.legend.Legend at 0x14552a630><Figure size 432x288 with0 Axes>Altyapı:
Yukarıdaki grafikten, iki sınıfın benign ve malignant iki boyutlu bir uzaya projekte edildiğinde bir ölçüde doğrusal olarak ayrılabildiğini gözlemleyebilirsiniz. Diğer bir gözlem de benign sınıfının malignant sınıfına kıyasla daha yaygın olmasıdır.
CIFAR - 10 verisini görselleştirme
CIFAR-10 verisini görselleştirmek için aşağıdaki kod satırları, Breast Cancer verisinin PCA görselleştirmesine oldukça benzerdir.
CIFAR-10 eğitim görüntülerinin maksimum ve minimum değerlerini hızlıca kontrol edelim ve pikselleri 0 ile 1 arasında normalize edelim.
Mükemmel! Veri çerçevesinin boyutu doğru; çünkü 50.000 eğitim görüntüsü vardır, her birinde 3072 piksel ve ayrıca etiketler için ek bir sütun bulunur; toplamda 3073.
PCA, her görüntü için etiket olan son sütun hariç tüm sütunlara uygulanacaktır.
Ardından, PCA metodunu oluşturacak ve bileşen sayısını iki olarak verip eğitim verisi üzerinde fit_transform uygulayacaksınız; 50.000 örnek olduğu için bu birkaç saniye sürebilir
Temel bileşenlerin tuttuğu bilgi veya varyansı hızlıca bulalım.
print('Explained variability per principal component: {}'.format(pca_cifar.explained_variance_ratio_))Altyapı:
Explained variability per principal component:[0.29076630.11253144]Altyapı:
Görünen o ki, veriler 3072 boyuttan yalnızca iki temel bileşene projekte edilmiş olmasına rağmen, 1 ve 2. temel bileşenler makul miktarda bilgi tutmayı başardı.
Artık CIFAR-10 verisini iki boyutlu bir uzayda görselleştirme zamanı. Bu veri setinde bazı semantik sınıf örtüşmeleri olduğunu unutmayın; bu, bir kurbağanın bir kediye ya da bir geyiğin bir köpeğe biraz benzer şekle sahip olabileceği anlamına gelir; özellikle iki boyutlu bir uzaya projekte edildiğinde. Aralarındaki farklar o kadar iyi yakalanamayabilir.
<matplotlib.axes._subplots.AxesSubplot at 0x12a5ba8d0>Altyapı:
Yukarıdaki şekilde, iki temel bileşen ekseni boyunca projekte edildiğinde noktalarda bir miktar yapı olduğu için, temel bileşenlerin bazı varyasyonları yakaladığını gözlemleyebilirsiniz. Aynı sınıfa ait noktalar birbirine yakındır ve semantik olarak çok farklı olan noktalar veya görüntüler birbirinden daha uzaktadır.
PCA ile Derin Öğrenme Eğitimini Hızlandırma
Eğitimin bu son bölümünde, Derin Öğrenme Modelinizin eğitim sürecini PCA kullanarak nasıl hızlandırabileceğinizi öğreneceksiniz.
Not: Bu bölümde kullanılacak temel terimleri öğrenmek için lütfen bu eğitime göz atabilirsiniz.
Önce eğitim ve test görüntülerini normalleştirelim. Hatırlarsanız eğitim görüntüleri PCA görselleştirmesi kısmında normalleştirilmişti, bu yüzden yalnızca test görüntülerini normalleştirmeniz gerekiyor. Hızlıca yapalım!
Sonraki adımda PCA modelinin örneğini oluşturacaksınız.
Burada, PCA’nın ne kadar varyansı yakalamasını istediğinizi de belirtebilirsiniz. PCA modeline parametre olarak 0.9 geçelim; bu, PCA’nın varyansın %90’ını tutacağı ve %90 varyansı yakalamak için gereken bileşen sayısının kullanılacağı anlamına gelir.
Daha önce n_components parametresini geçtiğinizi ve o iki bileşenin ne kadar varyans yakaladığını bulabildiğinizi unutmayın. Burada ise PCA’nın ne kadar varyans yakalamasını istediğimizi açıkça belirtiyoruz; dolayısıyla n_components varyans parametresine göre değişecektir.
Herhangi bir varyans değeri geçmezseniz, bileşen sayısı verinin orijinal boyutuna eşit olur.
Yukarıdaki çıktıya göre, %90 varyansa ulaşmak için boyut, gerçek 3072 boyuttan 99 temel bileşene indirgenmiştir.
Son olarak, fit metodundan üretilen parametrelerden dönüştürülmüş bir veri kümesi oluşturmak için hem eğitim hem de test setinde transform uygulayacaksınız.
Yukarıdaki çıktıda, her epoch’un eğitim süresinin CPU’da sadece 7 saniye olduğunu gözlemleyebilirsiniz. Model eğitim verisinde %70 doğruluk elde ederek fena olmayan bir iş çıkarmış, ancak test verisinde yalnızca %56 doğruluk sağlamıştır. Bu, eğitim verisine aşırı uyum sağladığı anlamına gelir. Yine de verinin 3072 boyuttan 99 boyuta projekte edildiğini ve buna rağmen iyi iş çıkardığını unutmayın!
Son olarak, modelin orijinal veri kümesi üzerinde eğitilirken ne kadar zaman aldığını ve aynı derin öğrenme modeliyle hangi doğruluğa ulaşabildiğini görelim.
Voila! Yukarıdaki çıktıya bakıldığında, her epoch’un eğitim süresinin CPU’da yaklaşık 23 saniye olduğu açıkça görülüyor; bu da PCA çıktısı üzerinde eğitilen modelden neredeyse üç kat daha fazladır.
Ayrıca, hem eğitim hem test doğruluğu, 99 temel bileşeni modelin girdisi olarak kullandığınızda elde ettiğiniz doğruluktan daha düşüktür.
Dolayısıyla, eğitim verisine PCA uygulayarak derin öğrenme algoritmanızı yalnızca hızlı eğitmekle kalmadınız; aynı zamanda, orijinal eğitim verisiyle eğitilen derin öğrenme algoritmasına kıyasla test verisinde daha iyi doğruluk elde ettiniz.
Daha İleri Gidin!
Eğitimi tamamladığınız için tebrikler.
Bu eğitim, PCA’nın hem teorik hem de pratik kavramlarını kapsayan harika ve kapsamlı bir Python’a giriş niteliğindeydi.
Boyut indirgeme tekniklerine daha derinlemesine dalmak isterseniz, yaygın olarak tSNE olarak bilinen t-dağıtımlı Stokastik Komşu Gömme tekniğini okumayı düşünün; bu doğrusal olmayan, olasılıksal bir boyut indirgeme tekniğidir.
PCA gibi denetimsiz öğrenme teknikleri hakkında daha fazla bilgi edinmek isterseniz, DataCamp’in Python ile Denetimsiz Öğrenme kursunu alın.
Faktör Analizi ile Temel Bileşen Analizi arasındaki fark nedir?⌄
Faktör Analizi (FA) ve Temel Bileşen Analizi (PCA) her ikisi de boyut indirgeme için kullanılan tekniklerdir, ancak farklı amaçları vardır. PCA, veriyi açıklanan varyans miktarına göre sıralanan, ilişkisiz yeni bir değişken kümesine (temel bileşenler) dönüştürerek toplam değişkenliği korumaya odaklanır. Buna karşılık FA, değişkenler arasındaki korelasyonları açıklayan az sayıda örtük faktörle veriyi modelleyerek gözlemlenen değişkenler arasındaki temel ilişkileri belirlemeyi amaçlar.
Temel bileşen analizi nedir?⌄
Temel bileşen analizi, verinin kovaryans matrisinin özvektörlerini bularak, veriyi en büyük özdeğerlere sahip temel bileşenlerce tanımlanan daha düşük boyutlu bir uzaya projekte etme işlemidir.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Temel bileşen analizi (PCA), yüksek boyutlu bir uzaydan veriyi daha düşük boyutlu bir alt uzaya projekte ederek bilgi çıkarmak için kullanılabilen doğrusal bir boyut indirgeme tekniğidir. Lineer cebir diline aşinaysanız, PCA’nın verideki en yüksek varyans yönlerini belirlemek için kovaryans matrisinin özvektörlerini bulmak olduğunu da söyleyebilirsiniz.
PCA hakkında dikkat edilmesi gereken önemli bir nokta, denetimsiz bir boyut indirgeme tekniği olmasıdır; yani, herhangi bir denetim (veya etiket) olmadan, aralarındaki korelasyona dayanarak benzer veri noktalarını kümelendirebilirsiniz.
Not: Özellikler, Boyutlar ve Değişkenler aynı şeyi ifade eder. Bu terimlerin birbirinin yerine kullanıldığını göreceksiniz.
PCA’yı Nerelerde Uygulayabilirsiniz?
Veri Görselleştirme: Günümüzde veriyle ilgili herhangi bir problem üzerinde çalışırken asıl zorluk, verinin hacmi ve veriyi tanımlayan değişkenlerin/özelliklerin sayısıdır. Verinin kilit rol oynadığı bir sorunu çözmek için değişkenlerin nasıl korele olduğunun bulunması veya bazı değişkenlerin dağılımının anlaşılması gibi kapsamlı veri keşfine ihtiyaç vardır. Veri dağıldığı boyutların veya değişkenlerin sayısı fazla olduğunda görselleştirme zor ve neredeyse imkânsız hale gelebilir.
Dolayısıyla PCA, veriyi daha düşük bir boyuta projekte ettiği için bunu sizin yerinize yapabilir; böylece veriyi çıplak gözle 2B veya 3B uzayda görselleştirmenize olanak tanır.
Bir Makine Öğrenimi (ML) Algoritmasını Hızlandırma: PCA’nın temel fikri boyut indirgeme olduğundan, verinizde çok sayıda özellik bulunduğu ve ML algoritmanızın öğrenmesi çok yavaş olduğu durumlarda, modelinizin eğitim ve test süresini hızlandırmak için bundan yararlanabilirsiniz.
Özet düzeyinde, çok sayıda özelliğe sahip bir veri kümesi alır ve bu veri kümesini orijinal özelliklerden birkaç
Principal Componentsseçerek basitleştirirsiniz.Temel Bileşen (Principal Component) Nedir?
Temel bileşenler PCA’nın anahtarıdır; verinizin kaputunun altındakini temsil ederler. Basitçe söylemek gerekirse, veri yüksek boyutlu bir uzaydan daha düşük boyuta (örneğin üç boyuta) projekte edildiğinde, bu üç boyut verinizin varyansının (bilgisinin) çoğunu yakalayan üç temel bileşenden başka bir şey değildir.
Temel bileşenlerin hem yönü hem büyüklüğü vardır. Yön, verinin en çok hangi temel eksenler boyunca yayıldığını ya da en fazla varyansa sahip olduğunu gösterir; büyüklük ise o temel bileşenin, veri o eksene projekte edildiğinde yakaladığı varyans miktarını ifade eder. Temel bileşenler düz bir doğrudur ve birinci temel bileşen verideki en büyük varyansı tutar. Her bir sonraki temel bileşen, bir öncekine diktir ve daha az varyansa sahiptir. Bu şekilde, y örnek üzerinde x korele değişkenden oluşan bir küme için, aynı y örnek üzerinde u adet ilişkisiz temel bileşen elde edersiniz.
Orijinal özelliklerden ilişkisiz temel bileşenler elde etmenizin nedeni, korele özelliklerin aynı temel bileşene katkıda bulunmasıdır; böylece orijinal veri özellikleri, her biri farklı miktarlarda değişkenliğe sahip, farklı korele özellik kümelerini temsil eden ilişkisiz temel bileşenlere indirgenir. Her temel bileşen, veriden yakalanan toplam değişkenliğin bir yüzdesini temsil eder.
Bugünkü eğitimde, PCA’yı veri görselleştirme yoluyla içgörü elde etmek ve makine öğrenimi algoritmamızı hızlandırmak amacıyla uygulayacağız. Bu iki görevi başarmak için iki ünlü veri kümesini kullanacaksınız: Breast Cancer ve CIFAR-10. İlki sayısal bir veri kümesidir; ikincisi bir görüntü veri setidir.
Veriyi Anlamak
Veriyi yüklemeye geçmeden önce, üzerinde çalışacağınız veriyi anlamak ve incelemek faydalıdır!
Breast Cancer
Breast Cancer veri kümesi, iki sınıftan oluşan ve her bir sınıfın bir hastada meme kanseri olup olmadığını belirttiği, reel değerli çok değişkenli bir veridir. İki kategori: malign ve benign.
Malign sınıfta 212 örnek, benign sınıfta ise 357 örnek vardır.
Tüm sınıflar arasında paylaşılan 30 özelliği vardır: yarıçap, doku, çevre, alan, pürüzsüzlük, fraktal boyut vb.
Breast cancer veri setini buradan indirebilir ya da daha kolay bir yöntem olarak
sklearnkütüphanesinin yardımıyla yükleyebilirsiniz.CIFAR - 10
CIFAR-10 (Canadian Institute For Advanced Research) veri kümesi, her biri 32x32x3 renkli görüntü olan 60000 görüntüden oluşur; on sınıf ve sınıf başına 6000 görüntü vardır.
Veri kümesi 50000 eğitim ve 10000 test görüntüsünden oluşur.
Veri kümesindeki sınıflar: airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck.
CIFAR veri setini buradan indirebilir veya
Kerasgibi bir derin öğrenme kütüphanesiyle anında yükleyebilirsiniz.PCA ile Veri Keşfi
Şimdi
Breast CancerveCIFAR-10veri kümelerini yükleyip analiz edeceksiniz. Bu noktada her iki veri kümesinin de boyutsallığı hakkında bir fikriniz var.Hadi, iki veri kümesini de hızlıca keşfedelim.
Breast cancer veri keşfi
Önce
Breast Cancerveri kümesini keşfedelim.sklearn’indatasetsmodülünü kullanacak ve buradanBreast Cancerveri kümesini içe aktaracaksınız.load_breast_cancerhem etiketleri hem veriyi sağlar. Veriyi almak için.data, etiketleri almak için.targetçağrısı yapacaksınız.Veride otuz özelliği olan 569 örnek vardır ve her örnekle ilişkili bir etiket bulunur. Bu veri kümesinde iki etiket vardır.
Verinin şeklini kontrol edelim.
Bu eğitim için etiketlere ihtiyacınız olmasa da daha iyi anlamak adına etiketleri de yükleyelim ve şeklini kontrol edelim.
Şimdi
numpy’yi içe aktaracağız; çünkübreast_labels’ıbreast_dataile birleştirmek için yeniden şekillendirecek, ardından hem veriyi hem de etiketleri içeren birDataFrameoluşturacağız.Etiketleri
reshapingettikten sonra, veriyi ve etiketleri ikinci eksen boyuncaconcatenateedeceksiniz; bu da dizinin nihai şeklini569 x 31yapar.Şimdi veriyi tablo halinde temsil etmek için
pandas’ı içe aktararak nihai verininDataFrame’ini oluşturacağız.Hızlıca breast cancer veri kümesinde bulunan özellikleri yazdıralım!
featuresdizisindelabelalanının eksik olduğuna dikkat edin. Bu nedenle, bu diziyibreast_datasetveri çerçevenizin sütun adlarıyla eşitleyeceğiniz için,featuresdizisine bunu manuel olarak eklemeniz gerekecek.Harika! Şimdi sütun adlarını
breast_datasetveri çerçevesine gömeceksiniz.Veri çerçevesinin ilk birkaç satırını yazdıralım.
5 satır × 31 sütun
Orijinal etiketler
0,1formatında olduğundan,.replacefonksiyonunu kullanarak etiketleribenignvemalignantolarak değiştireceksiniz.inplace=Truekullanarakbreast_datasetveri çerçevesini yerinde değiştireceksiniz.breast_dataset’in son birkaç satırını yazdıralım.5 satır × 31 sütun
CIFAR - 10 veri keşfi
Şimdi,
CIFAR - 10görüntü veri setini keşfedeceksinizCIFAR - 10veri setiniKerasadlı bir derin öğrenme kütüphanesiyle yükleyebilirsiniz.İçe aktardıktan sonra, veriyi indirmek için
.load_data()metodunu kullanacaksınız; bu yöntem veriyi indiripKerasdizininize kaydeder. İnternet hızınıza bağlı olarak biraz zaman alabilir.Yukarıdaki kod satırı, eğitim ve test görüntülerini etiketleriyle birlikte döndürür.
Eğitim ve test görüntülerinin şeklini hızlıca yazdıralım.
Etiketlerin şeklini de yazdıralım.
Toplam etiket sayısını ve verideki sınıf türlerini de bulalım.
Şimdi
CIFAR-10görüntülerini çizdirmek içinmatplotlib’i içe aktaracak ve çıktıların doğrudan defterde gösterilmesi için jupyter notebook’amagic (%)komutu olan%matplotlib inline’ı kullanacaksınız!Daha iyi anlamak için, kategorik sınıf etiketlerine karşılık gelen sınıf adlarını içeren bir sözlük oluşturalım.
Yukarıdaki iki görüntü bulanık olsa da yine de birincisinin etiket
frogolan bir kurbağa, ikincisinin ise etiketcatolan bir kedi olduğunu bir şekilde gözlemleyebilirsiniz.PCA ile Veri Görselleştirme
Şimdi bu eğitimin en heyecanlı kısmına geldik. Daha önce öğrendiğiniz gibi PCA, yüksek boyutlu veriyi düşük boyutlu temel bileşenlere projekte eder; şimdi bunu Python yardımıyla görselleştirme zamanı!
Breast cancer verisini görselleştirme
PCA’nın çıktısı verinin özelliklerinin ölçeğinden etkilendiği için veriyi önce
Standardizeederek başlarsınız.Herhangi bir makine öğrenimi algoritmasına vermeden önce verinizi normalleştirmek yaygın bir uygulamadır.
Normalleştirme uygulamak için sklearn kütüphanesinden
StandardScalermodülünü içe aktaracak ve Veri Keşfi adımında oluşturduğunuzbreast_dataset’ten yalnızca özellikleri seçeceksiniz. Özellikleri aldıktan sonra, özellik verisi üzerindefit_transformyaparak ölçekleme uygulayacaksınız.StandardScaler uygularken, verinizin her bir özelliği normal dağılıma sahip olacak şekilde dönüştürülür; dağılım ortalaması sıfır ve standart sapması bir olacak şekilde ölçeklenir.
Normalleştirilmiş verinin ortalamasının sıfır ve standart sapmasının bir olup olmadığını kontrol edelim.
Normalleştirilmiş özellikleri DataFrame yardımıyla tablo formatına dönüştürelim.
5 satır × 30 sütun
Şimdi kritik kısım geliyor; aşağıdaki birkaç satır kod, otuz boyutlu Breast Cancer verisini iki boyutlu
temel bileşenlereprojekte edecek.sklearn kütüphanesini kullanarak
PCAmodülünü içe aktaracak, PCA metodunda bileşen sayısını (n_components=2) geçecek ve son olarak tümleşik veride fit_transform çağıracaksınız. Burada bileşen sayısı, yüksek boyutlu verinizi projekte edeceğiniz daha düşük boyutu temsil eder.Sonraki adımda, 569 örneğin tümü için temel bileşen değerlerini içerecek bir DataFrame oluşturalım.
explained_variance_ratiodeğerini bulabilirsiniz. Bu, veriyi daha düşük boyutlu alt uzaya projekte ettikten sonra her temel bileşenin tuttuğu bilgi veya varyans miktarını verir.Yukarıdaki çıktıya göre,
principal component 1bilginin %44,2’sini tutarken,principal component 2yalnızca %19’unu tutmaktadır. Ayrıca dikkat edilmesi gereken bir diğer nokta, otuz boyutlu veriyi iki boyuta projekte ederken %36,8 bilginin kaybolmuş olmasıdır.569 örneğin görselleştirmesini
principal component - 1veprincipal component - 2eksenleri boyunca çizelim. Bu, örneklerinizin iki sınıf arasında nasıl dağıldığına dair iyi bir içgörü sağlamalıdır.Yukarıdaki grafikten, iki sınıfın
benignvemalignantiki boyutlu bir uzaya projekte edildiğinde bir ölçüde doğrusal olarak ayrılabildiğini gözlemleyebilirsiniz. Diğer bir gözlem debenignsınıfınınmalignantsınıfına kıyasla daha yaygın olmasıdır.CIFAR - 10 verisini görselleştirme
CIFAR-10 verisini görselleştirmek için aşağıdaki kod satırları, Breast Cancer verisinin PCA görselleştirmesine oldukça benzerdir.
normalizeedelim.Sonraki adımda, görüntülerin piksel değerlerini, satır-sütun formatında ilgili etiketleriyle birlikte tutacak bir DataFrame oluşturacaksınız.
Ancak ondan önce, görüntü boyutlarını üçten bire yeniden şekillendirelim (görüntüleri düzleştirelim).
Mükemmel! Veri çerçevesinin boyutu doğru; çünkü 50.000 eğitim görüntüsü vardır, her birinde 3072 piksel ve ayrıca etiketler için ek bir sütun bulunur; toplamda 3073.
PCA, her görüntü için etiket olan son sütun hariç tüm sütunlara uygulanacaktır.
5 satır × 3073 sütun
fit_transformuygulayacaksınız; 50.000 örnek olduğu için bu birkaç saniye sürebilirDaha sonra, 50.000 görüntünün her biri için temel bileşenleri bir numpy dizisinden pandas DataFrame’e dönüştüreceksiniz.
varyansıhızlıca bulalım.Görünen o ki, veriler 3072 boyuttan yalnızca iki temel bileşene projekte edilmiş olmasına rağmen, 1 ve 2. temel bileşenler makul miktarda bilgi tutmayı başardı.
Artık CIFAR-10 verisini iki boyutlu bir uzayda görselleştirme zamanı. Bu veri setinde bazı semantik sınıf örtüşmeleri olduğunu unutmayın; bu, bir kurbağanın bir kediye ya da bir geyiğin bir köpeğe biraz benzer şekle sahip olabileceği anlamına gelir; özellikle iki boyutlu bir uzaya projekte edildiğinde. Aralarındaki farklar o kadar iyi yakalanamayabilir.
Yukarıdaki şekilde, iki temel bileşen ekseni boyunca projekte edildiğinde noktalarda bir miktar yapı olduğu için, temel bileşenlerin bazı varyasyonları yakaladığını gözlemleyebilirsiniz. Aynı sınıfa ait noktalar birbirine yakındır ve semantik olarak çok farklı olan noktalar veya görüntüler birbirinden daha uzaktadır.
PCA ile Derin Öğrenme Eğitimini Hızlandırma
Eğitimin bu son bölümünde, Derin Öğrenme Modelinizin eğitim sürecini PCA kullanarak nasıl hızlandırabileceğinizi öğreneceksiniz.
Not: Bu bölümde kullanılacak temel terimleri öğrenmek için lütfen bu eğitime göz atabilirsiniz.
Önce eğitim ve test görüntülerini normalleştirelim. Hatırlarsanız eğitim görüntüleri PCA görselleştirmesi kısmında normalleştirilmişti, bu yüzden yalnızca test görüntülerini normalleştirmeniz gerekiyor. Hızlıca yapalım!
Test verisini
reshapeedelim.Sonraki adımda PCA modelinin örneğini oluşturacaksınız.
Burada, PCA’nın ne kadar varyansı yakalamasını istediğinizi de belirtebilirsiniz. PCA modeline parametre olarak 0.9 geçelim; bu, PCA’nın varyansın %90’ını tutacağı ve %90 varyansı yakalamak için gereken
bileşen sayısının kullanılacağı anlamına gelir.Daha önce
n_componentsparametresini geçtiğinizi ve o iki bileşenin ne kadar varyans yakaladığını bulabildiğinizi unutmayın. Burada ise PCA’nın ne kadar varyans yakalamasını istediğimizi açıkça belirtiyoruz; dolayısıylan_componentsvaryans parametresine göre değişecektir.Herhangi bir varyans değeri geçmezseniz, bileşen sayısı verinin orijinal boyutuna eşit olur.
Ardından,
PCAörneğini eğitim görüntüleri üzerinde fit edeceksiniz.Şimdi, PCA’nın 0.9 varyansı yakalamak için kaç
n_componentskullandığını bulalım.Yukarıdaki çıktıya göre, %90 varyansa ulaşmak için boyut, gerçek
3072boyuttan99temel bileşene indirgenmiştir.Son olarak,
fitmetodundan üretilen parametrelerden dönüştürülmüş bir veri kümesi oluşturmak için hem eğitim hem de test setindetransformuygulayacaksınız.Şimdi derin öğrenme modelini çalıştırmak için gerekli kütüphaneleri hızlıca içe aktaralım.
Şimdi eğitim ve test etiketlerinizi one-hot kodlamalı vektöre dönüştüreceksiniz.
Modeliniz için epoch sayısını, sınıf sayısını ve batch boyutunu tanımlayalım.
Şimdi
Sequentialmodelinizi tanımlayacaksınız!Model özetini yazdıralım.
Son olarak, modeli derleme ve eğitme zamanı!
Yukarıdaki çıktıda, her epoch’un eğitim süresinin CPU’da sadece
7 saniyeolduğunu gözlemleyebilirsiniz. Model eğitim verisinde%70doğruluk elde ederek fena olmayan bir iş çıkarmış, ancak test verisinde yalnızca%56doğruluk sağlamıştır. Bu, eğitim verisine aşırı uyum sağladığı anlamına gelir. Yine de verinin 3072 boyuttan 99 boyuta projekte edildiğini ve buna rağmen iyi iş çıkardığını unutmayın!Son olarak, modelin orijinal veri kümesi üzerinde eğitilirken ne kadar zaman aldığını ve aynı derin öğrenme modeliyle hangi doğruluğa ulaşabildiğini görelim.
Voila! Yukarıdaki çıktıya bakıldığında, her epoch’un eğitim süresinin CPU’da yaklaşık
23 saniyeolduğu açıkça görülüyor; bu da PCA çıktısı üzerinde eğitilen modelden neredeyse üç kat daha fazladır.Ayrıca, hem eğitim hem test doğruluğu, 99 temel bileşeni modelin girdisi olarak kullandığınızda elde ettiğiniz doğruluktan daha düşüktür.
Dolayısıyla, eğitim verisine PCA uygulayarak derin öğrenme algoritmanızı yalnızca
hızlıeğitmekle kalmadınız; aynı zamanda, orijinal eğitim verisiyle eğitilen derin öğrenme algoritmasına kıyasla test verisinde daha iyidoğrulukelde ettiniz.Daha İleri Gidin!
Eğitimi tamamladığınız için tebrikler.
Bu eğitim, PCA’nın hem teorik hem de pratik kavramlarını kapsayan harika ve kapsamlı bir Python’a giriş niteliğindeydi.
Boyut indirgeme tekniklerine daha derinlemesine dalmak isterseniz, yaygın olarak tSNE olarak bilinen t-dağıtımlı Stokastik Komşu Gömme tekniğini okumayı düşünün; bu doğrusal olmayan, olasılıksal bir boyut indirgeme tekniğidir.
PCA gibi denetimsiz öğrenme teknikleri hakkında daha fazla bilgi edinmek isterseniz, DataCamp’in Python ile Denetimsiz Öğrenme kursunu alın.
İleri okuma için kaynaklar: