from pandas import * data = read_csv("testset.txt",sep="\t",header=none) print data[:10]

Benzer belgeler
GEO182 Lineer Cebir. Matrisler. Matrisler. Dersi Veren: Dr. İlke Deniz Derse Devam: %70. Vize Sayısı: 1

Matris Cebiriyle Çoklu Regresyon Modeli

Hafta 09 -Topluluk Yöntemleri - Boyut Azaltma - Anomali Tespiti

İleri Diferansiyel Denklemler

13. Karakteristik kökler ve özvektörler

ii) S 2LW 2WH 2LW 2WH S 2WH 2LW S 3( x 1) 5( x 2) 5 3x 3 5x x Maliye Bölümü EKON 103 Matematik I / Mart 2018 Proje 2 CEVAPLAR C.1) C.

VEKTÖR UZAYLARI 1.GİRİŞ

İleri Diferansiyel Denklemler

x 2i + A)( 1 yj 2 + B) u (v + B), y 1

Cebir 1. MIT Açık Ders Malzemeleri

BÖLÜM 24 PAULI SPİN MATRİSLERİ

BİRİNCİ DERECEDEN BİR BİLİNMEYENLİ DENKLEMLER

Programlama. Simdide 1 den 10 a kadar olan sayilari yazdiralim. 1 den 10 e kadar olan sayilarin karesini yazdiralim. Do[Print[Mathematica], 5]

ÖZDEĞERLER- ÖZVEKTÖRLER

Mikroişlemcilerde Aritmetik

İleri Diferansiyel Denklemler

6. Ders. Mahir Bilen Can. Mayıs 16, 2016

Özdeğer ve Özvektörler

Şayet bir lineer sistemin en az bir çözümü varsa tutarlı denir.

TANIMLAYICI İSTATİSTİKLER

7. BÖLÜM İÇ ÇARPIM UZAYLARI İÇ ÇARPIM UZAYLARI İÇ ÇARPIM UZAYLARI İÇ ÇARPIM UZAYLARI .= Genel: Vektörler bölümünde vektörel iç çarpım;

Matematik I: Analiz und Lineer Cebir I Sömestr Ders Saati D 2 U 2 L 1 AKTS 6 Lisans/ Yüksek Lisans Lisans Dersin Kodu MAT 106 Sömestr 2

SU DALGALARINDA GİRİŞİM

2.3. MATRİSLER Matris Tanımlama

Python ile Programlamaya Giris

Lineer Cebir. Doç. Dr. Niyazi ŞAHİN TOBB. İçerik: 1.1. Lineer Denklemlerin Tanımı 1.2. Lineer Denklem Sistemleri 1.3. Matrisler

İleri Diferansiyel Denklemler

Probability Density Function (PDF, Sürekli fonksiyon)

Tanım 2.1. Bir kare matrisin determinantı, o matrisi bir sayıya eşleyen fonksiyondur.

Çok fazla bilgiden gizli kalmış örüntüleri ortaya çıkarma sürecine Veri Madenciliği denir.

Prof.Dr. ÜNAL ERKAN MUMCUOĞLU.

. [ ] vektörünü S deki vektörlerin bir lineer

Yrd. Doç. Dr. A. Burak İNNER

MIT OpenCourseWare Ekonomide İstatistiksel Yöntemlere Giriş Bahar 2009

1. Hafta SAYISAL ANALİZE GİRİŞ

Bir özvektörün sıfırdan farklı herhangi bri sabitle çarpımı yine bir özvektördür.

Fonksiyonlar. <? print "Ekrana yaziyorum..<br>"; $a=print "Ben de...<br>"; print $a;?> Bu kodun ciktisi: Ekrana yaziyorum.. Ben de...

MIT OpenCourseWare Ekonomide İstatistiksel Yöntemlere Giriş Bahar 2009

8. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI.

Gök Mekaniği: Eğrisel Hareket in Kinematiği

Eigenvalue-Eigenvector Problemleri

Analitik Hiyerarşi Prosesi (AHP) Yrd.Doç.Dr. Sabahattin Kerem AYTULUN

MIT OpenCourseWare Ekonomide İstatistiksel Yöntemlere Giriş Bahar 2009

Bu bölümde; Çok ölçütlü karar verme yöntemlerinden biri olan TOPSİS yöntemi anlatılacaktır.

Lineer Denklem Sistemleri

(14) (19.43) de v yi sağlayan fonksiyona karşılık gelen u = F v fonksiyonunun ikinci türevi sürekli, R de 2π periodik ve

İÇİNDEKİLER. Bölüm 1 MATEMATİKSEL İKTİSADA GİRİŞ İktisat Hakkında İktisatta Grafik ve Matematik Kullanımı 13

Ders 8: Konikler - Doğrularla kesişim

Sistem Dinamiği. Bölüm 5-Blok Diyagramlar, Durum-Değişken Modelleri ve Simülasyon Metodları. Doç.Dr. Erhan AKDOĞAN

AST409 Astronomide Sayısal Çözümleme. II. Python da Matrisler

TRAKYA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ MAKİNA MÜHENDİSLİĞİ ANABİLİM DALI DOKTORA PROGRAMI ŞEKİL TANIMA ÖDEV 2 KONU : DESTEK VEKTÖR MAKİNELERİ

Bilgisayar Grafikleri

TAMSAYILAR. 9www.unkapani.com.tr. Z = {.., -3, -2, -1, 0, 1, 2, 3, } kümesinin her bir elemanına. a, b, c birer tamsayı olmak üzere, Burada,

TOBB Ekonomi ve Teknoloji Üniversitesi Mühendislik Fakültesi Elektrik ve Elektronik Mühendisliği Bölümü ELE 301 Kontrol Sistemleri I.

ÖABT Lineer Cebir KONU TESTİ Matris Cebiri

Dizey Cebirinin Gözden Geçirilmesi

Nokta uzayda bir konumu belirtir. Noktanın 0 boyutlu olduğu kabul edilir. Herhangi bir büyüklüğü yoktur.

OPTIMIZASYON Bir Değişkenli Fonksiyonların Maksimizasyonu...2

DÖRDÜNCÜ BÖLÜM Aritmetik işlemler

Cebir 1. MIT Açık Ders Malzemeleri

Bilgisayarla Görüye Giriş

Sevdiğim Birkaç Soru

VERİ MADENCİLİĞİ Metin Madenciliği

Temel Kavramlar. Alıştırma Şekil ile, ifade edilişini eşleştiriniz.

MATRİS İŞLEMLER LEMLERİ

AYT 2018 MATEMATİK ÇÖZÜMLERİ. ai i İçler dışlar çarpımı yapalım. 1 ai i a i 1 ai ai i. 1 ai ai 1 ai ai 0 2ai a 0 olmalıdır.

HESSİEN MATRİS QUADRATİK FORM MUTLAK ve BÖLGESEL MAKS-MİN NOKTALAR

O + T + U + Z = 30 (30) 2K + I + R = 40 (40) E + 2L + = 50 (50) A + L + T + M + I + fi = 60 (60) Y + E + T + M + + fi = 70 (70) 2S + 2E + K + N = 80

altında ilerde ele alınacaktır.

3.2. DP Modellerinin Simpleks Yöntem ile Çözümü Primal Simpleks Yöntem

MIT OpenCourseWare Ekonomide İstatistiksel Yöntemlere Giriş Bahar 2009

Lineer Bağımlılık ve Lineer Bağımsızlık

Dolgu Rengi: Seçili hücre veya hücrelerin arka planını renklendirir.

PSK 510 Research Methods and Advanced Statistics

Gerçekten Asal Var mı? Ali Nesin

İSTATİSTİKSEL DARALTICI (SHRINKAGE) MODEL VE UYGULAMALARI * A Statistical Shrinkage Model And Its Applications*

Runge-Kutta Metodu. Runge-Kutta metodu

Matrisler ve matris işlemleri

1.4. KISMİ SIRALAMA VE DENKLİK BAĞINTILARI

Matris Analizi (MATH333) Ders Detayları

Veri Madenciliği Karar Ağacı Oluşturma

Dizey Cebirinin Gözden Geçirilmesi

Lineer Cebir (MATH275) Ders Detayları

Makine Öğrenmesi 11. hafta

Scipy. Prof.Dr. Bahadır AKTUĞ JFM212 Python ile Mühendislik Uygulamaları. *Kaynakça bölümünde verilen kaynaklardan derlenmiştir.

HADİ BAKALIM KOLAY GELSİN DİJİTAL İŞLEM NE UYGULANDI? SİNEMA - TİYATRO - KONSER

Büyük boyutun laneti (Curse of Dimensionality)

ACCESS DERS Tablolarda Düzenleme

Sayısal Analiz I (MATH521) Ders Detayları

Pratik Kuantum Tarifleri. Adil Usta

SİMPLEKS ALGORİTMASI Yapay değişken kullanımı

36. Basit kuvvet metodu

BİLGİSAYAR PROGRAMLAMA VE FİZİKTE PROGRAMLAMA DERSLERİ İÇİN MATLAB ÇALIŞMA NOTLARI. Mehmet ÖZKAN

TCP/IP ye Genel Bir Bakis

Appendix B: Olasılık ve Dağılım Teorisi

EXCEL DE ARİTMETİKSEL İŞLEMLER

YTÜ İktisat Bölümü EKONOMETRİ I Ders Notları

YTÜ İktisat Bölümü EKONOMETRİ I Ders Notları

10. Ders. Mahir Bilen Can. Mayıs 20, Yarıbasit bir Lie cebirinin yapısını analiz etmeye devam ediyoruz. hatırlayınız:

T I M U R K A R A Ç AY, H AY D A R E Ş, O R H A N Ö Z E R K A L K U L Ü S N O B E L

Transkript:

Temel Bileşen Analizi (Principal Component Analysis -PCA-) PCA yontemi boyut azaltan yontemlerden biri, takip edilmeden (unsupervised) isleyebilir. Ana fikir veri noktalarinin izdusumunun yapilacagi yonler bulmaktir ki bu yonler baglaminda (izdusum sonrasi) noktalarin arasindaki sayisal varyans (empirical variance) en fazla olsun, yani noktalar grafik baglaminda dusunursek en yayilmis sekilde bulunsunlar. Boylece birbirinden daha uzaklasan noktalarin mesela daha rahat kumelenebilecegini umabiliriz. Bir diger amac, hangi degiskenlerin varyansinin daha fazla oldugunun gorulmesi uzerine, o degiskenlerin daha onemli olabileceginin anlasilmasi. Ornek olarak alttaki grafige bakalim, from pandas import * data = read_csv("testset.txt",sep="\t",header=none) print data[:10] 0 1 0 10.235186 11.321997 1 10.122339 11.810993 2 9.190236 8.904943 3 9.306371 9.847394 4 8.330131 8.340352 5 10.152785 10.123532 6 10.408540 10.821986 7 9.003615 10.039206 8 9.534872 10.096991 9 9.498181 10.825446 plt.scatter(data.ix[:,0],data.ix[:,1]) plt.plot(data.ix[1,0],data.ix[1,1], rd ) plt.plot(data.ix[4,0],data.ix[4,1], rd ) plt.savefig( pca_1.png ) PCA ile yapmaya calistigimiz oyle bir yon bulmak ki, x veri noktalarinin tamaminin o yone izdusumu yapilinca sonuc olacak, izdusumu yapilmis z nin varyansi en buyuk olsun. Bu bir maksimizasyon problemidir. Fakat ondan once x nedir, z nedir bunlara yakindan bakalim. Veri x ile tum veri noktalari kastedilir, fakat PCA probleminde genellikle bir vektorun digeri uzerine yapilan izdusumu, daha optimal bir w yonu bulma, ve o yone dogru izdusum yapmak kelimeleri kullanilir. Demek ki veri noktalarini bir vektor olarak gormeliyiz. Eger ustte kirmizi ile isaretlenen iki noktayi alirsak (bu noktalar verideki 1. ve 4. siradaki noktalar), 1

gibi bir goruntuden bahsediyoruz. Hayali bir w kullandik, ve noktalardan biri veri noktasi, w uzerine izdusum yapilarak yeni bir vektoru / noktayi ortaya cikartiliyor. Genel olarak ifade edersek, bir nokta icin z i = x T i w = x i w Yapmaya calistigimiz sayisal varyansi maksimize etmek demistik. Bu arada verinin hangi dagilimdan geldigini soylemedik, her veri noktasi birbirinden ayri, bagimsiz ama ayni bir dagilimdandir bile demedik, x bir rasgele degiskendir beyani yapmadik (x veri noktalarini tutan bir sey sadece). Sadece sayisal varyans ile is yapacagiz. Sayisal varyans, 1 n (x i w) 2 i Toplama islemi yerine soyle dusunelim, tum x i noktalarini istifleyip bir x matrisi haline getirelim, o zaman xw ile bir yansitma yapabiliriz, bu yansitma sonucu bir vektordur. Bu tek vektorun karesini almak demek onun devrigini alip kendisi ile carpmak demektir, yani = 1 n (xw)t (xw) = 1 n wt x T xw = w T xt x n w x T x/n sayisal kovaryanstir (empirical covariance). Ona Σ diyelim. = w T Σw Ustteki sonuclarin boyutlari 1 N N N N 1 = 1 1. Tek boyutlu skalar degerler elde ettik. Yani w yonundeki izdusum bize tek boyutlu bir cizgi verecektir. Bu sonuc aslinda cok sasirtici olmasa gerek, tum veri noktalarini alip, baslangici basnokta 0,0 (origin) noktasinda olan vektorlere cevirip ayni yone isaret edecek sekilde duzenliyoruz, bu vektorleri tekrar nokta olarak dusunursek, tabii ki ayni 2

yonu gosteriyorlar, bilahere ayni cizgi uzerindeki noktalara donusuyorlar. Ayni cizgi uzerinde olmak ne demek? Tek boyuta inmis olmak demek. Ufak bir sorun w T Σw i surekli daha buyuk w lerle sonsuz kadar buyutebilirsiniz. Bize ek bir kisitlama sarti daha lazim, bu sart w = 1 olabilir, yani w nin norm u 1 den daha buyuk olmasin. Boylece optimizasyon w yi surekli buyute buyute maksimizasyon yapmayacak, sadece yon bulmak ile ilgilenecek, iyi, zaten biz w nin yonu ile ilgileniyoruz. Aradigimiz ifadeyi yazalim, ve ek siniri Lagrange ifadesi olarak ekleyelim, ve yeni bir L ortaya cikartalim, L(w, λ) = w T Σw λ(w T w 1) Niye eksiden sonraki terim o sekilde eklendi? O terim oyle sekilde secildi ki, L/ λ = 0 alininca w T w = 1 geri gelsin / ortaya ciksin [2, sf 340]. Bu Lagrange in dahice bulusu. Bu kontrol edilebilir, λ ya gore turev alirken w 1 sabit olarak yokolur, parantez icindeki ifadeler kalir ve sifira esitlenince orijinal kisitlama ifadesi geri gelir. Simdi max L(w, λ) w icin turevi w e gore alirsak, ve sifira esitlersek, L w = 2wΣ 2λw = 0 2wΣ = 2λw Σw = λw Ustteki ifade ozdeger, ozvektor ana formulune benzemiyor mu? Evet. Eger w, Σ nin ozvektoru ise ve esitligin sagindaki λ ona tekabul eden ozdeger ise, bu esitlik dogru olacaktir. Peki hangi ozdeger / ozvektor maksimal degeri verir? Unutmayalim, maksimize etmeye calistigimiz sey w T Σw idi Eger Σw = λw yerine koyarsak w T λw = λw T w = λ Cunku w T 1 w nin 1 olacagi sartini koymustuk. Neyse, maksimize etmeye calistigimiz deger λ cikti, o zaman en buyuk λ kullanirsak, en maksimal varyansi 3

elde ederiz, bu da en buyuk ozdegerin ta kendisidir. Demek ki izdusum yapilacak yon kovaryans Σ nin en buyuk ozdegerine tekabul eden ozvektor olarak secilirse, temel bilesenlerden en onemlisini hemen bulmus olacagiz. Ikinci, ucuncu en buyuk ozdegerin ozvektorleri ise diger daha az onemli yonleri bulacaklar. Σ matrisi n n boyutunda bir matris, bu sebeple n tane ozvektoru olacak. Her kovaryans matrisi simetriktir, o zaman lineer cebir bize der ki ozvektorler birbirine dikgen (orthogonal) olmali. Yine Σ bir kovaryans matrisi oldugu icin pozitif bir matris olmali, yani herhangi bir x icin xσx 0. Bu bize tum ozvektorlerin 0 olmasi gerektigini soyluyor. Kovaryansin ozvektorleri verinin temel bilesenleridir (principal components), ki metotun ismi burada geliyor. Ornek Simdi tum bunlari bir ornek uzerinde gorelim. Iki boyutlu ornek veriyi ustte yuklemistik. Simdi veriyi sifirda ortalayacagiz yani her kolon icin o kolonun ortalama degerini tum kolondan cikartacagiz. PCA ile islem yaparken tum degerlerin sifir merkezli olmasi gerekiyor, cunku bu sayisal kovaryans icin gerekli. Daha sonra ozdeger / vektor hesabi icin kovaryansi bulacagiz. import numpy.linalg as lin from pandas import * data = read_csv("testset.txt",sep="\t",header=none) print data.shape print data[:10] means = data.mean() meanless_data = data - means cov_mat = np.cov(meanless_data, rowvar=0) print cov_mat.shape eigs,eigv = lin.eig(cov_mat) eig_ind = np.argsort(eigs) print eig_ind (1000, 2) 0 1 0 10.235186 11.321997 1 10.122339 11.810993 2 9.190236 8.904943 3 9.306371 9.847394 4 8.330131 8.340352 5 10.152785 10.123532 6 10.408540 10.821986 7 9.003615 10.039206 8 9.534872 10.096991 9 9.498181 10.825446 (2, 2) [0 1] print eigs[1],eigv[:,1].t print eigs[0],eigv[:,0].t 4

2.89713495618 [-0.52045195-0.85389096] 0.366513708669 [-0.85389096 0.52045195] En buyuk olan yonu quiver komutunu kullanarak orijinal veri seti uzerinde gosterelim, plt.scatter(data.ix[:,0],data.ix[:,1]) # merkez 9,9, tahminen secildi plt.quiver(9,9,eigv[1,1],eigv[0,1],scale=10,color= r ) plt.savefig( pca_2.png ) Goruldugu gibi bu yon hakikaten dagilimin, veri noktalarinin en cok yayilmis oldugu yon. Demek ki PCA yontemi dogru sonucu buldu. Her iki yonu de cizersek, plt.scatter(data.ix[:,0],data.ix[:,1]) plt.quiver(9,9,eigv[1,0],eigv[0,0],scale=10,color= r ) plt.quiver(9,9,eigv[1,1],eigv[0,1],scale=10,color= r ) plt.savefig( pca_3.png ) Bu ikinci yon birinciye dik olmaliydi, ve o da bulundu. Aslinda iki boyut olunca baska secenek kalmiyor, 1. yon sonrasi ikincisi baska bir sey olamazdi, fakat cok daha yuksek boyutlarda en cok yayilimin oldugu ikinci yon de dogru sekilde geri getirilecekti. SVD ile PCA Hesaplamak PCA bolumunde anlatilan yontem temel bilesenlerin hesabinda ozdegerler ve ozvektorler kullandi. Alternatif bir yontem Tekil Deger Ayristirma (Singular Value Decomposition -SVD-) uzerinden bu hesabi yapmaktir. SVD icin Lineer Cebir Ders 29 a bakabilirsiniz. Peki ne zaman klasik PCA ne zaman SVD uzerinden 5

PCA kullanmali? Bir cevap belki mevcut kutuphanelerde SVD kodlamasinin daha iyi olmasi, ayristirmanin ozvektor / deger hesabindan daha hizli isleyebilmesi [6]. Ayrica birazdan gorecegimiz gibi SVD, kovaryans matrisi uzerinde degil, A nin kendisi uzerinde isletilir, bu hem kovaryans hesaplama asamasini atlamamizi, hem de kovaryans hesabi sirasinda ortaya cikabilecek numerik puruzlerden korunmamizi saglar (cok ufak degerlerin kovaryans hesabini bozabilecegi literaturde bahsedilmektedir). PCA ve SVD baglantisina gelelim: Biliyoruz ki SVD bir matrisi su sekilde ayristirir A = USV T U matrisi n n dikgen (orthogonal), V ise m m dikgen. S in sadece kosegeni uzerinde degerler var ve bu σ j degerleri A nin tekil degerleri (singular values) olarak biliniyor. Simdi A yerine AA T koyalim, ve bu matrisin SVD ayristirmasini yapalim, acaba elimize ne gececek? AA T = (USV T )(USV T ) T = (USV T )(VS T U T ) = USS T U T S bir kosegen matrisi, o zaman SS T matrisi de kosegen, tek farkla kosegen uzerinde artik σ 2 j degerleri var. Bu normal. SS T yerine Λ sembolunu kullanalim, ve denklemi iki taraftan (ve sagdan) U ile carparsak (unutmayalim U ortanormal bir matris ve U T U = I), AA T U = UΛU T U AA T U = UΛ Son ifadeye yakindan bakalim, U nun tek bir kolonuna, u k diyelim, odaklanacak olursak, ustteki ifadeden bu sadece kolona yonelik nasil bir esitlik cikartabilirdik? Soyle cikartabilirdik, 6

(AA T )u k = σ 2 u k Bu ifade tanidik geliyor mu? Ozdeger / ozvektor klasik yapisina eristik. Ustteki esitlik sadece ve sadece eger u k, AA T nin ozvektoru ve σ 2 onun ozdegeri ise gecerlidir. Bu esitligi tum U kolonlari icin uygulayabilecegimize gore demek ki U nun kolonlarinda AA T nin ozvektorleri vardir, ve AA T nin ozdegerleri A nin tekil degerlerinin karesidir. Bu muthis bir bulus. Demek ki AA T nin ozektorlerini hesaplamak icin A uzerinde SVD uygulayarak U yu bulmak ise yarar, kovaryans matrisini hesaplamak gerekli degil. AA T ozdegerleri uzerinde buyukluk karsilastirmasi icin ise A nin tekil degerlerine bakmak yeterli! Dikkat, daha once kovaryansi A T A olarak tanimlamistik, simdi AA T ifadesi goruyoruz, bir devrik uyusmazligi var, bu sebeple, aslinda A T nin SVD si alinmali (altta goruyoruz). Ornek Ilk bolumdeki ornege donelim, ve ozvektorleri SVD uzerinden hesaplatalim. U,s,Vt = svd(meanless_data.t,full_matrices=false) print U [[-0.52045195-0.85389096] [-0.85389096 0.52045195]] print np.dot(u.t,u) [[ 1.00000000e+00 3.70255042e-17] [ 3.70255042e-17 1.00000000e+00]] Goruldugu gibi ayni ozvektorleri bulduk. New York Times Yazıları Analizi Simdi daha ilginc bir ornege bakalim. Bir arastirmaci belli yillar arasindaki NY Times makalelerinde her yazida hangi kelimenin kac kere ciktiginin verisini toplamis [1,2,3], bu veri 4000 kusur kelime, her satir (yazi) icin bir boyut (kolon) olarak kaydedilmis. Bu veri nytimes.csv uzerinde ek bir normalize isleminden sonra, onun uzerinde boyut indirgeme yapabiliriz. Veri setinde her yazi ayrica ek olarak sanat (arts) ve muzik (music) olarak etiketlenmis, ama biz PCA kullanarak bu etiketlere hic bakmadan, verinin boyutlarini azaltarak acaba verinin ayrilabilir hale indirgenip indirgenemedigine bakacagiz. Sonra etiketleri veri ustune koyup sonucun dogrulugunu kontrol edecegiz. Bakmak derken veriyi (en onemli) iki boyuta indirgeyip sonucu grafikleyecegiz. Illa 2 olmasi gerekmez tabii, 10 boyuta indirgeyip (ki 4000 kusur boyuttan sonra bu hala muthis bir kazanim) geri kalanlar uzerinde mesela bir kumeleme algoritmasi kullanabilirdik. Ana veriyi yukleyip birkac satirini ve kolonlarini gosterelim. 7

from pandas import * import numpy.linalg as lin nyt = read_csv ("nytimes.csv") labels = nyt[ class.labels ] print nyt.ix[:8,102:107] after afternoon afterward again against 0 1 0 0 0 0 1 1 1 0 0 0 2 1 0 0 1 2 3 3 0 0 0 0 4 0 1 0 0 0 5 0 0 0 1 2 6 7 0 0 0 1 7 0 0 0 0 0 8 0 0 0 0 0 Yuklemeyi yapip sadece etiketleri aldik ve onlari bir kenara koyduk. Simdi onemli bir normalizasyon islemi gerekiyor - ki bu isleme ters dokuman-frekans agirliklandirmasi (inverse document-frequency weighting -IDF-) ismi veriliyor - her dokumanda aşırı fazla ortaya cikan kelimelerin onemi ozellikle azaltiliyor, ki diger kelimelerin etkisi artabilsin. IDF kodlamasi alttaki gibidir. Once class.labels kolonunu atariz. Sonra herhangi bir deger iceren her hucrenin 1 digerlerinin 0 olmasi icin kullanilan DataFrame uzerinde astype(bools) isletme numarasini kullaniriz, boylece asiri buyuk degerler bile sadece 1 olacaktir. Bazi diger islemler sonrasi her satiri kendi icinde tekrar normalize etmek icin o satirdaki tum degerlerin karesinin toplaminin karekokunu aliriz ve satirdaki tum degerler bu karekok ile bolunur. Buna oklitsel (euclidian) normalizasyon denebilir. Not: Oklitsel norm alirken toplamin hemen ardindan cok ufak bir 1e-16 degeri eklememize dikkat cekelim, bunu toplamin sifir olma durumu icin yapiyoruz, ki sonra sifirla bolerken NaN sonucundan kacinalim. nyt2 = nyt.drop( class.labels,axis=1) freq = nyt2.astype(bool).sum(axis=0) freq = freq.replace(0,1) w = np.log(float(nyt2.shape[0])/freq) nyt2 = nyt2.apply(lambda x: x*w,axis=1) nyt2 = nyt2.apply(lambda x: x / np.sqrt(np.sum(np.square(x))+1e-16), axis=1) #nyt2 = nyt2.div(nyt2.sum(axis=0), axis=1) nyt2=nyt2.ix[:,1:] # ilk kolonu atladik print nyt2.ix[:8,102:107] afterward again against age agent 0 0 0.000000 0.000000 0.051085 0 1 0 0.000000 0.000000 0.000000 0 2 0 0.021393 0.045869 0.000000 0 3 0 0.000000 0.000000 0.000000 0 4 0 0.000000 0.000000 0.000000 0 5 0 0.024476 0.052480 0.000000 0 6 0 0.000000 0.008536 0.000000 0 7 0 0.000000 0.000000 0.000000 0 8

8 0 0.000000 0.000000 0.000000 0 Not: Bir diger normalize metotu import pandas as pd df = pd.dataframe([[1.,1.,np.nan], [1.,2.,0.], [1.,3.,np.nan]]) print df print df.div(df.sum(axis=0), axis=1) 0 1 2 0 1 1 NaN 1 1 2 0 2 1 3 NaN 0 1 2 0 0.333333 0.166667 NaN 1 0.333333 0.333333 NaN 2 0.333333 0.500000 NaN SVD yapalim nyt3 = nyt2 - nyt2.mean(0) u,s,v = lin.svd(nyt3.t,full_matrices=false) print s[:10] [ 1.41676764 1.37161893 1.31840061 1.24567955 1.20596873 1.18624932 1.15118771 1.13820504 1.1138296 1.10424634] print u.shape (4430, 102) SVD nin verdigi u icinden iki ozvektoru seciyoruz (en bastakiler, cunku Numpy SVD kodu bu ozvektorleri zaten siralanmis halde dondurur), ve veriyi bu yeni kordinata izdusumluyoruz. proj = np.dot(nyt, u[:,:2]) proj.shape plt.plot(proj[:,0],proj[:,1],. ) plt.savefig( pca_4.png ) 9

Simdi ayni veriyi bir de etiket bilgisini devreye sokarak cizdirelim. Sanat kirmizi muzik mavi olacak. arts =proj[labels == art ] music =proj[labels == music ] plt.plot(arts[:,0],arts[:,1], r. ) plt.plot(music[:,0],music[:,1], b. ) plt.savefig( pca_5.png ) Goruldugu gibi veride ortaya cikan / ozvektorlerin kesfettigi dogal ayirim, hakikaten dogruymus. Metotun ne yaptigina dikkat, bir suru boyutu bir kenara atmamiza ragmen geri kalan en onemli 2 boyut uzerinden net bir ayirim ortaya cikartabiliyoruz. Bu PCA yonteminin iyi bir is becerdigini gosteriyor, ve kelime sayilarinin makalelerin icerigi hakkinda ipucu icerdigini ispatliyor. Kaynaklar [1] Alpaydin, E., Introduction to Machine Learning, 2nd Edition [2] Strang, G., Linear Algebra and Its Applications, 4th Edition [3] http://www.stat.columbia.edu/ fwood/teaching/w4315/spring2010/ PCA/slides.pdf [4] Cosma Rohilla Shalizi, Advanced Data Analysis from an Elementary Point of View [5] http://www.ldc.upenn.edu/catalog/catalogentry.jsp?catalogid= LDC2008T19 [6] http://www.stat.cmu.edu/ cshalizi/490/pca [7] http://www.math.nyu.edu/faculty/goodman/teaching/rpme/notes/ Section3.pdf [8] Lineer Cebir notlarimizda SVD turetilmesine bakinca ozdeger/vektor mantigina atif yapildigini gorebiliriz ve akla su gelebilir; ozdeger / vektor rutini isletmekten kurtulalim dedik, SVD yapiyoruz, ama onun icinde de ozdeger/vektor 10

hesabi var. Fakat sunu belirtmek gerekir ki SVD numerik hesabini yapmanin tek yontemi ozdeger/vektor yontemi degildir. Mesela Numpy Linalg kutuphanesi icindeki SVD, LAPACK dgesdd rutinini kullanir ve bu rutin ic kodlamasinda QR, ve bir tur bol / istila et (divide and conquer) algoritmasi isletmektedir. 11